内存页面置换算法
一丶
1.部分概念
内存抖动:每次页面置换都要耗费很多时间(置换算法调用选择被置换的页面->脏页判定,写会被置换的页面->io中断,写入内存,磁盘寻道,读写速度相比cpu速度,其效率极低),
多次频繁的页面置换,会使等待时间增长,CPU使用率降低,且多次读写,占用总线,也不利于其他程序运行,缓解内存抖动方式为:
1.更快的读写硬盘 2.更大的内存 3,快速而有效的页面置换算法 4.高内聚的代码段编写方式
2..内存固定划分方式
1)动态大小分配:程序要多少,就分配多少,分配策略为
1.1)最先适应算法(First-fit):以空闲块先后位置作为空闲链表位置,每次请求则从头判定是否有容纳的空闲块,有则分配,无则拒绝,容易产生碎片(前端)
1.2)最佳适应算法(Best-Fitrst):空闲链表以大小排列,小在前,大在后,请求依次判定,有则分配,无则拒绝,能留更多的大块,当碎片则越来越碎(碎片重定位简单)
1.3)循环适应算法(Next-fit):最先适应算法变种,空闲链多设立俩个当前指针p1,p2,p1循环移动判定,循环查找直至空链则重指链头,p1==p2时返回查找失败
1.4)最坏适应算法(wrost-fit):最佳适应算法类似,逻辑相似,分配相反,优先切割大块,使得大应用较难分配,且每次分配后剩余大小的重新定位耗费较多时间定位
2)动态分配------段分配:以程序数据段为逻辑分配单位,动态请求内存大小,其逻辑依据为程序段的高内聚,程序段间低耦合原则,调用的数据一般都在同一程序段,以此减少页面置换次数,
其必须要有段号(段表内匹配),段内地址(数据定位),因此其为二维地址
3)段页式分配----逻辑分段,段内分页,以段为请求单位,页为实际分配单位,解决动态大小分配时碎片过多问题
4)固定大小页面划分(常设为4k),避免页面间的碎片产生,但无法避免页面内碎片产生,因此页面大小设置非常重要,过小则文件节点过多,大文件需要多个索引,数量过多,重定位次数多(IO中段相对多),
过大则小文件分配时,页内碎片较大
页面置换算法
4.1)先进先出(FIFO)--实现简单(依据请求时间构造队列先后出队),性能差,页面多还可能性能更差
4.2)最佳置换算法(OPT)---一种理想中的算法,无法实现,其选择被替换页面为当前内存页面(可置换页面,以置换策略而定,全局置换,局部置换,动态局部置换等)中,选择最晚使用到的页面,作为其他算法的参考
4.3)最近最久未使用算法(LRU)--采用队列实现,动态管理队列,每次调用内存中的页面,则抽出置于队列末尾,每次替换则直接让可替换的页面出队,实践效果最佳
4.4)最少使用置换算法(LFU)---内存中每个页面内增加计数字,每次调用,计数加一,淘汰则遍历选择最小数值页面淘汰,效果可以,但要注意数值溢出边界
5)重定位策略:动态重定位中,每次访问,一则判定其是否在内存,二则判定其是否越界(段号越界,页号越界,段内或页内地址越界,越界则拒绝),然后在决定是否置换
6)置换细节:除置换算法外,要注意被置换页面的写会,若为脏页,则置换时应该先写回虚拟内存或者硬盘中,再进行替换,防止数据丢失、