基本分页内存管理

Posted hhhighway

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本分页内存管理相关的知识,希望对你有一定的参考价值。

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

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

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

  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检索

其地址变换机构如下:

技术图片

以上是关于基本分页内存管理的主要内容,如果未能解决你的问题,请参考以下文章

:内存管理 -- 非连续分配管理方式:基本分页存储管理方式(基本分页存储管理的基本概念基本地址变换机构具有快表的地址变换机构两级页表)

408考研操作系统)第三章内存管理-第一节6:非连续分配管理方式之基本分页存储管理

内存管理

(王道408考研操作系统)第三章内存管理-第一节6-1:非连续分配管理方式之基本分页存储管理

基本分页请求分页储存管理方式

操作系统-3.3-内存(动态分区分配算法&&基本分页存储管理详解)