8.存储模型2——虚拟存储技术

来源:互联网 发布:博优软件官网 编辑:程序博客网 时间:2024/06/06 07:00

8.1虚拟存储技术(virtual memory)

虚拟存储技术:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不在内存时,由操作系统自动完成将它们从磁盘调入内存的工作。

虚拟地址空间:分配给进程的虚拟内存。

虚拟地址:在虚拟内存中指令或数据的位置,该位置可以被访问,仿佛它是内存的一部分。

虚存:把内存磁盘有机地结合起来使用,从而得到一个容量很大的内存,即虚存。虚存是对内存的抽象,构建在存储体系之上,由操作系统协调各存储器的使用,虚存提供了一个比物理内存空间大得多的地址空间。虚存的大小受到计算机系统寻址机制和磁盘空间中可用空间两方面的限制。

存储地址保护的作用:

(1)确保每个进程有独立的地址空间

(2)确保进程访问合法地址范围

(3)确保进程的操作合法的。

虚拟页式(PAGING)——虚拟存储技术+页式存储管理方案——>虚拟页式存储管理系统,其基本思想是:

(1)进程开始运行之前,不是装入全部页面,而是装入一个零个页面;

(2)之后,根据进程运行的需要,动态装入其他页面;

(3)当内存空间已满,而有需要装入新的页面时,则根据某种算法置换内存中的某个页面,以便装入新的页面。具有有两种方式:a.请求调页(demand paging);b.预先调页(prepaging)。

虚拟页式存储管理系统是以CPU时间磁盘空间换取昂贵内存空间,这是操作系统中的资源转换技术。

8.2页表及页表项的设计

页表表项设计:页表由页表项组成。

页表项应该保存页框号(内存块号、物理页面号、页帧号)、有效位(驻留位,中断位,表示该页是在内存还是在磁盘)、访问位(引用位)、修改位(此页在内存中是否被 修改过)、保护位(读/可读写)。

通常,页表项是由硬件设计的。

如果页表页在内存中不连续存放,则需要引入页表页的地址索引表——>页目录(page directory)。

反转(倒排)页表:由于地址转换需要很大的空间:从虚拟地址空间出发:虚拟地址——>查页表——>得到页框号——>形成物理地址,每个进程一张页表,因此采取从物理地址空间出发,系统建立一张页表,其中页表项记录进程i 的某虚拟地址(虚页号)与页框号的映射关系。称为反转页表。

8.3地址转换过程及TLB引入

地址转换过程由内存管理单元MMU完成:将虚拟地址转换为物理地址

在地址转换过程中,至少有两次或两次以上的内存访问,CPU的指令处理速度与内存指令的访问速度差异大,CPU 的速度得不到充分利用。因此基于程序访问的局部性原理采用快表(TLB)加快地址映射速度,改善系统性能。

TLB(translation look-aside buffers)——一个缓冲区,可以放置一些内容的存储区域。其特点是:

(1)TLB为CPU中引入的高速缓存(cache),可以匹配CPU的处理速率和内存的访问速度

(2)TLB是一种随机存取性存储器,除连线寻址机制外,还有接线逻辑,能按特定的匹配标志在一个存储周期内对所有的字同时进行比较。

通常称快表为相联存储器(associate memory),按内容并行查找。快表由cache组成,因此成本较高,大小容量有限,,只能用一个比较小的存储空间做快表,保存正在运行进程的页表的子集(部分页表项)。

8.4页错误(页故障)page fault

页错误又称页面错误,页故障,页面失效,通常指地址转换过程硬件发生的异常,例如:(1)缺页异常,即所访问的虚拟页面没有调入物理内存(2)页面访问违反权限( 读/写、用户/内核)(3)错误的访问地址。

缺页异常处理:

(1)在地址映射过程中,硬件检查页表时发现所要访问的页面不在内存,则产生该异常——缺页异常。

(2)操作系统执行缺页异常处理程序:获得磁盘地址,启动磁盘,将该页调入内存:a.如果内存中有空闲页框,则分配一个页框,将新调入页装入,并修改页表中相应页表项 的有效位及相应的页框号;b.若内存中没有空闲页框,则要置换内存中某一页框;若该页框内容被修改过,则要将其写回磁盘。


