基本分页内存管理

为什么要引入基本分页内存管理?

答:在连续存储管理方式中,固定分区会产生内部碎片,动态分区会产生外部碎片。这两种技术对内存的利用率都比较低。而分页式存储管理方式把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位,每个进程也以块为基本单位划分,进程在执行时,以块为单位逐个申请主存中的块空间。

分页式存储管理方式从形式上来看,很像固定分区,但却有着本质的不同点:

  1. 块的大小相对于分区来说要小得多
  2. 进程也按照块来划分,运行时按照块来申请主存,尽管这样也会产生内部碎片,但是相对于进程的大小来说是非常小的,每个进程平均只产生半个块大小的内部碎片

进程页表:为了便于在内存中找到进程的每个页面对应的物理块,系统为每个进程建立了一张页表,记录页面在内存中对应的物理块号,页表一般存在内存中

页表的第一部分存的是页号,第二部分存的是物理内存中的块号,页表项的第二部分与逻辑地址的第二部分共同组成物理地址

物理块(盘块)的分配与回收

  • 位示图

    利用位示图(即二维数组Map[m][n])的一 位(0/1)来表示一个内存物理块(或磁盘盘块)的使用情况,使内存所有物理块(或磁盘上所有盘块)都与一个二进制位相对应

  • 物理块(盘块)的分配

    1. 根据需求计算确定所需物理块数zKs
    2. 顺序扫描位示图,找出zKs个其值均为空闲“0”的 二进制位
    3. 将所找到的“0”值二进制位Map[i][j]的行/列号转换为与之对应的物理块(盘块)号b: b = n x i + j
    4. 按物理块(或盘块)号分配物理块(或盘块) ,同 时修改位示图和进程页表
  • 物理块(盘块)的回收

    1. 将回收物理块(或盘块)的物理块(或盘块)号b 转换为位示图中的行号i和列号j:

      i = b DIV n;

      j = b MOD n;

    2. 按物理块(或盘块)号回收物理块(或盘块)

    3. 根据回收物理块(或盘块)对应二进制位的行/列号,并修改位示图和进程页表

分页内存地址结构及地址变换

一个页表项多长?

每个页表项代表一个页面的地址,一般很小。

以32位逻辑地址为例,字节为编码单位,一个页面的大小为4 KB,所以2的32次方 B 除以4 KB地址空间一共有 1 M 页,则需要log 2 (1 M) = 20 位才能保证表示范围能容纳所有的页面,又因为以字节为编码单位,[20 / 8] = 3 B(字节),所以页表项的大小应该大于等于3 B,取4 B为常见。

所以该页的页号为:页表始址+页号x页表项长度

分页内存地址变换机构

基本的地址变换机构

  1. 先将逻辑地址寄存器的页号与页表寄存器的页表长度比较,看是否越界;
  2. 若不越界,则页表始址+页号x页表项长度,得到页号。由于进程页表是像数组一样的连续存储的,通过像数组一样地访问下标(页号为下标),查到物理块号;
  3. 在物理地址寄存器中,将物理块号与块内地址(也是页内地址)相加得到物理地址;

具有快表的地址变换机构

从上面我们可以看出:CPU要想获取一个数据时,必须两次访问内存:

1、从内存中的页表中,寻找对应的物理块号,将物理块号与页内地址组合成物理地址。

2、根据组合成的物理地址,来获取数据。

所以为了提高效率就引进了快表,什么是快表?

在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓冲寄存器,称为“联想存储器”或“快表”。 用来存放当前访问的若干页表项,加速地址变换过程,命中率达到90%以上 。

在引入快表的分页存储管理方式中,通过快表查询,可以直接得到逻辑页所对应的物理块号,由此拼接形成实际物理地址,减少了一次内存访问,缩短了进程访问内存的有效时间。

但是,由于快表的容量限制,不可能将一个进程的整个页表全部装入快表,不一定每次在快表中都能找到要寻找得页号,所以在快表中查找到所需表项存在着命中率的问题。在快表中查不到还是得往页表中查找。但快表的命中率高,在总体上来说,还是减少了访问内存的时间。

两级页表

为什么要引入两级页表?

由于引入了分页管理,进程在执行时不需要将所有页都调入内存页框中,只要将保存有映射关系的页表存入内存中即可

我们这里考虑一下页表的大小,以32位逻辑空间,页面大小4 KB ,页表项大小4 B 为例,若要实现进程对全部逻辑地址空间的映射,则每个进程需要需要2的20次方个页表项。2的20次方个页表项 * 4 B ,为4 MB ,也就是说每个进程在页表项这一块就需要4 MB 的主存空间,显然这是比较大的内存占用。即使不考虑对全部逻辑地址空间的映射,一个逻辑地址空间稍大的进程,其页表项所占用的主存空间也是过大的。

所以,为了压缩页表,我们将页表映射的思想进一步延伸,使用一个层次结构的页表——两级页表

基本思想

对页表按内存物理块大小进行分页,对它们进行 编号并离散地存放亍不同的物理块中;同时为离 散分配的页表分页再建立一张页表,称之为外层 页表,以记录各页表分页对应的物理块号 。

以32位逻辑地址空间、页面大小为4KB的系统为例,若采用一级页表结构,则每个进程页表的页 表项可达1M(2的20次方)个;而若采用两级页表结构,由于各页表分页包含4KB/4B=1K个页表项,故需1K(2的10次方) 个页表分页即可(也就是说每一页的页表有1K个页表项),因此外层页表的外层页号及内 层页号均为10位。此时逻辑地址结构为:

其结构示意图如下:

其地址变换结构如下:

多级页表结构

对亍64位计算机,如规定页面大小仍为4KB,则每 个进程的页表项可达264/4K=252个,且外层页表可 能有252/210 =242个页表项;即使按每个页表分页 1M个页表项来划分(假设页表项大小4B),页表 分页将达到4MB,而外层页表仍有252/220 =4G个 页表项,要占用16GB的连续内存空间。

可见,无论 怎样划分,其结果都是不能接受的。因此,必须采 用多级页表,将16GB的外层页表再进行分页,并将 各个分页离散的分配到不相邻接的物理块中,在利 用第二级的外层页表来映射它们之间的关系。事实 上,对于64位的机器,用三级页表结构都很难适应

反置页表

  1. 一般页表的表项是按页号进行排序,而页表项内容 包括物理块号的;反置页表则是为每一个物理块设 置一个页表项并将它们按物理块的号数排序,页表 项内容包括对应页号及其隶属进程的标识符
  2. 在利用反置页表进行地址变换时,是用进程标识符 和页号去检索反置页表。若找到与之匹配的表项, 则以该表项序号即该页所在物理块号与页内地址构 成物理地址;否则地址出错或产生调页中断请求
  3. 进程外部页表的设立及反置页表Hash检索

其地址变换机构如下:

posted @ 2020-05-02 19:05  Hhhighway  阅读(1342)  评论(0编辑  收藏  举报