多级页表如何节省进程页表空间
2013-06-03 19:48
337 查看
<深入理解linux内核>:如果使用简单的一级页表,如果进程使用全部4G线性地址空间,那么将需要高达2^20表项(总共地址线是32位,每页大小为4kb,则页偏移量需要低12位,高20位当作页表地址)来保存表示每个进程的页表,若每项4B,则需要4MB的ram来存储页表。即使一个进程并不使用内的所有地址。
书上提出:使用这种二级模式能够减少每个进程页表所需RAM数量。开始一直没想通,为什么节省了呢?从你最终要存储的表项来看,无论如何你存储的表项是不会少的,而且多级页表还会增加存储开销。
其实是这样的,二级表只是从进程的角度来看,为进程节省了页表项(其实所有的页表存储空间增大了)。二级模式通过只为进程实际使用的那些虚拟内存区请求页表来减少页表,就是进程未使用的页暂时可以不用为其建立页表,因为如果使用一级页表的话,你就必须为所有的4G范围内分配页表,不能细分。每个活动进程必须有一个分配给它的页目录,不过没必要马上为进程的所有页表都分配ram,只有在进程实际需要一个页表时才给该页表分配ram,这样就提高了效率。
注:正在使用的页目录物理地址存放在控制寄存器cr3中。
注:linux进程的线性地址空间分成两部分:
(1)0x00000000~0xbfffffff的线性地址,无论用户态和内核态的进程都可以寻址;
(2)0xc0000000~0xffffffff的线性地址,只有内核态的进程可以寻址。
书上提出:使用这种二级模式能够减少每个进程页表所需RAM数量。开始一直没想通,为什么节省了呢?从你最终要存储的表项来看,无论如何你存储的表项是不会少的,而且多级页表还会增加存储开销。
其实是这样的,二级表只是从进程的角度来看,为进程节省了页表项(其实所有的页表存储空间增大了)。二级模式通过只为进程实际使用的那些虚拟内存区请求页表来减少页表,就是进程未使用的页暂时可以不用为其建立页表,因为如果使用一级页表的话,你就必须为所有的4G范围内分配页表,不能细分。每个活动进程必须有一个分配给它的页目录,不过没必要马上为进程的所有页表都分配ram,只有在进程实际需要一个页表时才给该页表分配ram,这样就提高了效率。
注:正在使用的页目录物理地址存放在控制寄存器cr3中。
注:linux进程的线性地址空间分成两部分:
(1)0x00000000~0xbfffffff的线性地址,无论用户态和内核态的进程都可以寻址;
(2)0xc0000000~0xffffffff的线性地址,只有内核态的进程可以寻址。
相关文章推荐
- 多级页表如何节省进程页表空间
- 多级页表如何节省进程页表空间
- 多级页表如何节省内存
- 如何访问一个进程的内存空间
- 如何节省数据库的存储空间
- iOS 9的App Thinning方案如何节省存储空间
- 手游rpg如何有效的节省地图数据的存储空间
- Windows7备份磁盘空间如何更好的最大限度的节省
- malloc 之后的父子进程之间的空间关系如何
- win8 c盘越来越小如何节省空间 修改win8应用安装路径
- malloc()后进行fork()系统调用,父子进程空间关系如何
- 更新studio时如何节省电脑的存储空间
- 如何节省内存空间
- [数据结构]如何节省程序空间
- 关于进程页表和页目录是存放在内核空间,还是用户空间,低端还是高端内存的思考和验证
- [数据结构]如何节省程序空间
- IAR编译器如何节省代码占用的flash空间?
- 如何访问一个进程的内存空间
- Win7系统如何将桌面文件转移到D盘节省C盘空间