内存页面置换算法

一丶

  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)置换细节:除置换算法外,要注意被置换页面的写会,若为脏页,则置换时应该先写回虚拟内存或者硬盘中,再进行替换,防止数据丢失、

猜你喜欢

转载自www.cnblogs.com/jing19960917/p/10727241.html