操作系统复习:存储管理(二)
7 虚拟存储技术
在交换技术的基础上,在同一个进程内以页/段等单位来交换程序。这样,在运行程序时只需要从主存中装载一部分内容到内存,运行中再用需要的程序置换原来的内容,达到扩容效果。
虚拟存储技术的应用前提,是程序的局部性原理。
虚拟存储技术的设计需要考虑以下问题:
调入策略(时机,位置)
调入的内容放在哪个空闲块;进一步引申到工作集;每个进程提供多大的内存空间
调出策略(置换谁)
8 虚拟页式存储技术
8.1 页表
虚拟技术下,页表项中的内容不一定装载在了内存中,所以页表项需要扩充内容以便将页面的置换操作的结果及时反馈给进程。新的页表项的构成为:【页号|驻留位|内存块号|外存地址|访问位R|修改位M】
看到这里我明白了,页表中本身也是放了页号的,页号需要占一定的存储位;只是说之前页式存储里面做页表大小计算的时候,为了方便就忽略了页号本身占据的长度。
8.2 缺页中断
-
装载页表,进程被调度为运行态
-
进程启动下一条指令,取出页号
-
检查页号对应页表项的驻留位
- 完成地址映射,访问内存---->执行指令---->END
-
保留进程现场(缺页中断)
-
检查是否有空闲页面
-
按照置换算法选择调出页面
-
检查该页面是否被修改过
- 把页面写回外存
-
-
调入所需页面
-
调整页表和内存分配表
-
恢复被中断进程现场
8.3 页面置换算法
- OPT
- FIFO
- LRU
- Second Chance
- 时钟
- NRU
- 用aging模拟LRU:每次将R值从左边放入aging的二进制位(活力值),最近访问的活力值高,很久没访问的就会很低;最近访问相同的,由次近访问决定谁的活力值稍大,以此类推。
Belady异常:物理页面越多,程序的缺页次数不一定越少(抖动)
8.4 影响缺页次数的因素
- 分配给程序的物理页面数
- 页面大小
- 程序对局部性的利用程度
- 页面置换算法
8.5 性能评估
-
抖动/颠簸:调度过于频繁,往往存在同一程序被反复换入换出
- 原因:置换算法不合理+物理页面数太少
-
工作集模型
工作集:活跃页面数
存取时间T= 访存时间r + 工作集s上的缺页概率p(s) * 置换页面时间t
字母r和页表的R值一样,对应的表示访问的单词可能是reference注意到前后两项在指令流水线意义下可以同时进行,也就是访内和访外同时进行,那么在r和t固定的情况下,缺页率p(s) =r/t使得进程工作效率最高。
p(s)较大意味着抖动,反过来说,解决抖动的方式就是压低p(s)。而减小p(s)则从s工作集大小和置换策略a->b上做优化。
UNIX SYSTEM V中,就采用占据暂时没在运行态的进程的工作集的方式,来扩大当前运行进程的工作集大小。
9 虚拟段式存储技术
9.1 段表
段表项 = 【段号|物理基址|段长|特征位|存取权限位|修改标志位|扩充位】
9.2 缺段中断
9.3 置换策略
首次适配/最好适配/最坏适配 + 紧缩技术(合并外碎片)
9.4 段的动态链接
9.4.1 动态链接
动态链接是一个编译上的概念,可运行的目标程序往往由多个程序段组成,静态链接要求链接好了再一起装入内存,这对内存管理来说没有什么挑战;但是静态链接开销大,而且不适应现实需求。动态链接,即程序运行开始时只装载主程序进入内存,运行中再装载需要的程序,是更被需要的。而缺失了提前链接这一工作的页式管理,就可能带来混乱:比如页式管理难以注意到”新装载的程序中出现了与原有程序中相同的局部变量名”这样的事情(总不能把新装载的每个变量都拿去和整个工作集判重吧),这会导致访问该变量时出现混乱。
然而,此时段式管理就能发挥它将用户地址空间构造成二维空间的优势,通过段名+地址的访问模式,局部变量重名而导致访问混乱的问题自然就不存在了,因此段式管理可以采用动态链接的方式来装载程序。
9.4.2 链接间接字和链接中断
首先需要指出,“字”的概念,其实就是32位长的一个存储位。不要因为是汉字的字而产生一些奇怪的联想……
引入间接寻址,来扩大寻址空间。间接寻址用间接地址访存,找到链接间接字,间接字中存放了直接地址和附加的状态位。状态位L=1时表示这个链接是无效的,对应着需要的代码段并没有被放入内存,进而进入缺段异常的处理。最后回到链接间接字时,再修改标志位,写入正确的直接地址。
说链接无效,其实指直接地址不在当前已装载到内存中的程序段中,所以这个链接间接字也不知道要指到哪里去。链接间接字的存在意义就是在遇到一个异常寻址时,给系统留下一个缓冲的机会,让系统“思考”一下,这是一个动态链接中的缺段异常、还是真的程序写错了。
9.4.3 纯段和杂段
杂段:即连接段,是可再入(可修改)的。
10 Linux内存管理
11 Windows Server 2003 内存管理
就 一手QAQ萌混过关吧(也许是之后再补)
本文深入探讨了虚拟存储技术,包括其基于局部性原理的扩容效果,以及虚拟页式和段式存储的管理机制。重点讨论了页表的扩展、缺页中断处理、页面置换算法(如OPT、FIFO、LRU等)及其影响因素。还介绍了动态链接在段式管理中的优势,以及解决抖动和优化工作集的方法。同时,提到了Linux和Windows Server 2003的内存管理策略。
610

被折叠的 条评论
为什么被折叠?



