OPN
内存管理
3.1内存管理概述
内存管理的功能
- 内存的分配与回收
- 内存的保护与共享
- 实现地址转换
- 内存的扩充
地址转换(重定位)
静态重定位:作业装入内存时,由装入程序实现逻辑地址到物理地址的转换,地址转换在作业执行前一次完成。
动态重定位:CPU在访问程序和数据前才实现逻辑地址到物理地址的转换,将逻辑地址和定位寄存器中的值相加得到物理地址,在程序执行过程中动态进行。
二者对比:静态重定位实现简单、不需要硬件;但必须为程序分配连续空间、执行过程中不能移动;动态重定位更灵活,可以实现程序在内存中的移动,便于实现内存的动态扩充和共享,但需要硬件支持、管理复杂。
覆盖与交换
覆盖:按照程序自身的逻辑结构,让不同时运行的程序段共享同一块内存区域。
交换:将暂时不运行的进程或程序段从内存移到外存交换区,当内存空间富余时再进入内存。
对比:
- 覆盖对用户不透明,编程时需要划分模块间的覆盖关系,增加复杂度
- 从外存装入覆盖文件,是用时间换取空间
- 交换发生在进程或作业之间,覆盖发生在同一进程或作业内
- 覆盖只能覆盖与覆盖段无关的程序段
3.2分区内存管理
单一连续内存管理
简单地将内存划分为系统区和用户区,任何情况下内存中最多只有一道程序。
优点:简单、开销小;缺点:内存、CPU、外部设备利用率低,不能进行内存扩充。
固定分区内存管理
划分成大小固定的连续区域,每个分区只能装入一个作业;分区大小可相等可不等。
缺点:内存利用率不高、内部碎片严重,容纳程序的大小有限;
可变分区内存管理
分配算法
-
最先适应分配算法
每次都从最开始查找,将第一个满足长度要求的分配给作业使用;
-
循环首次适应分配算法
从上次为作业分区后的位置开始查找...
-
最优适应分配算法
将空闲分区由小到大排序,选择满足条件的最小的分区
-
最坏适应分配算法
反之
-
快速适应分配算法
空闲分区按长度归类,为每种长度设立单独的双向空闲分区链表;根据作业大小查找双向空闲分区链表,找到能容纳的最小分区链表的起始指针,从中选取第一个空闲分区。
算法 | 思想 | 优点 | 缺点 |
---|---|---|---|
最先 | 从头到尾找适合的分区 | 保留了高地址空闲分区,便于容纳大作业 | 每次都从头开始,时间长;低地址被划分为小碎片 |
循环首次 | 由首次适应演变而 来,每次从上次查找结束位置开始查找 | 使空闲分区分布更均匀、时间更短 | 小碎片问题 |
最优 | 优先使用更小的分 区,以保留更多大分区 | 大作业开心、内存利用率高 | 小碎片占据开始部分,查找开销大 |
最坏 | 优先使用更大的分区,以防止产生太小的不可用的碎片 | 效率高,利好中小作业 | 不利于大作业装入 |
快速 | 按长度归类,链表管理 | 查找空闲分区迅速、也能保留大空间 | 回收分区困难、算法复杂、系统开销大 |
紧凑技术
汇聚小内存的同时增加了系统开销,不是任何时候都能移动。
3.3页式存储管理
物理块的大小由计算机硬件系统决定,页的大小由物理块的大小决定
若每个页面大小为2^kB,则二进制表示的末尾的k位为页内偏移量,其余部分为页号;
页面大小与页内偏移量位数有关系;
页式地址转换:
其中②可能会被遗漏;
3.4段式存储管理
段表有段号、段长、段起始地址
作业表有作业名、段表始地址、段表长度
逻辑地址包括段号和段内偏移量,其中段号限制了最多的段数,段内偏移量决定段长
段式地址转换
其中④是特别的一步;
分段与分页的比较
-
段是信息的逻辑单位,由源程序的逻辑结构决定,用户可见;
-
段长可根据用户需要来规定;
-
段起始地址可以从任何地址开始;
-
在分段方式中,源程序(段号、段内偏移)经连接装配后仍保持二位结构;
-
页是信息的物理单位,与源程序的逻辑结构无关,用户不可见;
-
页长由系统决定;
-
页面只能以页大小的整数倍地址开始;
-
在分页方式中,源程序(页号、页内偏移)经连接装配后变成了一维结构;
段页式存储管理
逻辑结构为:段号-页号-页内位移
3.5虚拟存储技术
程序局部性原理
时间局部性:如果程序中的某一条指令被执行,在不久之后该指令可能被再次执行;数据访问;
空间局部性:一旦程序访问了某个存储单元,则不久之后在其附近存储单元也将被访问;
虚拟存储技术的思想
将外存作为内存的扩充,作业运行不需要将全部信息放入内存,将暂时不运行的作业信息放入外存,从逻辑上扩充内存;
3.6请求虚拟页式存储管理
基本原理
在页式存储管理的基础上增加了请求调页和页面置换功能;
- 物理内存被划分为等长的物理块,并对块编号;用户程序也进行分页;
- 程序被调度运行时,先将少数页装入内存,随着程序运行,若所访问的页在内存中,其管理情况与分页存储管理相同;
- 若所访问数据不在内存,会产生缺页中断,到外存寻找相应的页并装入内存空闲块中;
- 装页发现无空闲块,则需要通过页面置换功能从内存的页中挑选一个替换出去;
页面置换算法
下面4种都是基于固定分配,局部置换策略的
课后习题
1.内存管理的基本功能是什么?
答案:操作系统的内存管理主要包括以下功能:
-
内存的分配和回收:操作系统根据用户程序的请求,在内存中按照一定算法把找到 一块空闲,将其分配给申请者;并负责把释放的内存空间收回,使之变为空闲区。
-
提高内存的利用率:通过多道程序共享内存,提高内存资源的利用率。
-
通过虚拟存储技术“扩充”内存容量:使用户程序在比实际内存容量大的情况下, 也能在内存中运行。
-
内存信息保护:保证各个用户程序或进程在各自规定的存储区域内操作,不破坏操 作系统区的信息,并且互不干扰。
-
什么是逻辑地址,什么是物理地址,为什么要实现地址转换?
答案:用户的源程序通常用高级语言编写,源程序通过编译或汇编后得到目标程序。 目标程序使用的地址称为逻辑地址,也叫相对地址;程序在物理内存中的实际存储单元称 为物理地址,也叫绝对地址。只有把程序和数据的逻辑地址转换为物理地址,程序才能正 确运行,该过程称为地址转换或地址重定位。
-
可变分区存储管理中有哪些内存分配方法?比较它们的优缺点。
答案:有最先适应分配算法,循环首次适应分配算法,最优适应分配算法,最坏适应 分配算法,快速适应算法。 从搜索空闲区速度及内存利用率来看,最先适应分配算法、循环首次适应分配算法和最 优适应算法比最坏适应算法性能好。如果空闲区按从小到大排列,则最先适应分配算法等于 最优适应分配算法。反之,如果空闲区按从大到小排列,则最先适用分配算法等于最坏适应 分配算法。空闲区按从小到大排列时,最先适应分配算法能尽可能使用低地址区,从而,在 高地址空间有较多较大的空闲区来容纳大的作业。下次适应分配算法会使存储器空间得到均 衡使用。最优适应分配算法的内存利用率最好,因为,它把刚好或最接近申请要求的空闲区 分给作业;但是它可能会导致空闲区分割下来的部分很小。在处理某种作业序列时,最坏适 应分配算法可能性能最佳,因为,它选择最大空闲区,使得分配后剩余下来的空闲区不会太 小,仍能用于再分配。由于最先适应算法简单、快速,在实际的操作系统中用得较多;其次 是最优适应算法和下次适应算法。
-
什么是紧凑技术,什么情况下采用?
答案:紧凑技术就是把内存中的作业改变存放区域,使分散的空闲区能够汇聚成一个 大的空闲区,从而有利于大作业的装入。 当系统运行一段时间后,内存被多次分配和回收,会产生许多不连续的空闲空间。有可 能出现这样的现象:内存中每一块空闲空间都不能满足某一作业的内存请求,而所有空闲空 间的总和却能满足该作业,这时可采用紧凑技术。
-
什么是交换技术?什么情况下采用? (将“移动”更正为“交换”)
答案:为了释放部分内存空间,由操作系统根据需要,将某些暂时不运行的进程或程 序段从内存移到外存的交换区中;当内存空间富余时再给被移出的进程或程序段重新分配内 存,让其进入内存,这就是交换技术,又称为“对换”或“滚进/滚出(roll-in/roll-out)。 当剩余内存不足,而又有新的进程要进入内存时,可应用交换技术。
-
叙述页式存储管理系统中的地址转换过程。
答案:当处理器给出某个需要访问的逻辑地址时,地址转换机构自动地从逻辑地址 的低地址部分得到页内偏移,从高地址部分得到页号。将页号与页表寄存器中的页表长度 进行比较,如果页号大于或等于页表长度,表示该页在页表中没有相应项,本次所访问的 地址已经超越进程的地址空间,会产生地址越界中断;否则,从页表寄存器得到页表在内 存中的起始地址。将页号和页表项长度的乘积再加上页表的起始地址,得到该页的页表项 在页表中的位置,从而可以查到该页在内存中的物理块号。最后,将页内偏移装入物理地 址寄存器的低位字段中,将物理块号装入物理地址寄存器的高位字段中,此时物理地址寄 存器中的内容就是地址转换机构给出的物理地址。
-
比较分页与分段存储管理的差异。
答案:段是信息的逻辑单位,由源程序的逻辑结构所决定,用户可见,段长可根据用 户需要来规定,段起始地址可以从任何地址开始。在分段方式中,源程序(段号,段内偏移) 经连结装配后仍保持二维结构。 页是信息的物理单位,与源程序的逻辑结构无关,用户不可见,页长由系统确定,页面 只能以页大小的整倍数地址开始。在分页方式中,源程序(页号,页内偏移)经连结装配后变 成了一维结构。
-
页式存储管理中,试分析大页面与小页面各自的优缺点。
答案:如果页面较小,页数就要增加,页表也随之扩大,为了控制页表所占的内存空 间,应选择较大的页面尺寸。 内存以块为单位,一般情况下进程的最后一个页面总是装不满一个物理块,会产生内部 碎片,为了减少内部碎片,应选择小的页面尺寸。 作业存放在辅助存储器上,从磁盘读入一个页面的时间包括等待时间(移臂时间+旋转 时间)和传输时间,通常等待时间远大于传输时间。显然,加大页面的尺寸,有利于提高 I/O 的效率。 综合考虑以上几点,现代操作系统中,页面大小大多选择在 512 B 到 4KB 之间。
-
段页式存储管理中怎样划分逻辑地址空间?
答案:段页式存储管理的基本原理。 1.程序根据自身的逻辑结构划分成若干段,这是段页式存储管理的段式特征。 2.内存的物理地址空间划分成大小相等的物理块,这是段页式存储管理的页式特征。 3.将每一段的线性地址空间划分成与物理块大小相等的页面,于是形成了段页式存储 管理。 4.逻辑地址分 3 个部分:段号、段内页号和页内位移,其形式为:
-
如果一个分页系统能够向用户提供的逻辑地址最大为 16 页,页面大小为 2K,内存总共有 8 个存储块。请问逻辑地址应该为多少位?内存空间为多 大?
答案:因为逻辑地址最大页数量 为 16=24 ,所以逻辑地址中,表示页号需 要用 4 位; 又因为页面大小为 2K=211,表示业内地址需要用 11 位,所以整个逻辑地址 应该为 4+11=15(位) 因为页面大小为 2K,所以内存块大小也是 2K,又因为共有 8 个物理内存块, 所以总共内存空间为 8*2K =16K。
-
什么是虚拟存储技术?叙述实现虚拟存储管理的基本思想。
答案:将作业不执行的部分暂时存放在外存,待到进程需要时,再将其从外存调入内 存。将外存作为内存的补充,从逻辑上扩充内存,这就是虚拟存储技术。 虚拟存储技术的思想:将外存作为内存的扩充,作业运行不需要将作业的全部信息放入 内存,将暂时将不运行的作业信息放在外存,通过内存与外存之间的对换,使系统逐步将作 业信息放入内存,最终达到能够运行整个作业,从逻辑上扩充内存的目的。
-
请求页式虚拟存储管理中的页面置换算法有哪几种?各有何特点?
答案:先进先出(FIFO)页面置换算法:先进先出页面置换算法开销低、容易编程实 现,适合于线性顺序特性好的程序。但是该算法没有考虑到页面的访问频率,很可能刚被换 出的页面马上又要被访问,使得缺页率偏高。 最佳(OPT)页面置换算法:最佳页面置换算法具有最低的缺页率。最佳页面置换算法 只是一种理想化的页面调度算法,很难实现。但是,该算法可以作为评判其它的置换算法的 准则 最近最久未使用(LRU)页面置换算法:LRU 算法能够合理地预测程序运行状态,具有 很好的置换性能,被公认为是一种性能好且可以实现的页面置换算法,但是 LRU 算法在实现 起来比较复杂。 时钟(clock)置换算法:兼顾了效率与公平,是一种性能较好的算法。
-
请指出缺页中断和一般中断的区别。
答案:1)CPU 检测中断的时间不同。对一般的中断信号,CPU 是在一条指令执行完 后检测其是否存在,检测时间以一个指令周期为间隔。而对缺页中断信号,CPU 在一条指 令执行期间,只要有中断信息就可检测,不需要等待一个指令周期。因此,CPU 检测缺页 中断更及时。 2)CPU 可以多次处理。如果在一个指令周期中多次检测到缺页中断,CPU 都会及时处理。