8.5虚拟页式存储管理方案中的软件相关策略

驻留集:即操作系统给每个进程分配多少个页框(操作系统给进程分配的页框数)。分为:

(1)固定分配策略:进程创建时确定,可以根据进程类型(交互、批处理、应用类)或者基于程序员或系统管理员的需要来确定;

(2)可变分配策略:根据缺页率评估进程局部性表现。缺页率高——>增加页框数,缺页率低——>减少页框数。但这会带来新的开销。

置换问题:当一个内存已经用完没有空闲页框时,需要挑一个页框将其内容置换出去。

置换范围分为局部置换策略(仅在产生本次缺页的进程的驻留集中选择)和全局置换策略(将内存中所有未锁定的页框都作为置换的候选)。共分为固定分配局部置换、可变分配局部置换和可变分配全局置换三种。其中,可变分配局部置换具体如下:

(1)当一个新进程装入内存时,给它分配一定数目的页框,然后填满这些页框;

(2)当发生一次缺页异常时,从产生缺页异常进程的驻留集中选择一页框用于置换;

(3)不断重新评估进程的页框分配情况,增加或减少分配给它的页框,以提高整体性能。

置换策略:决定置换当前内存中的哪一个页框。所有置换策略的目标为置换最近最不可能访问的页。根据局部性原理,最近的访问历史和最近将要访问的模式间存在相关性,因此,大多数策略都基于过去的行为来预测将来的行为。其中置换策略设计的越精致、越复杂,实现的软硬件开销就越大。除此之外,存在一些约束,即被锁定的页框不能置换。

页框锁定:采用虚存技术,如果需访问的代码数据暂时不在内存,需要临时调入内存,则需要访问磁盘,修改内存的数据结构,以至于带来开销,使得进程运行时间不确定。为解决此问题,给每一个页框增加一个锁定位,通过设置相应的锁定位,不让操作系统将进程使用的页面换出内存,避免产生由交换过程带来的不确定的延迟。类似的需要锁定的情况有:操作系统核心代码、关键数据结构、I/O缓冲区,特别是正在I/O的内存页面。Windows当中提供virtuallock/virtualunlock执行锁定和解锁操作。


清除策略:即从进程的驻留集中收回页框。

虚拟页式系统工作的最佳状态:发生缺页异常时,系统中有大量的空闲页框。由此可知,在系统中保存一定数目的空闲页框供给比使用所有内存并在需要时搜索一个页框有更好的性能。因此大部分的操作系统都会:

(1)设计一个分页守护进程,多数时间都睡眠着,可定期唤醒以检查内存的状态;

(2)如果空闲页框过少,分页守护进程通过预定的页面置换算法选择页面换出内存;

(3)如果页面装入内存后被修改过,则将它们写回磁盘,分页守护进程可保证所有的空闲页框是“干净”的。

当进程需要使用一个已置换出的页框时,如果该页框还没有被新的内容覆盖,将它从空闲页框集合中移出即可恢复该页面,将这种技术称为页缓冲技术

(1)不丢弃置换出的页,将它们放入两个表之一:如果未被修改,则放到空闲页链表中,如果修改了,则放到修改页链表中

(2)被修改的页定期写回磁盘(不是一次只写一个,大大较少I/O操作的数量,从而减少了磁盘访问时间)

(3)被置换的页仍然保留在内存中,一旦进程又要访问该页,可以迅速将它加入该进程的驻留集合(代价很小)


8.6置换算法1

置换算法又称为页面淘汰(替换)算法,主要有:最佳算法——>先进先出——>第二次机会——>时钟算法——>最近未使用——>最近最少使用——>最不经常使用——>老化算法——>工作集——>工作集时钟。


最佳页面置换算法(OPT)——设计思想:置换以后不再需要的或最远的将来才会用到的页面。这种算法需要提前知道其页面走向序列,才能实现。因此此算法更大意义在于作为衡量其他算法的一种标准


先进先出算法(FIFO)——设计思想:选择在内存中驻留时间最长的页并置换它,即先进内存先出。可以通过页面链表法(记载所有链表,并置换链表首部的页面)实现。其缺点是容易置换出常用的一些页面,增加新的开销。采用FIFO算法会出现BELADY现象,即分配给进程的物理页面数增加时,缺页次数反而增加。


