日期:2014-05-16  浏览次数:20650 次

关于页表的疑问,这不科学。。。。!
操作系统表述:
对于一个具有32位逻辑地址空间的分页系统,规定页面大小为4 KB即212 B,则在每个进程页表中的页表项可达1兆个之多。又因为每个页表项占用一个字节, 故每个进程仅仅其页表就要占用1M的内存空间,而且还要求是连续的。 

我怎么觉得它说的不对,怎么可能每个进程都需要1m页表,如果是个很小的进程,这样的页表本身也是一个浪费,页表大小应该根据进程大小而定啊
------解决方案--------------------
关键点:1.多级页表
2.未分配的线性地址在第一级,第二级,第三级...中可以标记为未使用。那么后面的级别的页表就不用存在了。访问一个未分配的线性地址会出现段错误。
------解决方案--------------------
不是这么说的。由于mmu,每个进程有独立的4g的虚拟地址。其中0-3g由进程使用。注意这仅仅是虚拟地址。
而后进程描述符task_struct的有一个内存描述符字段mm_struct mm。而内存描述符的字段里保存了一个vm_area_struct结构体的链表。这个vm_area_struct结构体叫做线性区描述符,这个描述符链表描述了进程使用了哪些虚拟地址。而进程的页表仅仅描述了线性区描述的地址而已,所以进程使用地址越少,其实页表也越少得。