操作系统——虚拟内存管理

传统存储管理方式

传统管理方式特征

传统存储管理方式具有一次性和驻留性的特点,一次性指的是作业必须一次性装入内存后才可以开始运行,驻留性指的是作业被装入内存后,就一直驻留在内存中,其任何一部分都不会被换出,直至作业运行结束

问题

程序通常具有异常错误条件的代码,而这些错误很少发生,所以这些代码几乎从不执行

数组、链表等所分配的内存量通常多于实际需要值

程序的某些选项和功能很少使用

当作业很大而不能全部被装入内存时,该作业无法运行

大量作业要求运行时,由于内存不足以容纳所有作业,只能使少数作业先运行,导致多道程序度下降

局部性原理

局部性原理从广义角度上讲属于高速缓存技术,而高速缓存技术依赖于局部性原理,局部性原理主要表现在时间局部性和空间局部性

时间局部性

程序中某条执行一旦执行,不久后可能再次执行,某数据一般被访问,不久后可能还会被访问,产生局部性的典型原因是程序中存在大量的循环

空间局部性

一旦程序访问了某个存储单元,不久后其附近的存储单元也将被访问,主要原因是指令通常是顺序存放和顺序执行的,数据也一般是以向量、数组、表等形式簇聚形式存储的。

虚拟内存技术

虚拟内存

虚拟内存技术允许执行进程不必完全处于内存中,虚拟内存将内存抽象成一个巨大的、统一的存储数组,实现了逻辑内存和物理内存的分离,让用户看到的比实际内存大得多的内存空间

优点

程序不再受物理可用量限制

可以同时运行更多的程序

加载或交换每个用户程序到内存所需的I/O会更少

特征

多次性

无需再作业运行时一次性全部转入内存,允许被分成多次调入内存运行

对换性

无需在作业运行时一直常驻内存,允许在作业的运行过程中,进行换入和换出

虚拟性

逻辑上扩充内存容量,使用户看到的内存容量远大于实际内存容量

虚拟内存技术实现

基础

虚拟内存技术的实现建立在离散分配的内存管理方式的基础上

方式

请求分页存储管理

请求分段存储管理

请求段页存储管理

硬件支持

一定容量的内外存

页表或段表机制,作为主要数据结构

中断机构,当用户程序要访问的部分尚未调入内存时,产生中断

地址变换机构,实现逻辑地址到物理地址的转换

请求调页

请求调页只要将当前需要的一部分页面装入内存,即可启动作业运行

页表机制

请求分页在一个作业运行之前不要求全部一次性调入内存,故在作业运行过程中,必然会出现要访问的页面不再主存中的情况,故除了页号和对应物理页号,还需在请求页表项中添加4个字段

状态位,用于指示该页是否已经调入内存,供出现访问时参考

访问字段,记录本页在一段时间内被访问的次数,供置换算法换出页面时参考

修改位,标识改页是否被修改过

外存地址,指向该页在外存的地址,通常是物理块号,供调入该页时参考

缺页中断机构

若进程所要访问的页面不再主存中,则会产生缺页中断,进行缺页处理。缺页中断作为中断同样要经历保护现场、分析中断原因、进入缺页中断处理程序、中断返回、恢复现场等步骤,但与一般中断不同的是,缺页中断在指令执行期间而非指令执行完后产生和处理中断信号,属于内部中断,一条指令在执行期间可能出现多次缺页中断

地址变换机构

进行地址变换时,先访问块表

若找到要访问的页的页表项,则修改页表项中的访问位,然后利用页表项中的物理块号和页内偏移地址形成物理地址

若未找到要访问的页的页表项,则到主存中查找页表,查看页表项中的状态位,若对应页面已经调入主存,则进行访问,否则产生缺页中断,进行缺页处理

页面置换算法

最佳置换算法

最佳置换算法

最佳(Optimal, OPT)置换算法选择的淘汰页面是以后永不使用的页面,或是在最长时间内不被访问的页面,以获得最低缺页率,置换最长时间不会使用的页面

特点

OPT算法通常可以用来评价其他算法

人们无法预知进程在内存下的若干页面中哪个是未来最长时间不再被访问的,因而该算法无法实现

在所有算法中具有最低的缺页率

先进先出页面置换算法

先进先出页面置换算法

先进先出(First In First Out,FIFO)页面置换算法,调出内存中驻留最久的页面,调入内存的页面根据先后次序链接成队列,设置一个指针总是指向最早的页面

特点

FIFIO页面置换算法不适应进程实际运行规律,最早的页面不一定最不经常被访问

可能产生Belady异常(Belady's anomaly),即分配的物理块数增大而页故障树不减反增的异常现象

最近最久未使用算法

最近最久未使用算法

最近最久未使用(Least Recently Used, LRU)算法,认为过去一段时间未访问过的页面,在最近将来可能也不会被访问,为每个页面设置一个访问字段记录页面自上次被访问以来所经历的时间,淘汰页面时选择先用页面中访问字段值最大的予以淘汰,也可以采用页码堆栈,每当页面被引用时,它就从堆栈终移除并放到顶部,最近使用的页面总是在顶部,最近最少使用的页面总是在底部

特点

需要寄存器和栈的硬件支持

堆栈类算法不可能出现Belady异常

很少有计算机系统能提供足够的硬件类支持真正的LRU页面置换算法

时钟置换算法

猜你喜欢

转载自www.cnblogs.com/iheidh/p/12954750.html