老羊快跑 微信公众号 内有老羊的《200分钟PCB设计傻瓜教程》,免费观看
最近有很多同学问这样几个问题,就是在操作系统中,1.如果存储器管理采用基本分页机制,那么每个进程有几个页表?2.如果采用基本分段机制,每个进程有几个段表?如果采用基本分页和分段相结合的方式,每个进程有几个段表和几个页表?
下面给出统一的答案供大家参考。其实不同的操作系统的在内存储器管理上,使用的方法可能是不一样,不能一概而论。针对我们常见的PC操作系统而言,一般:
1. 如果存储器采用基本分页机制,那么操作系统会为每个进程或任务建立一个页表(这个页表可能是一级的也可能是多级的)。整个操作系统中有多个进程在运行,那么系统就会有多个页表。页表在内存中的存储位置由寄存器CR3给出。
2. 如果存储器采用基本分段机制,那么操作系统会为每个进程或任务建立一个段表(一般不用多级),用于记录数据段、代码段等各类段在内存中的具体位置。
3. 如果采用段页式结合的机制,那么一般一个进程或任务,操作系统会给其建立一个段表,而段表中的每个段又会对应一个页表,也就是说,段页式机制的每个进程有一个段表,有多个页表。
对于典型的linux系统而言,操作系统会维护一个全局描述符表(相当于系统的段表),全局描述符表中用于记录系统任务和用户任务的描述符,其中用户任务的描述符又指向用户任务的局部描述符表(相当于用户任务的段表)。因此要说linux中的分段机制用的是一张大表,我个人认为也是有道理的。如果大家感兴趣可以翻看《Linux内核完全剖析基于0.12内核》当然,如果应付考试,请记住上面三点。
老羊快跑,欢迎关注。