存储管理概述
覆盖与交换技术
覆盖技术
覆盖技术是单道系统中,解决大程序与小内存矛盾问题提出一种虚拟 存储技术
覆盖技术是指程序运行过程中,把同一存储区在不同时刻分配给 不同程序段或数据段,它是实现存储区共享的一种内存分配技术。
可相互覆盖的程序段叫覆盖段,可进行覆盖操作的内存区域叫做 覆盖区
谁覆盖谁是由程序员来决定的
覆盖技术要求操作员对作业有全面的了解,以便为系统提供一个清晰的覆盖结构
交换技术
交换技术是系统根据需要把内存中暂时不能运行的进程或 暂时不用的部分程序和数据移到外存,以便腾出足够的内存空间,把外存中已具备运行条件的进程或部分程序和数据换入,使其运行
交换是提高内存利用率的一种有效措施
交换功能是由操作系统负责!
对换空间管理
通常把外存分为文件区和对换区
系统对文件区一般采取离散分配方式,而对对换区分配连续的外存空间(提高进程的对换速度)
与内存动态分区分配方式中所用数据结构相似,对换区:常采用空闲分区表、空闲分区链
进程的换出与换入
进程的换进与换出属于进程的中级调度。
进程被换出是为了提高内存的利用率,换入之后要对换入的进程分配内存空间,并挂载到相应的队列中
覆盖技术主要发生在同一个进程中,将一个进程的程序进行覆盖操作 交换技术主要作用于进程之间 覆盖技术主要分布于早期的单道os中,交换技术主要用于多道环境
虚拟存储管理
程序局部性原理
现代操作系统仍然需要虚拟存储管理技术 来解决大程序和小内存的矛盾问题。对于此矛盾的解决仍然是从内存逻辑扩充的角度出发考虑
虚拟存储技术主要应用程序局部性原理只装入部分程序,其他的部分在需要时调入。程序局部性原理的应用提高了内存中多道程序的数量, 提高系统并发程度
程序局部性原理是指程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储 空间也局限于某个区域
时间局部性:刚执行的指令和数据不久将再次被执行
空间局部性:程序访问了某个存储单元,在不久之后,其附近的存 储单元也可能被访问
虚拟存储器
虚拟存储器中存储的进程执行时:只将其中一部分代码和数据先装入内存。进程执行过程中用到那些不在内存中的信息时,再把它们换 入内存
引入虚拟存储器后,用户可以使用的逻辑地址空间为内存和外存的容量之和,运行速度接近于内存(局部性原理),每位的成本接近于外存
定义:虚拟存储器是指具有请求调入功能和置换功能的、能从逻辑 上对内存加以扩充的一种存储器系统
虚拟存储器的基本思想是:
-
装入部分每个进程的页(段)。
-
程序在运行时,如果它所要访问的页(段)已调入内存,便可继续 执行下去;
-
但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段), 此时程序应利用操作系统提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。
-
如果此时内存已满,无法再装入新的页(段),则还须再利用页 (段)的置换功能,将内存中暂时不用的页(段)调至磁盘上,在腾出足够内存空间后,将要访问的页(段)调入内存,使程序继续执行
虚拟存储技术与交换技术区别:
-
交换技术以进程为基本单位进行交换
-
虚拟存储技术是以段/页为基本单位进行交换
-
虚拟存储技术是以离散式存储管理方式与交换技术结合的产物
虚拟存储技术分为三种形式:
-
请求分页存储管理
-
请求分段存储管理
-
请求段页式存储管理
请求分页存储管理方式
在基本的分页存储管理的基础上增加了 请求调页功能和页面置换功能
当进程需要访问的页面不在内存中时,会引发 缺页中断
请求分页中需要的支持
页表
页号 | 物理块号 | 状态位P | 访问字段A | 修改位M | 外存地址D |
---|---|---|---|---|---|
... | ... | ... | ... | ... | ... |
访问字段A:该页最近一段时间被访问的次数,或该页有多长时间没有被访问,供换出时参考。
修改位M:是否被写,供换出参考
外存地址D:供换入时使用
请求分页管理的地址变换
缺页中断机构
缺页中断与一般的中断不同,它不是在一条执行执行完成后产生,而是在指令执行期间产生。一条指令的执行可 能会发生多次缺页中断。
请求分页中的软件支持
软件支持主要体现在缺页中断的处理过程和为 了降低缺页率而采取的一系列措施。例如:页面分配方法、页面调入、调出策略等。
-
物理块分配算法
-
平均分配算法
-
按比例分配算法
-
考虑优先权的分配算法
-
-
最小物理块的确定
实践证明,进程占用的存储容量越小,缺页率就越大—局部性原理就不明显。
在为进程分配物理块时,首先应该考虑的问题是保证进程正常运行所需的最少物理块数(称为最小物理块数)。若系统为某进程所分配的物理块数少于此值时, 进程将无法运行
-
对换区管理
如果被淘汰的页面或段在执行期间没有被修改过,则不必回写外存,因为外存的可执行文件中存有它的磁盘正本;如果被淘汰页面已被修改过(脏),则将其回写到外存的对换区中,将来再写回磁盘的文件中。
页面置换算法
当进程产生缺页中断时,可能会发生将某个页换到交换区中。
所采用的算法称为页面置换算法。
制约设计页面置换算法的因素:分给每个进程的物理块的数量。置换需要启动磁盘IO,频繁置换将影响系统的性能。
几个衡量置换算法优劣的概念:
-
假定进程Pi共有m页,系统分配给她的物理块数为n, 这里m>n;
-
假定进程Pi在运行中在内存成功访问的的次数为S;
-
不成功访问的次数为F,即产生缺页中断的次数;
-
作业执行过程中总的访问次数为A
-
A=S+F
-
置换次数R=F-n
-
缺页率 f=F/A
-
命中率s = S/A
-
置换率r = R/A
影响缺页率f的因素有:
-
内存物理块数
-
页面大小
-
页面置换算法
-
程序特性
最佳置换算法(Optimal)
最佳置换算法是一种理想化的页面置换算法。
其所选择的被淘汰页面将是以后永不使用的,或是在将来很长时间内不再被访问的页面。
先进先出置换算法(FIFO)
这种算法的出发点是先装入内存者先被置换。
其总是先淘汰那些驻留在内存时间最长的页面。
该算法实现简单,可采用一个先进先出的队列实现,不需要额外硬件的支持
最近最久未使用(LRU)置换算法
根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用 “最近的过去”作为“最近的将来”的近似。
LRU置换算法是选择最近最久未使用的页面(最近一段时间内,最少被访问的页面)予以淘汰。
需要硬件的支持:1. 计时法 2. 移位寄存器 3. 堆栈法 4. 简单时间(Clock)置换算法
堆栈法
每当访问一页时就调整一次,使栈顶始终是最新被 访问页面的页号,栈底是最近最久未使用的页号。
当发生缺页中断时,总是淘汰栈底页号所对应的页 面。
改进型时钟(Clock)置换算法
其在选择页面换出时,既要是未使用过的页面(访问位用A表示),又要是未被修改过的页面(修改位用M表示)。
页面的调度性能
-
抖动
刚被淘汰的页面又马上被调回内存,调回内存不久后 又被淘汰出去,如此频繁进行,这种现象称为抖动 (或称颠簸)引起抖动的原因通常与分配给进程的物理块数太少以 及页面置换算法有关,例如FIFO置换算法。
-
驻留集
-
工作集
请求分段存储管理方式
为了让内存能够运行大型程序,系统将用户程序的所有段首先放在外存中,当用户程序被执行时,系统再逐步从外存中调所需段进入内存。
程序运行中需要调用某个段时,可通过缺段中断处理程序完成。
和请求分页相似,在请求分段中需要从硬件和软件两个方面支持多次调段的功能。
段表机制
段号 | 内存基址 | 段长 | 存取权限 | 存在位P | 外存始址D | 修改位M | 增补位C | 访问字段A |
---|---|---|---|---|---|---|---|---|
增补位C:本段在运行过程中是否做过动态增长。
由于被访问的段并非全在内存,在地址变换时, 若发现所访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。
缺段中断机构
负责在发生缺段中断时,从外存调入段
由于段不是定长的,可能需要通过紧凑来获得足够的内存空间。或者在决定淘汰时可能选择内存中几个段以形 成一个合适大小的空闲区
保护与共享
段在内存是一个副本,共多个进程使用,称为共享。段共享的一个好处是有效节省内存资源。 段共享允许用户可以使用不相同的段名来共享一个段。共享段如果不在内存,则由第一个调用它的进程把它调入内存。 对共享段的管理需要一个段共享计数器。
置换算法
请求段页式存储管理系统中的页面置换算法可采用请求分页存储管理系统中的页面置换算法