內存頁面置換算法


一丶

  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)置換細節:除置換算法外,要注意被置換頁面的寫會,若為臟頁,則置換時應該先寫回虛擬內存或者硬盤中,再進行替換,防止數據丟失、


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM