例图:
解决:LRU算法
FIFO、LRU、Clock三者比较?FIFO、LRU都有先进先出思想,但LRU对于访问算作一次新的进入,有局部性思想。
FIFO、LRU相比,LRU性能虽好,但开销较大;而FIFO有Belady现象
LRU、Clock很相似,但Clock加入访问位模拟LRU的访问顺序,而不用动态维护顺序链表,开销更小,但性能较LRU略有不足
局部页面置换算法的问题:对应用分配了固定的物理页帧,一定程度上限制了系统灵活性,比如同时运行多个程序,但高峰期正好交错开。所以可以根据应用运行的不同阶段,调整分配的物理页帧,最大化利用系统资源。
4.5.8 工作集和常驻集工作集:一个进程p当前执行时刻t前,在之前的定长的页面访问工作集窗口△阶段,使用的逻辑页面集合,用二元函数 W(t, △) 表示;随时刻t变化,集合也在变化。 | W(t, △) |表示集合大小,即页面数目。(一段时间内访问的页面集合)
常驻集:一个进程p在当前时刻t实际驻留在内存中(物理页面)的页面集合。(某时刻访问的页面集合)
常驻集 <= 工作集。
缺页率:“缺页次数” / “内存访问次数”,影响因素:
页面置换算法
分配的物理页帧数(常驻集大小)
页面本身大小
编写的程序(是否符合局部性)
4.5.9 工作集页面置换算法基本思路:类似LRU最久未用被淘汰,但不同的是触发事件不同,当时刻改变时(而非缺页时)就会清理物理页面,准备物理页帧。
例图:
基本思路:在工作集页面置换算法基础上,动态改变时刻窗口(△)大小,即常驻集大小。当缺页率上升时,提高常驻集大小,反之减少。(淘汰的触发时间是缺页时,一次可能淘汰多个页面)
评价:性能好,开销大。
例图:
什么是抖动?
当分配的常驻集小于工作集,使进程产生很多缺页中断,频繁进行换进换出,从而使运行速度变慢的现象叫做抖动问题。
产生原因?
随着驻留内存中应用的增加,分配给每个应用的物理页帧(常驻集)持续减少,缺页率随之提高。所以OS要选择运行适当的进程数量,及每个进程所需页帧数,使并发水平和缺页率达到一定平衡。
一个具有一定独立功能的程序在一个数据集合上的一次动态执行。(将程序加载到内存并运行的过程)
5.1.2 进程的组成程序代码
程序处理的数据
运行指令的计数器
一组通用的寄存器中保存的当前值,堆、栈、、、
一组系统资源(打开的文件,连接的服务)
5.1.3 程序和进程的关系程序是产生进程的基础。(程序是永久的,是类模板;进程是临时的,是实例)
进程是程序运行的体现。(程序是静态的、进程是动态的)
每次运行相同程序会产生不同的进程。(进程号,输入数据,启动时间)
程序的一次运行可能产生多个进程。(相互依赖和调用)
graph LR A>程序] -.-> B[食谱] C>CPU] -.-> D[厨师] E>数据] -.-> F[原料] G>进程] -.-> H[制作蛋糕] B ==> D F ==> D D ==> H 5.1.4 进程的特点动态性:动态创建,终止进程
并发:看上去多个进程同时执行
并行:真的在同时执行
独立性:非共享情况下,不同进程工作不互相影响(页表的功劳)
制约性:多个进程同时访问共享数据或同步是相互制约
5.1.5 进程控制结构 进程控制块