第二次机会算法(SCR)——设计思想:按照先进先出算法选择某一页面,检查其访问位R,如果为0,则置换该页;如果为1,则给第二次机会,并将访问位置0。其缺点是,摘链挂链都需要开销。


时钟算法(clock)——设计思想:把所有的页框组织成环形,通过移动指针来选择下一个要淘汰的页框。


最近未使用算法(NRU)——设计思想:选择在最近一段时间未使用过的一页并置换。根据设置页表表项的两位(访问位(R)和修改位(M))来决定置换哪个页面。如果硬件没有这些位,则可用软件模拟(做标记)。具体步骤:当启动一个进程时,R、M位置0,R被定期清零(复位),如果有修改,则M置1。发生缺页中断时,操作系统检查R,M:1.无访问,无修改;2.无访问,有修改;3.有访问,无修改;4.有访问,有修改。算法思想是随机从编号最小的非空类中选择一页置换。


最近最少使用算法(LRU)——设计思想:选择最后一次访问时间距离当前时间最长的一页并置换,即置换未使用时间最长的一页。其性能接近最佳页面置换算法,但在实现过程中,为给每一个页面、页框设置一个时间戳,记录其使用的时间,造成很大的开销。


最不经常使用算法(NFU)——设计思想:选择访问次数最少的页面置换。实现:给每一个页框一个软件计数器,初值为0,每次时钟中断时,计算器加R,发生缺页中断时,选择计数器值最小的一个页框置换。


老化算法(AGING)——设计思想:通过对NFU的改进,更进一步的模拟LRU。将计数器在加R前先右移一位,R位加到计数器的最左端。


8.7置换算法2——工作集算法

影响缺页次数的因素:(1)页面置换算法;(2)页面本身的大小;(3)程序的编制方法;(4)分配给进程的页框数量

形容缺页多而导致的系统性能越差的名词——颠簸(抖动):虚存中,页面在内存与磁盘之间频繁调度,使得调度页面所需的时间比进程实际运行的时间还多,这样导致系统效率急剧下降,这种现象成为颠簸或抖动。


页面尺寸问题:确定页面大小对于分页的硬件设计非常重要,而对于操作系统是个可选的参数。由以下几个因素确定页面尺寸:(1)内部碎片;(2)页表长度;(3)辅存的物理特性。


工作集(working set)模型——基本思想:根据程序的局部性原理,一般情况下,进程在一段时间内总是集中访问一些页面,这些页面成为活跃页面,如果分配给一个进程的物理页面数太少了,使该进程所需的页面不能全部装入内存则进程在运行过程中将频繁中断。如果能为进程提供与活跃页面数相等的物理页面数,则可减少缺页中断次数。

工作集:一个进程当前正在使用的页框集合。工作集需要随时调整。工作集的内容取决于:(1)访页序列特性;(2)时刻t;(3)工作集窗口长度。

工作集算法——基本思路:找出一个不在工作集中的页面并置换它。具体如下:

(1)每个页表项中有一个字段:记录该页面最后一次被访问的时间;

(2)设置一个时间值T;

(3)判断:根据一个页面的访问时间是否落在“当前时间-T”之前或之中决定其在工作集之外还是之内。

实现:扫描所有页表项,执行操作:

(1)如果一个页面的R位是1,则将该页面的最后一次访问时间设为当前时间,将R位清零

(2)如果一个页面的R位是0,则检查该页面的访问时间是否在“当前时间-T”之前

a.如果是,则该页面为被置换的页面;

b.如果不是,记录当前所有被扫描过页面的最后访问时间里面的最小值,扫描下一个页面并重复1、2.


8.7与存储管理相关的一些软件技术

内存映射文件——基本思想:进程通过一个系统调用将一个文件(或部分)映射到其虚拟地址空间的一部分,访问这个文件就像访问内存中的一个大数组,而不是对文件进行读写。

在多数实现中,在映射共享的页面时不会实际读入页面的内容,而是在访问页面时,页面不会被每次一页的读入,磁盘文件则被当做后备存储。

当进程退出或显示地解除文件映射时,所有被修改页面会写回文件



原创粉丝点击