Linux内存管理对多核的支持相关问题
时间:2011-01-14
来源:互联网
大家好,最近在琢磨Linux2.6内存管理,有些问题不是很明白,贴出来请大家帮忙解答以下,给分啦~~
1. Linux 2.6内核版本中内存管理对多核的支持,我在一篇文章中看到这样一句话说现在的每一个cpu或者cpu core在内存分配时,都有属于自己私有的空闲链表队列?
这句话该如何理解,我的疑惑是:内存是所有 cpu或者cpu core共享的,OS在分配时,按照Buddy(大内存快分配) 和 Slab(小内存分配)二种方式来分配物理内存供应用
程序使用,Buddy算法将内存页面分成0.......10层次,每一层按照空闲页面块链表组成,这样的话应该是所有的CPU都是按照这种方式共享空闲页的链表的,为什么说每一个cpu和cpu core都有私有空闲链表呢?
不解啊,例外,如果真的是每个cpu或者cpu core有自己私有空闲链表,那么内核代码内存管理中在哪一部分实现的啊?
2.用户进程在在用户空间执行过程中,根据进程描述符中的mm_struct结构,找到该进程的页表,从而将其映射到对应的物理地址中,请问页表是怎么创建的?是在进程创建时,复制了父进程的页表吗?那对应的物理地址是怎么分配的呢?求解
谢谢大家,请指点.....
1. Linux 2.6内核版本中内存管理对多核的支持,我在一篇文章中看到这样一句话说现在的每一个cpu或者cpu core在内存分配时,都有属于自己私有的空闲链表队列?
这句话该如何理解,我的疑惑是:内存是所有 cpu或者cpu core共享的,OS在分配时,按照Buddy(大内存快分配) 和 Slab(小内存分配)二种方式来分配物理内存供应用
程序使用,Buddy算法将内存页面分成0.......10层次,每一层按照空闲页面块链表组成,这样的话应该是所有的CPU都是按照这种方式共享空闲页的链表的,为什么说每一个cpu和cpu core都有私有空闲链表呢?
不解啊,例外,如果真的是每个cpu或者cpu core有自己私有空闲链表,那么内核代码内存管理中在哪一部分实现的啊?
2.用户进程在在用户空间执行过程中,根据进程描述符中的mm_struct结构,找到该进程的页表,从而将其映射到对应的物理地址中,请问页表是怎么创建的?是在进程创建时,复制了父进程的页表吗?那对应的物理地址是怎么分配的呢?求解
谢谢大家,请指点.....
作者: pkw888 发布时间: 2011-01-14
说下自己的看法
1、楼主忽略了硬件,多核必定是多总线的,否则1核等另1核那就没意思了,同理,每个core有自己的DDR但又允许别的core访问该DDR,这种体系结构也是支持的啊。。。它的确存在,楼主自己搜下NUMA的介绍。软件方面对于NUMA的体系结构中每个core对应的DDR用一个node表示,每个node又描述了一组page。。。这样你的疑问是否解决了呢。
2、如果进程是通过fork创建的,那它是没页表的,它使用parent的页表。fork采用一种叫写时复制的,只有当子进程进行写操作的时候才会对父进程的页表进行拷贝。之所以采用这种技术是因为一般fork一个进程都是用来执行其他程序的,否则创建一个进程来做和父进程一样的操作有什么意思。除了fork之外,当loader将程序load到DDR中时,也就是你执行一个程序时,loader或scheduler会为程序创建页表。至于是loader还是scheduler这要看进程状态了,比如有些系统不是进程一创建就将它加入到ready队列的,而是scheduler在合适的时候再将其加入到ready队列。反正不管怎样,页表创建必须是在加入ready队列之前。
1、楼主忽略了硬件,多核必定是多总线的,否则1核等另1核那就没意思了,同理,每个core有自己的DDR但又允许别的core访问该DDR,这种体系结构也是支持的啊。。。它的确存在,楼主自己搜下NUMA的介绍。软件方面对于NUMA的体系结构中每个core对应的DDR用一个node表示,每个node又描述了一组page。。。这样你的疑问是否解决了呢。
2、如果进程是通过fork创建的,那它是没页表的,它使用parent的页表。fork采用一种叫写时复制的,只有当子进程进行写操作的时候才会对父进程的页表进行拷贝。之所以采用这种技术是因为一般fork一个进程都是用来执行其他程序的,否则创建一个进程来做和父进程一样的操作有什么意思。除了fork之外,当loader将程序load到DDR中时,也就是你执行一个程序时,loader或scheduler会为程序创建页表。至于是loader还是scheduler这要看进程状态了,比如有些系统不是进程一创建就将它加入到ready队列的,而是scheduler在合适的时候再将其加入到ready队列。反正不管怎样,页表创建必须是在加入ready队列之前。
作者: alexhuang2010 发布时间: 2011-01-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28