非连续分配管理方式

// 仅为学习记录,不做详细讲解

简介

相比于连续分配管理方式,非连续允许一个程序分散装入不相邻的内存区域,这就好像把人体给肢解了一样。当然这不算完,分散的程序要构成有机体程序那么就要通过索引的方式再连接起来。

分类

以下是几种非连续管理方式的分类
在这里插入图片描述

1. 基本分页存储管理方式

1.1 分页存储的概念

  1. 进程中的块:页,页面(要求页面大小为 2 的整数幂)
  2. 内存中的块:页框
  3. 外存中的块:块

note:分页中所有页面的大小一样

  1. 地址结构
    前一部分为页号,后一部分为页内偏移地址,地址长度 32 位,地址最多允许 2^20 个页
    在这里插入图片描述
  2. 页表
    系统为每一个进程建立页表,用于作为内存地址和外存中的物理地址的映射,其组成为页号块号。页表常驻内存。
    特别的,页表项的第二部分与地址结构的第二部分共同组成物理地址
    在这里插入图片描述

1.2 基本地址变换机构

我们知道页表用于记录内存的逻辑地址到外存的物理地址的映射,而地址变换机构就是利用页表的记录来实现这个转换过程的。
在这里插入图片描述
页表寄存器:正如前面所讲,页表常驻内存,所以当我们要使用页表时就必须找到它,它在内存中的地址由页表寄存器来实现。
特别的,只有在程序执行时才会读入页表的两个信息到页表寄存器

计算从逻辑地址到物理地址的映射

首先分析,整个映射过程其实就是让页表**动态化**,即我们只要找到页号,页号映射到
对应的页表项,页表项对应的块号,再由块号和地址结构的页内偏移量组合(回顾概念 
5 )就可以得到结果

这个流程如下,假设页号为 P,页内偏移量 W,页面大小为 L,页表长度 M,逻辑地址为 A,物理地址为 E 的转换过程如下:

  1. 页号 P = A / L
  2. 页内偏移量 W = A % L
  3. 比较页号 P 和页表长度 M,如果 P>=M,则表示越界了
  4. 该页号对应的页表项 = 页表起始地址 + 页号 P *页表项长度
  5. 通过页表项找到对应的物理块号
  6. 物理地址 E = W + 物理块号 * L

特别的,页面大小,页框大小和块大小是一样的,以便一一对应

1.3 具有快表的地址变换机构

在这里插入图片描述

由上面的查找过程可知,我们存取一次数据(指令)至少需要两次访问内存,第一次是计算出数据(指令)对应的物理地址,第二次才是真正去取这个地址。这样速度上就慢了一半。

这就好像我周二要在某个规定的时间去 A 地拿某个东西,因为对 A 地不熟悉,为了保证按时到达,我周一就去 A 地一趟熟悉路线,但是周二才是真正去取这个东西。

于是我们设置了快表(顾名思义就是提高运行速度),用来存放当前访问的若干表项。

具有快表的分页机制的地址变换过程:

  1. 得到逻辑地址后先把页号和快表中的页号对比
  2. 如果找到匹配项,则通过快表找到对应的物理块号完成
  3. 如果没有,则要想之前的步骤一样去页表中取

1.4 两级页表

为了进一步提高内存的利用率,我们用两级页表的方式来压缩页表的空间。

关于两级页表在考试中只需要记住顶级页表最多只能由一个页面。
在这里插入图片描述

相关计算题的知识点补充

  1. 一 页 的 大 小 = 2 页 内 偏 移 量 位 数 , 偏 移 量 通 常 是 12 位 一页的大小=2^{页内偏移量位数},偏移量通常是 12 位 =2,12
  2. 页 表 最 大 占 用 的 字 节 数 = 2 页 号 位 数 ∗ 页 表 项 大 小 页表最大占用的字节数 = 2^{页号位数}*页表项大小 =2

2. 基本分段存储管理方式

2.1 分段

分段存储管理主要要从语义上来进行分段。比如一个程序由主程序,负责加法逻辑的程序
负责减法逻辑的程序,那么就可以按上述分成三段。每段从 0 开始分配一段连续空间(要
求段内连续,段间可以不连续),由此可见整个作业的地址空间是二维的

段的划分是在用户编程的时候完成的


NOTE:段号和段内偏移量必须显式提供

2.2 段表

段表的结构(段号,段长,本段在内存中的始址)
段表实现了从逻辑地址到物理内存区的映射
在这里插入图片描述

利用段表实现物理内存区的映射
在这里插入图片描述

2.3 地址变换机构

在这里插入图片描述

逻辑地址 A 到物理地址 E 之间的地址变换过程:

  1. 从 A 中提取段号 S 和 偏移量 W
  2. 比较段号 S 和段表长度 M,若 S>= M 则越界
  3. 找出段表项地址 = 段表始址 F + 段号 S*段表项长度
  4. 取出段表项中的段长 C ,比较段长 C 和 偏移量 W 的关系,若 W 大,则越界
  5. 计算物理地址 = 基址(段表始址)+W

NOTE:我们可以看到第 4 步中,和分页存储的计算发生了变化,,在分段中我们进行了两次比较,而分页中只需要一次

2.4 段的共享与保护

  1. 可重入代码(纯代码):不能修改的代码(可以共享的是可重入代码)

3. 段页式管理方式

在这里插入图片描述

由上图可见,只有一个段表。而段表映射每一段都有一个页表。一个进程中段表只有一个,而页表可以有多个。

在这里插入图片描述

其地址转换方式如下:段表 --> 页表始址 --> 页号 --> 形成物理地址
由此可见一次访问实际需要三次访问内存

猜你喜欢

转载自blog.csdn.net/qq_34902437/article/details/98780388
今日推荐