基本分页存储管理方式的两级和多级页表

如题所述

现代的大多数计算机系统,都支持非常大的逻辑地址空间(2^32~2^64)。在这样的环境下,页表就变得非常大,要占用相当大的内存空间。例如,对于一个具有32位逻辑地址空间的分页系统,规定页面大小为4 KB即2^12 B,则在每个进程页表中的页表项可达1兆个之多。又因为每个页表项占用四个字节,故每个进程仅仅其页表就要占用4 MB的内存空间,而且还要求是连续的。显然这是不现实的,我们可以采用下述两个方法来解决这一问题:
(1) 采用离散分配方式来解决难以找到一块连续的大内存空间的问题;
(2) 只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。
两级页表(Two-Level Page Table)
对于要求连续的内存空间来存放页表的问题,可利用将页表进行分页,并离散地将各个页面分别存放在不同的物理块中的办法来加以解决,同样也要为离散分配的页表再建立一张页表,称为外层页表(Outer Page Table),在每个页表项中记录了页表页面的物理块号。下面我们仍以前面的32位逻辑地址空间为例来说明。当页面大小为 4 KB时(12位),若采用一级页表结构,应具有20位的页号,即页表项应有1兆个;在采用两级页表结构时,再对页表进行分页,使每页中包含2^10 (即1024)个页表项,最多允许有2^10个页表分页;或者说,外层页表中的外层页内地址P2为10位,外层页号P1也为10位。此时的逻辑地址结构可描述如下:

由右图可以看出,在页表的每个表项中存放的是进程的某页在内存中的物理块号,如第0#页存放在1#物理块中;1#页存放在4#物理块中。而在外层页表的每个页表项中,所存放的是某页表分页的首址,如第0#页表是存放在第1011#物理块中。我们可以利用外层页表和页表这两级页表,来实现从进程的逻辑地址到内存中物理地址间的变换。
为了地址变换实现上的方便起见,在地址变换机构中同样需要增设一个外层页表寄存器,用于存放外层页表的始址,并利用逻辑地址中的外层页号,作为外层页表的索引,从中找到指定页表分页的始址,再利用P2作为指定页表分页的索引,找到指定的页表项,其中即含有该页在内存的物理块号,用该块号和页内地址d即可构成访问的内存物理地址。右图示出了两级页表时的地址变换机构。 对于32位的机器,采用两级页表结构是合适的;但对于64位的机器,采用两级页表是否仍可适用的问题,须做以下简单分析。如果页面大小仍采用4 KB即2^12 B,那么还剩下52位,假定仍按物理块的大小(2^12位)来划分页表,则将余下的42位用于外层页号。此时在外层页表中可能有4096 G个页表项,要占用16 384 GB的连续内存空间。这样的结果显然是不能令人接受的,因此必须采用多级页表,将外层页表再进行分页,也就是将各分页离散地装入到不相邻接的物理块中,再利用第2级的外层页表来映射它们之间的关系。
对于64位的计算机,如果要求它能支持2^64 B(= 1 844 744 TB)规模的物理存储空间,则即使是采用三级页表结构也是难以办到的;而在当前的实际应用中也无此必要。故在近两年推出的64位OS中,把可直接寻址的存储器空间减少为45位长度(即2^45)左右,这样便可利用三级页表结构来实现分页存储管理。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-07-31
页和分段系统有许多相似之处,但在概念上两者完全不同,主要表现在:

1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。

段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。

2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。

段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。

分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

基本分页存储管理方式两级和多级页表
首先,采用离散分配策略,即不求连续内存空间,而是将页表分散存储在物理块中。此外,可以使用多级页表结构,如两级页表,来管理页表的分布。以32位逻辑地址空间为例,如果采用一级页表,每个页表项需20位,但若改为两级,每级页表分为1024个项,每个外层页表项仅需10位。这样,逻辑地址结构可以描述为两...

基本分页存储管理方式的两级和多级页表
两级页表(Two-Level Page Table)对于要求连续的内存空间来存放页表的问题,可利用将页表进行分页,并离散地将各个页面分别存放在不同的物理块中的办法来加以解决,同样也要为离散分配的页表再建立一张页表,称为外层页表(Outer Page Table),在每个页表项中记录了页表页面的物理块号。下面我们仍以前面的...

基本分页存储管理方式页面与页表
分页存储管理是一种常见的内存管理方式,它将进程的逻辑地址空间划分为固定大小的片,即页面,每个页面都有唯一的编号。内存空间则被划分为同样大小的物理块,称为页框,它们也有各自的编号。在分配内存时,进程的页面被分散存储到多个物理块,可能导致页内碎片。选择合适的页面大小至关重要。如果页面过小...

两级页表
因此各级页表最多包含1024个页表项,需要10个二进制位才能映射到1024个页表项,因此每级页表对应的页号应为10位二进制。共28位的页号至少要分为 3 级。  (2) 两级页表的 访问次数 分析(假设没有页表):  从上面可以看出,两级页表虽然解决了页表需要连续存储的问题,但...

【操作系统-内存】内存的分配和管理方式
一级基本分页存储管理将逻辑地址空间分为页,物理地址空间分为页框。页表和页表项用于记录页框号,地址结构包含页号、页内偏移量。页表项结构包含物理页号。快表(TLB)加速地址变换。地址变换过程涉及页号判断、查询页表或快表、计算物理地址等步骤。分页系统需要页目录表以实现多级页表,节省存储空间。二级...

基本分页存储管理
基本分页存储管理中地址是一维的,即只要给出一个逻辑地址,系统就可以自动计算出页号、偏移量,不需要显式告诉系统偏移量是多少 理论上,页表项长度为3即可表示内存块号的范围,但是为了方便页表查询,会让页面恰好能装得下整数个页表项,令每个页表项占4字节 4KB页面,可以放4096\/3 =1365个页表项,...

OS漫谈--内存虚拟化--分页:多级页表
多级页表将页表分为多个层次,每个层次都代表一个更大的内存空间。在分页机制中,将页表分成页大小的单元,即每个层次表示特定数量的页。通过这种方法,可以去除所有无效区域的页表项,节省内存空间。在多级页表中,页目录项有效,意味着该PDE(page directory entries)指向的页表中至少有一项是有效的。页...

如何理解页表?
一、理解这样一个概念,操作系统为了方便管理内存,将内存划分成很若干个页,每个页表项就代表一个页的地址(页的地址,不是内存地址)。二、4B大小的页表项,意味着支持最大的页表数是2的32次方=4294967296 (4B=32bit),一个页的大小4K,那么4B大小的页表项,表示操作系统支持4294967296*4K = 16GB大...

基本分页存储管理方式的页面与页表
1) 页面和物理块分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存...

Linux存储管理方式
二级页表的页表项: 过程: 在采用两级页表结构的情况下,对于正在运行的进程,必须将其外层页表调入内存,而对于内页表则只需调入一页或几页。为了表征某页的页表是否已经调入内存,还应在外层页表项中增设一个状态位 S,其值若为 0,表示该页表分页不在内存中,否则说明其分页已调入内存。进程运行时,地址变换机构根据...

相似回答