当前位置: 技术问答>linux和unix
请教一下关于linux内存管理的问题,100分(只能给100),:)~
来源: 互联网 发布时间:2015-04-11
本文导语: 操作系统里面介绍了几种理论上的内存管理方法,分区式、分页式、还有分段式, 但是听说win2000的虚拟内存管理是采取分页和对换的技术,每个进程都独享整个地址空间,不知道linux采用的是什么内存管理方式,望...
操作系统里面介绍了几种理论上的内存管理方法,分区式、分页式、还有分段式,
但是听说win2000的虚拟内存管理是采取分页和对换的技术,每个进程都独享整个地址空间,不知道linux采用的是什么内存管理方式,望高手们不吝指教啊!!
但是听说win2000的虚拟内存管理是采取分页和对换的技术,每个进程都独享整个地址空间,不知道linux采用的是什么内存管理方式,望高手们不吝指教啊!!
|
这可是个大话题,Linux的MM部分可是超级多阿,呵呵。
我对Linux内核也不是很熟,先说说我的看法:
Linux下的MM是采用分段和分页共同管理的,但是对于分段,其实在Linux里并没有起什么作用,因为用到的4个段:内核代码段,内核数据段,用户代码段,用户数据段,他们的起始地址都是0,长度都是4G,没有起到段的作用。当然还用到了其他的段,不过不是很常用。
对于页,Linux下采用的是三级页表的方式,分别是PGD, PMD, PTE。当然在IA32架构下只有2级页表,所以每个PMD只有一项,对于每个进程来说,0x0-0xbfffffff是属于用户态的进程,而0xc0000000-0xffffffff属于内核态的进程,用户进程不能直接访问。
内核常用的分配内存的函数有kmalloc,vmalloc和mmap系统调用。
我对Linux内核也不是很熟,先说说我的看法:
Linux下的MM是采用分段和分页共同管理的,但是对于分段,其实在Linux里并没有起什么作用,因为用到的4个段:内核代码段,内核数据段,用户代码段,用户数据段,他们的起始地址都是0,长度都是4G,没有起到段的作用。当然还用到了其他的段,不过不是很常用。
对于页,Linux下采用的是三级页表的方式,分别是PGD, PMD, PTE。当然在IA32架构下只有2级页表,所以每个PMD只有一项,对于每个进程来说,0x0-0xbfffffff是属于用户态的进程,而0xc0000000-0xffffffff属于内核态的进程,用户进程不能直接访问。
内核常用的分配内存的函数有kmalloc,vmalloc和mmap系统调用。