操作系统概念(高等教育出版社,第七版)复习——第九章:虚拟内存

来源:互联网 发布:拉勾网简历被转发 知乎 编辑:程序博客网 时间:2024/06/07 15:16

第九章 虚拟内存

局部性原理

时间局部性:

如果程序的某条指令一旦执行,则不久后该指令可能再次执行(e.g. 循环结构)。

如果某个数据结构被访问,则不久以后该数据结构可能再次被访问;(e.g. 数组+循环结构)。

空间局部性:

一旦程序访问了某个存储单元,不久之后,其附近的存储单元也被访问(顺序性)(数组、循环)。

虚拟存储器

虚拟存储器指的是仅把作业的一部分装入内存便可运行作业,具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

基于局部性原理,一个作业在运行之前,没有必要全部装入主存,而仅将那些当前要运行的那部分页面或段,先装入内存几个启动运行,其余部分暂时留在磁盘上。

可使一个大的用户程序在较小的内存空间中运行;可使内存中同时装入更多的进程并发执行;用户在一个虚拟地址空间中编程,无需担心物理内存大小。

从用户的角度看,该系统所具有的内存容量,将比实际内存容量大得多——即虚拟存储器

虚拟内存也允许文件和内存通过共享页面为两个或多个进程所共享,这带来了以下优点

系统库可为多个进程所共享;

虚拟内存允许进程共享内存;

虚拟内存可允许在用系统调用fork()创建进程期间共享页,从而加快进程创建。

按需调页

懒惰交换:只有在需要页时才将它调入内存。

交换程序对整个进程进行操作,调页程序只对进程的单个页进行操作。

有效无效位

有效:既合法也在内存中。

无效:页为无效(也就是不在进程的逻辑地址空间内)或者有效但在磁盘上。

页错误陷阱(Windows系统称为“页面错误”)page-fault trap

操作系统未能将所需的页调入内存。

处理方法:

1.操作系统查看内部页表(通常与PCB一起保存)决定:

若为无效的引用,中止。

若为有效但是未调入页面:调入。

2.找到一个空闲帧。

3.调度一个磁盘操作,把所需页调入刚分配的帧。

4.复位表。

5.设置有效-无效位为有效。

6.重新启动导致页错误的指令。

缺页中断

缺页中断与一般的中断相比,有明显的不同:

在指令执行期间产生和处理中断信号;一般情况下,CPU在执行完一条指令之后检查和处理中断,而缺页中断却是在指令执行期间,发现要访问的指令或数据不在内存时产生和处理的;

一条指令执行期间,可能产生多次缺页中断。

按需调页性能

三个主要的页错误处理时间:

处理页错误中断、读入页、重新启动进程。

写时复制

父子进程开始时共享同一页面,这些页面标记为写时复制页面,如果任何一个进程要对它进行写操作,那么就创建一个共享页面的副本。

页面置换

基本页置换、FIFO页置换、最优置换、LRU页置换、近似LRU页置换、基于计数的页置换

FIFO页置换

先进先出

Belady异常:也错误率可能会随着所分配的帧数的增加而增加。(123412512345)

最优置换

最优页置换算法:选择要淘汰的页面时,尽最大可能往后看,淘汰将来最长时间未被使用的页面。

缺点:难以实现。

LRU页置换

最近最少使用算法:使用离过去最近作为不远将来的近似。置换页面时淘汰最长时间没有被使用的页面。

近似LRU页置换

页表内每一项都关联一个引用位,每当引用一个页时,相应页表的引用位就会被页面置位。

附加引用位算法、二次机会算法、增强型二次机会算法

基于计数的页置换

最不经常使用页置换算法:置换计数最小的页。

最常使用页置换算法:具有最小次数的页可能刚刚调进来,且未被使用。

(⊙o⊙)…写完才发现,这两种都不常用。

帧分配

系统颠簸(thrashing)考概念哦

高分页活动,一个过程频繁置换页,换页比执行进程花更多的时间。

增加CPU使用率和降低系统颠簸,必须降低多道程序设计的程度。

工作集合模型

在一个时间段对每个进程访问的页面进行采样,作为对进程一个局部的近似,即利用现在的情况预测将来的行为,进而得出该时间段内每个进程运行所需要的页框数,将该页面数作为每个进程内存需求的下限;

如果所有进程需要的页框数之和 > 可用的页框数,则可能抖动/颠簸,需挂起部分进程,释放内存,分配给相应的进程。

页错误频率(PFF)策略

为所期望的页错误率设置上限和下限,如果实际页错误率超过上限,那么为进程分配更多帧,低于下限则从进程中移走帧。因此可以直接测量和控制页错误率以防止颠簸。

预调页

同时将所需要的所有页一起调入到内存中。

课后作业

2.

页表:通过有效-无效位或保护位的特定值,将条目设置为无效。

次级存储器:用来保存不在内存中的页,通常为快速磁盘。通常称为交换设备,用于交换的这部分磁盘称为交换空间。

 

3.

写时复制定义:允许父进程与子进程开始时共享同一页面。这些页面标记为写时复制页,即如果任何一个进程需要对页进行写操作,那么就创建一个共享页的副本。

何时有效:当两个进程正在访问同一套程序值(例如,代码段的二进制代码)在写保护的方式下,映射相应的页面到虚拟地址空间,当写操作进行时,必须允许两个程序分别进行不同的拷贝而不干扰对方。

硬件要求:在每次内存访问时,需要检查该页表是否是写保护。如果确实是写保护,陷阱会出现,操作系统可以解决这个问题。

 

9.

a. 在这种情况下,使用LRU算法将空闲帧中的一个页面被替换到磁盘上,为驻留页面创建一个空间,再将其转移到空闲帧里,更新页表和帧表,重启用户进程。

