第四章 存储器管理
概述
存储管理的功能
- 主存储空间的分配和去配
- 地址转换和存储保护
- 主存储空间的共享
- 主存储空间的扩充
4.1 存储管理的概念
一、存储器
-
寄存器
-
快速缓存
-
主存(内存)
- 系统区(存放OS程序和数据)
- 用户区(存放用户程序、数据)
-
辅存(外存)
二、常用的基本概念
-
1、物理地址和逻辑地址
-
物理地址(绝对地址)
- 内存单元地址,主存中一系列存储物理单元
- 物理地址空间、绝对地址空间、内存空间
-
逻辑地址(相对地址)
- 程序用来访问信息所用的一系列的地址单元, 虚地址
- 逻辑地址的集合称为逻辑地址空间,也叫作虚空间
-
作业运行时按相应的物理地址访问,需要进程相对地址到物理地址的转换
-
-
2、重定位
-
将虚地址映射为内存地址,这种操作称为地址重定向
-
静态重定位
- 在程序运行之前由装入程序完成的重定位过程
-
动态重定位
- 在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址
-
-
3、内存扩充技术
- 同一主存区可以被不同的程序段重复使用
-
4、交换技术
-
系统根据需要把主存中暂时不运行的某个作业部分或全部移到外存,而把外存中的某个作业移到相应的主存区,并使其投入运行
-
交换时机
- 作业的进程用完时间片或等待输入输出
- 作业要求扩充存贮而得不到满足时
-
主要特点
- 打破了一个程序一旦进入主存便一直运行到结束的限制
-
-
5、单用户连续存储管理
- 栅栏寄存器、重定位和存储保护
4.2 分区存储管理
分区存储管理是把主存储器中的用户区作为一个连续区分成若干个连续区进行管理,每个连续可装入一个作业
固定分区存储管理
-
一旦划分好分区之后,主存中分区的个数就固定了,且每个分区的大小也固定不变
-
每个分区用来装入一个作业,主存有多个分区,同时在每个分区中装入一个作业,这种存储管理方式适用于多道程序系统
-
- 主存空间的分配与释放
-
主存分配表
-
各分区起始地址
-
分区长度
-
标志位
- 0—表示分区空闲
- 1—表示分区被占用
-
-
顺序分配算法进行主存的分配
- 找到一个标志位为0,且大于该作业长度的分区
- 把此分区分配给该作业,相应表目的标志位改为作业名的标识
- 找不到这样的空闲分区,则作业暂时不能装入主存
-
释放
- 作业执行完成后归还所占分区,将主存分配表中对应表目的标志位置0
-
- 地址转换和存储保护
- 界限寄存器对
-
- 固定分区的优缺点
- 碎片大,存在小作业占用大分区的情况。
- 不利于提高资源利用率
- 可调入的作业大小受分区大小严格限制
- 分区数目在系统初起时确定,限制了多道程序的运行数目
- 适合于程序大小和出现频率已知的情形,实现简单
可变分区存储管理
-
按作业的实际大小来划分分区,且分区个数也是随机的,实现多个作业内存的共享,进一步提高内存资源利用率
- 和固定分区的区别为动态划分分区
- 克服固定分区管理的“内碎片”问题
-
1、分配算法
- 最先适应分配算法
- 最佳适应分配算法
- 最坏适应分配算法
- 去分配算法
-
2、内存扩充
- 移动紧缩技术
4.3 分页式存储管理
解决存储零头的一种方法
基本思想
-
将整个系统的内存空间划分成一系列大小相等的块,每一块为一个物理块、物理页、或者实页,简称块
- 将酒店大楼的所有客房设计为标准的双人间
-
每个作业的地址空间页划分成一系列与内存块一样大小的块,每一块称为一个逻辑页,也叫页面,简称页
- 将旅游团的成员分成夫妇两人一组
-
一个作业只要总页数不大于内存中的总块数,系统就可以对他实施分配。系统装入作业时,以页为单位分配内存,一页分配一个块,作业所有的也所占的块可以是不连续的,系统同时为这个作业建立一个快号与页号的对照表,简称页表
-
每个块的大小是固定的,一般为1KB~2KB之间
基本原理
- 系统自动将作业的地址空间分页,将系统的主存分块,页块等大小,在作业运行时,一次性将作业的全部页面装入内存,各个页面所占的内存块可以不连续
- 这个实际就是将作业从地址空间映射到存储空间的过程
地址转换
-
页的逻辑地址
- 页号
- 页内地址
-
绝对地址
- 块号
- 块内地址
- 块与页等大小
-
页表
- 实现从进程的逻辑地址变换为内存物理地址
-
地址变换机构
- 无须进行页内地址到块内地址的转换
- 关键实现页号到块号的转变
-
绝对地址计算公式
- 绝对地址=块号*块长+页内地址
存贮器和快表
-
CPU访问一个数据要访问主存两次
- 访问页表
- 正真访问该物理地址
-
提高存取速度,在地址变换机构中增设一组寄存器,存放访问的那些页表,把存放在告诉缓冲寄存拿起中的页表叫做块表,这个块表又叫做相联存贮器
-
硬件地址转换机构在进行地址变换时,同时开始两个变换
4.4 分段式存储管理
分段式存储管理引入原因
- 用户程序是分段的
模块化程序设计的分段结构
分段存储管理的基本原理
-
二维逻辑地址
- 段号
- 段内地址
-
作业表
- 作业名
- 段表开始地址
- 表段长度
-
段表
- 段号
- 起始地址
- 段长
短时存储管理的地址转换和存储保护
-
段控制寄存器
- 进行越界判断
-
物理地址计算
- 物理地址=段首地址+作业位数(表段长度)
- 表段长度不应大于段长
- 位移超出段长会发生越界访问,系统给出错误信息,并使访问终止而退出系统
段的共享
- 通过不同作业段表中的项指向同一个段基址来实现的
- 几道作业共享的例行程序就可放在一个段中,只要让各道作业的共享部分有相同的基址
分段与分页的比较
1、分段是信息的逻辑单位,由源程序的逻辑结构决定,用户可见;分页是信息的物理单位,与源程序的逻辑结构无关,用户不可见
2、段长可根据用户需要来规定,段的起始地址可从任何主存地址开始;页长由系统确定,页面只能以页大小的整数倍地址开始
3、分段式中,源程序(段号、段内位移)经连接装配后地址仍保持二维结构;分页方式中,源程序(页号,页内位移)经连接装配后地址变成了一维结构
4.5 段页式存储管理
划分原理
- 先将用户程序分成若干个段,再将每个段分成若干个页,并为每一个段赋予一个段名
地址结构
- 段号
- 段内页号
- 页内地址
寻址过程
- 由段表 --> 页表 --> 主存
段页式系统的地址变换
-
首先利用段号S,(需要先判断一下是否越界)找到该段在段表中的位置,从段表中获得页表的始址,页表的长度,然后通过页号,从页表中获得对应页表项的信息,从中读出该也所在物理块号,再利用块号和页内地址构成物理地址
-
在这个过程中经过了三次内存访问
- 访问段表
- 访问页表
- 访问物理地址
-
快表机制,在地址变换机构增设一个高速缓冲寄存器器
- 每次访问都需同时利用段号和页号去检索高速缓存,若找到匹配的表项,边可从中得到相应也的物理块号,用来与页内地址一起形成物理地址,若未找到匹配表项,则仍然需要三次访问内存
XMind - Trial Version