本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第四章 存储器管理
存储器的层次结构
程序的装入和链接
如何从源程序变为在内存中可执行的程序
- 编译
- 链接
- 装入
程序的装入方式
- 绝对装入方式
- 可重定位1装入方式
- 动态运行时装入方式
程序的链接方式
- 静态链接
- 装入时动态链接
- 运行时动态链接
存储管理技术-分区(连续)
固定分区
- 定义 系统初始启动时将内存划分为数目固定、尺寸固定的多个分区。这些分区的尺寸可以相等也可以不等。
- 条件 系统需建立一张分区说明表或使用表,以记录分区号、分区大小、分区的起始地址及状态(已分配或未分配)。
- 流程 当某个用户程序要装入内存时,通常将分区按大小进行排队,由内存分配程序检索分区说明表,从表中找出一个满足要求的尚未分配的分区分配该程序,同时修改说明表中相应分区的状态;若找不到大小足够的分区,则拒绝为该程序分配内存。程序执行完毕,释放占用的分区,管理程序修改说明表中相应分区的状态为未分配,实现内存资源的回收。
- 缺点 作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费,产生内零头2,所以主存的利用率不高。分区尺寸固定,系统无法运行大程序;分区数目固定,使活动进程的数目受限。
动态分区
- 定义 动态分区分配是一种动态划分存储器的分区方法。内存不是预先划分好的,作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配。
- 条件 系统需要建立空闲分区表(和空闲分区链),用来登记系统中的空闲分区(分区号、分区起始地址、分区大小及状态)。以及需要特定的分区分配算法;
- 流程
- 缺点 容易产生外零头3,需要较好的匹配算法支持。
- 分配算法 a.基于顺序搜索的动态分区分配算法
- 首次适应算法
- 循环首次适应算法
- 最佳适应算法
- 最坏适应算法 b.基于索引搜索的动态分区分配算法
- 快速适应算法
- 伙伴系统
- 哈希算法
- 涉及到的寄存器(存储保护)
- 基址寄存器
- 界限寄存器
- 覆盖与对换 覆盖可减少一个进程运行所需的空间。对换可让整个进程暂存于外存中,让出内存空间。 覆盖是由程序员实现的,操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。对换技术不要求程序员给出程序段之间的覆盖结构。 覆盖技术主要在同一个作业或进程中进行。对换主要在作业或进程之间进行。
存储管理技术-分页(离散)
简单分页
- 定义 将一个用户进程的地址空间(逻辑空间)划分成若干个大小相等的区域,称为页或页面,各页从 0 开始编号。内存空间也分成若干个与页大小相等的区域,称为块(物理块)或页框(frame),同样从 0 开始编号。在为进程分配内存时以块为单位,将进程中若干页装入到多个不相邻的块中,最后一页常装不满一块而出现页内碎片。在分页存储管理方式中,如果不具备页面对换功能,不支持虚拟存储器功能,这种存储管理方式称为纯分页或基本分页存储管理方式。
- 条件 需要建立页表、以及需要寄存器的配合(硬件地址转换)。 逻辑地址:页号+页内偏移 物理地址:块号+块内偏移
- 页表 a.为了便于在内存找到进程的每个页面所对应块,分页系统中为每个进程配置一张页表,进程逻辑地址空间中的每一页,在页表中都对应一个页表项。页表项的长度一般是由操作系统决定的。(具体页表项中都包含什么不再讨论) c.页表存放在内存中,属于进程的现场信息。用途:①记录进程的内存分配情况 ②实现进程运行时的动态重定位。 d.访问一个数据需访问内存 2 次 (页表一次,内存一次)。页表的基址及长度由页表寄存器给出。
- 页面的大小
- 多级页表
为了解决大页表问题。
- 反置页表 是为每一个物理块设置一个页表项并按物理块号排序,其中的内容是页号 P 及隶属进程标志符 pid。
地址变换机构
作用:将用户地址空间中的逻辑地址变换为内存空间中的物理地址。实现逻辑地址向物理地址的转换(页号 ⇒ 块号)。地址变换借助页表来完成。
- 基本地址变换机构
- 具有快表的地址变换机构
基本地址变换存在的问题:地址变换速度低(两次访问内存)
目的:为提高地址变换速度。
定义:又称为联想寄存器、联想存储器 (Associative Memory) 、IBM-TLB(Translation Lookaside Buffer)。快表是一种特殊的高速缓冲存储器(Cache),内容是页表中的一部分或全部内容。
流程:CPU 产生逻辑地址的页号,首先在快表中寻找,若命中就找出其对应的物理块;若未命中,再到页表中找其对应的物理块,并将之复制到快表。若快表中内容满,则按某种算法淘汰某些页。
访问内存的有效时间
虚拟存储分页
存储管理技术-分段(离散)
引入的必要性:方便编程、信息共享、信息保护、动态增长、动态链接
简单分段
- 定义 将用户作业的逻辑地址空间划分成若干个大小不等的段(由用户根据逻辑信息的相对完整来划分)。各段有段名(常用段号代替),首地址为 0。
- 条件 需要段表(内存中)。
- 维度 整个作业的地址空间由于是分成多个段,,因而是二维的,逻辑地址由段号和段内地址所组成。
段页式
- 引入:
分页活动源于系统管理物理内存的需要,在系统内部进行,由系统实施,用户看不见。
分段活动源于用户进行模块化程序设计的需要,在系统外部进行,由用户实施,用户是知道的。
- 地址结构
- 段表和页表 系统中设段表和页表,均存放于内存中。读一字节的指令或数据须访问内存三次。为提高执行速度可增设高速缓冲寄存器。 每个进程一张段表,每个段一张页表。 段表含段号、页表始址和页表长度。页表含页号和块号。
- 流程