操作系统概念(高等教育出版社,第七版)复习——第九章:虚拟内存
2017-06-20 19:09
267 查看
第九章 虚拟内存
如果程序的某条指令一旦执行,则不久后该指令可能再次执行(e.g. 循环结构)。
如果某个数据结构被访问,则不久以后该数据结构可能再次被访问;(e.g. 数组+循环结构)。
空间局部性:
一旦程序访问了某个存储单元,不久之后,其附近的存储单元也被访问(顺序性)(数组、循环)。
基于局部性原理,一个作业在运行之前,没有必要全部装入主存,而仅将那些当前要运行的那部分页面或段,先装入内存几个启动运行,其余部分暂时留在磁盘上。
可使一个大的用户程序在较小的内存空间中运行;可使内存中同时装入更多的进程并发执行;用户在一个虚拟地址空间中编程,无需担心物理内存大小。
从用户的角度看,该系统所具有的内存容量,将比实际内存容量大得多——即虚拟存储器
虚拟内存也允许文件和内存通过共享页面为两个或多个进程所共享,这带来了以下优点:
系统库可为多个进程所共享;
虚拟内存允许进程共享内存;
虚拟内存可允许在用系统调用fork()创建进程期间共享页,从而加快进程创建。
交换程序对整个进程进行操作,调页程序只对进程的单个页进行操作。
无效:页为无效(也就是不在进程的逻辑地址空间内)或者有效但在磁盘上。
处理方法:
1.操作系统查看内部页表(通常与PCB一起保存)决定:
若为无效的引用,中止。
若为有效但是未调入页面:调入。
2.找到一个空闲帧。
3.调度一个磁盘操作,把所需页调入刚分配的帧。
4.复位表。
5.设置有效-无效位为有效。
6.重新启动导致页错误的指令。
在指令执行期间产生和处理中断信号;一般情况下,CPU在执行完一条指令之后检查和处理中断,而缺页中断却是在指令执行期间,发现要访问的指令或数据不在内存时产生和处理的;
一条指令执行期间,可能产生多次缺页中断。
处理页错误中断、读入页、重新启动进程。
Belady异常:也错误率可能会随着所分配的帧数的增加而增加。(123412512345)
缺点:难以实现。
附加引用位算法、二次机会算法、增强型二次机会算法
最常使用页置换算法:具有最小次数的页可能刚刚调进来,且未被使用。
(⊙o⊙)…写完才发现,这两种都不常用。
增加CPU使用率和降低系统颠簸,必须降低多道程序设计的程度。
如果所有进程需要的页框数之和 > 可用的页框数,则可能抖动/颠簸,需挂起部分进程,释放内存,分配给相应的进程。
页表:通过有效-无效位或保护位的特定值,将条目设置为无效。
次级存储器:用来保存不在内存中的页,通常为快速磁盘。通常称为交换设备,用于交换的这部分磁盘称为交换空间。
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.
减少与页表相关的内存开销。
考虑到不同的内存大小,虚拟内存系统就必须保持多个不同大小的空闲页链表,为了地址翻译也需要有复杂的代码。
虚拟存储器指的是仅把作业的一部分装入内存便可运行作业,具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。
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设备映射到内存中
局部性原理
时间局部性:如果程序的某条指令一旦执行,则不久后该指令可能再次执行(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设备映射到内存中
相关文章推荐
- 操作系统概念(高等教育出版社,第七版)复习——第一章:导论
- 操作系统概念(高等教育出版社,第七版)复习——第十二章:大容量存储器的结构
- 操作系统概念(高等教育出版社,第七版)复习——第二章:操作系统结构
- 操作系统概念(高等教育出版社,第七版)复习——第十一章:文件系统实现
- 操作系统概念(高等教育出版社,第七版)复习——第五章:CPU调度
- 操作系统概念(高等教育出版社,第七版)复习——第十三章:I/O输入系统
- 操作系统概念(高等教育出版社,第七版)复习——第八章:内存管理
- 操作系统概念(高等教育出版社,第七版)复习——第六章:进程同步
- 操作系统概念(高等教育出版社,第七版)复习——第十章:文件系统接口
- 操作系统概念(高等教育出版社,第七版)复习——第三章:进程
- 操作系统概念(高等教育出版社,第七版)复习——第四章:线程
- 《操作系统概念-第七版》概念复习笔记第3章
- MFC复习和学习 第九章 MFC序列化 MFC反序列化 MFC对话框
- 《操作系统概念-第七版》概念复习笔记第4章
- CSS3秘笈复习:第九章&第十章
- 2014年软考程序员-常考知识点复习笔记【第九章】
- 《操作系统概念-第七版》概念复习笔记第5章
- 操作系统概念(第九章) 虚拟内存
- C++PRIMER第一轮复习第九章 顺序容器
- C++ Primer复习和学习笔记 第九章 顺序容器