b. 引进一套驻留页面,并将页面搬进空闲帧。

c. LRU

d. FIFO

 

10.

DEFG

 

11.

出现以下页错误:访问指令的页错误,访问包含一个指向目标内存位置指针的内存位置的页错误,访问目标内存位置的页错误。第三页置换包含指令的页,操作系统将产生三个页错误。如果需要再次取出指令,重复被陷指令,那么,页错误将无限期地继续下去。如果指令在寄存器中缓存,那么将能在第三页错误后完全执行。

 

12.

好处:算法简单,只需要一位为1或0来标识上一次检测是否被引用。

坏处:只能使用很短的时间帧来决定是否置换一页,从而忽略了局部性。例如,一个页可能是一个进程工作集合的一部分,但因为自上次检查后未被引用而被置换。(即不是所有工作集合中的页可以在检查之间被引用)。

 

13.

a. 1.0 2.新的一页与帧关联  3.不再需要与此帧关联的页的时候  4.找到带有最小计数器值的帧。使用FIFO解除其关系。

b. 14次

c. 11次

 

14.

0.5ms

 

15.

颠簸的原因:分配的页数少于进程所需的最小页数时发生颠簸,并迫使它不断地页错误。

系统怎样检测颠簸:该系统可通过对比多道程序的程度来估计CPU利用率的程度,以此来检测颠簸。

系统怎样消除颠簸:降低多道程序的程度。

 

17.

当设置Δ为一个较小的值,那么有可能低估一个进程的驻留页集合,允许安排一个进程,即使其所需的所有页未驻留。这可能导致大量的页错误。当设置Δ为较大的值,那么将高估一个进程的驻留集合,这可能阻止许多进程被安排,尽管他们需要的页驻留。然而,一旦一个进程被安排,高估驻留集合后就不可能产生页错误。

 

20.

减少与页表相关的内存开销。

考虑到不同的内存大小,虚拟内存系统就必须保持多个不同大小的空闲页链表,为了地址翻译也需要有复杂的代码。

思考题

1、Concept ofVirtual memory

虚拟存储器指的是仅把作业的一部分装入内存便可运行作业,具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。

 

2、Local Principle(时间、空间)

时间局部性

l  如果程序的某条指令一旦执行,则不久后该指令可能再次执行(e.g. 循环结构)

l  如果某个数据结构被访问,则不久以后该数据结构可能再次被访问;(e.g. 数组+循环结构)

空间局部性

l  一旦程序访问了某个存储单元,不久之后,其附近的存储单元也被访问(顺序性)(数组、循环)

 

3、DemandPaging(Principle, page fault)

请求页式是带有交换的分页系统,只有需要时才将页放入内存

懒惰交换

调页程序

有效-无效位(valid-invalidbit)

页错误陷阱(page-fault trap)

①检查进程的内部页表(通常与PCB一起保存),以确定该引用是合法还是非法的地址访问

②如果引用非法,那么终止进程。如果引用有效但是尚未调入页面,那么现在应该调入。

③找到一个空闲帧(例如,从空闲帧链表中选取一个)。

④调度一个磁盘操作,以便将所需要的页调入刚分配的帧。

⑤当磁盘读操作完成后,修改进程的内部表和页表,以表示该页已在内存中。

⑥重新开始因陷阱而中断的指令。进程现在能访问所需的页,就好像它似乎总在内存中。

 

4、Page replacement

页面置换

①查找所需页在磁盘上的位置。

②查找一个空闲帧:

a.如果有空闲帧,那么就使用它。

b.如果没有空闲帧,那么就使用页置换算法以选择一个“牺牲”帧,

c.将“牺牲”帧的内容写到磁盘上,改变页表和帧表。

③将所需页读入(新)空闲帧,改变页表和帧表。

④重启用户进程

 

置换算法

①FIFO,队首页被置换,调入页加到队列尾部

②最优置换,置换最长时间不会使用的页

③LRU页置换(最近最少使用算法least-recently-used),置换最长时间没有使用的页,用最近的过去预测最近的将来

④近似LRU算法

a.附加引用位

b.二次机会

c.增强型二次机会

d.最不经常使用页置换算法LFU

e.最常使用页置换算法MFU

 

5、Thrashing(what,how(prevention, solution))

抖动:频繁的页面置换现象,一个进程忙着换进换出页,调页时间多于程序运行时间。如果一个程序没有足够的帧,那么它很快会出现页面故障,它必须替换一些页面,而这些页面可能立即再次使用,所以它们必须立即回来。

抖动的原因:如果进程没有足够的帧,则页面故障率非常高,这导致CPU利用率低,而操作系统认为需要提高多道程序度,将其他进程添加到系统中,导致更低的CPU利用率,形成恶性循环。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

预防抖动:局部替换算法,将抖动控制在一个进程内,不会影响其他进程,但无法根本解决问题

解决方法:

①工作集合模型

△工作集合窗口working-set model

WS工作集合working set

WSS工作集中所含页数size of working set

用过去预测未来

 

 

 

 

 

 

 

②页错误频率

如果实际页错误率超过上限,那么为进程分配更多的帧;如果实际页错误率低于下限,那么可从该进程中移走帧。

如果页错误增加且没有可用帧,那么必须选择一个进程暂停,接着可将释放的帧分配给那些具有高页错误率的进程。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6、Copy-on-Write(COW)

允许父子进程共享页,只有被修改了的页面才进行复制

 

7、Memory-MappedFiles

将磁盘块映射到内存中的页(减少磁盘访问次数)

 

8、Memory-Mapped I/O

将I/O设备映射到内存中

阅读全文
0 0