操作系统
——第四章 存储管理
参考书:操作系统教程 (第五版)
文章目录
前言
提示:这里大概就是学习信息安全的课程内容了,部分图片来源于老师上课的课件。
提示:以下是本篇文章正文内容,下面案例可供参考
一、存储器工作原理
1.1存储器层次
- 计算机系统的存储器层次结构自上而下依次分为:寄存器、缓存、内存、磁盘、磁带5层
1.2地址转换与存储保护
- 程序编译:源程序经过编译程序或汇编程序的处理生成目标模块(也叫目标代码)
- 程序连接的三种方式:静态链接、动态链接、运行时链接
- 程序装载的三种方式:绝对装入方式、可重定位装载(装入时)、动态运行时装载(运行时)
- 可执行程序逻辑地址转换(绑定)为物理地址的过程成为地址重定位、地址映射和地址转换,基于上述程序装入方式,可区分为三种地址重定位:
-静态地址重定位:在程序装入内存过程中将要访问的逻辑地址转换成物理地址。
-动态地址重定位: 在程序运行过程中要访问数据时再进行地址变换。由地址变换机构进行的地址变换,硬件上需要重定位寄存器的支持。
-运行时链接地址重定位 - 逻辑地址(虚地址/相对地址):用户编程所用的地址CPU所生成的地址(目标程序)
- 物理地址(内存地址/实地址/绝对地址):内存的每个存储单元都有一个编号,这种编号称为内存地址内存单元所看到的地址
- 逻辑地址空间:由程序所生成的所有逻辑地址的集合
- 物理地址空间:由逻辑地址所对应的所有物理地址的集合
- 地址转换或重定位:把逻辑地址转换为物理地址
二、连续存储管理
2.1固定分区存储管理
- 又称静态分区模式
- 基本思想:内存空间被划分成数目固定不变的分区,各分区大小不等,每个分区只装入一个作业,若多个分区中都装有作业,则它们可以并发执行。
- 优点:
(1)能够解决单道程序运行在并发环境下不能与CPU速度匹配的问题(从单道–>多道)
(2)解决了单道程序运行时主存空间利用率低的问题
(3)实现简单–>最简单的可以运行多道程序的存储管理方式 - 缺点:
(1)大作业可能无法装入
(2)主存空间利用率不高,会出现内碎片
(3)扩充困难
(4)限制多道运行程序的个数
(5)难以实现程序或者数据的共享
2.2可变分区存储管理
- 又称动态分区模式
- 基本思想:按作业大小来划分分区,但划分的时间、大小、位置都是动态的
- 可变分区分配算法:
(1)最先适应分配算法 :空闲区通常按地址从小到大排列,分配第一个满足长度要求的空闲区;
优点:分配从低地址开始,使高地址部分比较少用,以保持一个大空闲区,有利于大作业的装入;
缺点:分区利用不均衡,回收分区比较麻烦。
(2)邻近适应分配算法:最先适应分配算法的变种,每次分配时从未分配区的上次扫描结束处顺序查找。
可以解决最先适应分配算法的缺点
(3)最优适应分配算法 :分配能满足要求的最小区。可以将空闲区按照大小从小到大排列,查找第一个满足要求的。
优点:主存利用率好。
缺点:分割剩下的空闲区比较小,难以利用;查找时间比较长。
(4)最坏适应分配算法:分配能满足要求的最大区;可以将空闲区按照大小从大到小排列,查找第一个满足要求的。
效率大致等同于最先适应法。
(5)快速适应分配算法:为经常用到的长度的空闲区设置单独的链表。
优点:查找快速;
缺点:归还时与相邻空闲区的合并即复杂又费时。
这里我们最常考察的是最先适应分配算法、最有适应分配算法和最坏适应分配算法
2.3内存不足的存储管理技术
-
移动技术(程序浮动技术):移动分区以解决内存外零头;需要动态重定位支撑
-
对换技术
-
覆盖技术:在任何时候只在内存中保留CPU当前所需的指令和数据,就能维系计算机系统运行。
由用户实现,让不会同时调用的子模块共同使用同一内存区
三、分页存储管理
3.1分页存储管理基本原理
- 页面:进程逻辑地址空间分成大小相等的区,每个区称为页面或页,页号从0开始依次编号
- 页框:又称页帧,把内存物理地址空间分为大小相等的区,其大小与页面大小相等,每个区是一个页框(物理块),块号从0开始依次编号
- 逻辑地址:分页存储器的逻辑地址由页号和内存位移两部分组成。
- 内存页框表:该表长度取决于内存划分的物理块数,编号与物理块号一直。
- 页表:系统为每个进程建立一张页表,(程序装入时)记录了相应页在内存中对应的物理块号,实现从页号到物理块号的地址映射。
3.3分页存储空间分配和去配
- 位示图法
每位与一帧相对应,用0/1表示对应块为空闲/已占用,用另一专门字记录当前空闲块数。 - 链表方法
每个表项包含:
(1)进程占用区(P)还是空闲区(H)
(2)起始地址
(3)长度
(4)指向下一表项的指针
3.4多级页表
- 概念:
(1) 将页表等分为 0#,1#, ……, N# 页
(2)将各个页面离散地存放在不同的物理块中
(3) 为离散分配的页表再建立一张页表,称为外层页表 或页目录表–>实质:页表的页表
3.5反置页表
- IPT是为内存中的所有物理块建立一个页表并按照块号排序
- 该表每个表项包含正在访问该页框的进程标识、页号及特征位,用来完成主存页框到访问进程的页号、即物理地址到逻辑地址的转换。
四、分段存储管理
4.1程序分段结构
- 促使存储管理方式从固定分区到动态分区,从分区方式向分页方式发展的主要原因是要提高内存空间利用率
- 虽然可以把程序划分成页面,但页面与源程序并不存在逻辑关系
- 段之间的地址不一定连续,而段内地址是连续的
4.2分段存储管理基本原理
- (1)作业地址空间划分成若干段,每段定义了一组逻辑信息。
(2)每个段都有名字。为实现简单,常用段号代替段名(段号从0开始);
(3)每个段内都从0开始编址,并采用一段连续的地址空间。由于分多个段,所以地址是二维的,亦即逻辑地址由段号S和段内地址W组成。
4.3分段存储管理共享和保护
- 段式管理的存储保护
第一级保护:控制寄存器的段表长度>逻辑地址中的段号。
第二级保护:段表中的段长>逻辑地址中的段内位移。否则产生段内位移越界中断。
对操作方式的保护:在段表中增加相应的操作方式字段,对相应的段规定读、写、执行是否许可的操作权限。 - 段的共享
易实现信息的共享。可通过使各进程的段表项指向共享段的段基址来实现。
五、虚拟存储管理器
5.1虚拟存储器概念
- 基本原理:
(1)部分装入:应用程序在运行前,没有必要全部装入(局部性原理),仅将那些当前要运行的页面或段先装入内存便可以运行,其余部分暂留在磁盘上。
(2)请求页面:程序在运行时,如果所要访问的页(段)已调入内存,便可继续执行下去;否则,应利用OS所提供的请求调页(段)功能,将它们调入内存,以便继续运行。
(3)页面置换:如果此时内存已满,则需利用页(段)置换功能,将内存中暂不用的页(段)调到磁盘上在将访问的页(段)调入内存,使程序继续运行下去。
5.2请求分页虚拟存储管理
- 页面装入主存,有两种策略:
(1)请页式调度:仅调入所需页面–频繁启动磁盘
(2)预调式调度:使用前预先调入若干页 --准确? - 何时把一个修改过的页面写回辅存储器,有两种策略:
(1)请页式清除:仅当一页被选中进行替换且被修改过,才写回磁盘。
(2)预清除:成批进行,所有 被更改过的页面,在需要替换前把它们都写回磁盘。 - 系统为进程分配主存,需考虑因素:
①分给进程的空间越小,同一时间处于主存的进程就越多,至少有一个进程处于就绪态的可能性就越大
②如果进程只有小部分在主存里,即使局部性很好,缺页中断率还会相当大
③因程序的局部性原理,分给进程的主存超过一定限度后,再增加主存空间,不会明显降低进程的缺页中断率。 - 页面分配策略:固定分配、可变分配
- 页面替换策略:局部替换、全局替换
(1)局部页面替换算法:页面替换算法的作用范围局限于本进程。
(2)全局页面替换算法:页面替换算法的作用范围是整个系统,它可以在运行进程间动态地分配页框。
固定分配和局部替换策略配合使用
可变分配和全局替换策略配合使用
可变分配和局部替换配合使用
- 缺页中断
假定作业p共计n页,系统分配给它的主存块只有m块(1≤m≤n)。如果作业p在运行中成功的访问次数为S, 不成功的访问次数为F,则总的访问次数A为:
A = S + F
又定义:
f = F / A
称f为缺页中断率。
全局页面替换策略:所有驻留页面都可以作为置换对象,而不管页面所属进程。
(1) 最佳算法(OPT, optimal)
- 调入一页而必须淘汰一个旧页时,所淘汰的页应该是以后不再访问的页或距现在最长时间后再访问的页。
- OPT算法(Optimal),可用来作为衡量各种具体算法的标准。
(2) 先进先出算法(FIFO, First In First Out)
- 基于程序总是按线性顺序来访问物理空间这一假设。
- 算法总是淘汰最先调入主存的那一页,或者说在主存中驻留时间最长的那一页(常驻的除外)。
(3) 最近最久未使用算法(LRU, Least Recently Used)
(4) 第二次机会页面替换算法(SCR,Second Chance Replacement)
- 算法含义:最先进入主存的页面,如果最近还在被使用的话,仍然有机会作为像一个“新”调入页面一样留在主存中。
(5) 时钟算法(Clock)
- 把”引用位”和”修改位”结合起来使用,共组合成四种情况:
(1)最近没有被引用,没有被修改(r=0,m=0)
(2)最近被引用,没有被修改(r=1,m=0)
(3)最近没有被引用,但被修改(r=0,m=1)
(4)最近被引用过,也被修改过(r=1,m=1) - 步1:选择最佳淘汰页面,从指针当前位置开始,扫描循环队列。扫描过程中不改变”引用位”,把迂到的第一个r=0,m=0的页面作为淘汰页面。
- 步2:如果步1失败,再次从原位置开始,查找r=0且m=1的页面,把把迂到的第一个这样的页面作为淘汰页面,而在扫描过程中把指针所扫过的页面的”引用位”r置0。
- 步3:如果步2失败,指针再次回到了起始位置,由于此时所有页面的”引用位”r均己为0,再转向步1操作,必要时再做步2操作,这次一定可以挑出一个可淘汰的页面。
(6) 最不常用算法(LFU, Least Frequently Used)
(7) 页面缓冲算法(page buffering)
常考察的是FOFI、OPT、LUR、Clock
总结
以上大概就是本章我觉得重要的知识点了,还有一些重要的就是考试要考到的计算题了,在上面这些内容当中我觉得最难的就是Clock算法了,现在还有一些迷迷糊糊的,不知道大家是不是和我一样的。。。