1. 程式人生 > 其它 >作業系統考研複試複習-3

作業系統考研複試複習-3

第三部分:記憶體管理

1,為什麼要進行記憶體管理?
因為現代計算機的程式是併發執行的,記憶體中存在許多程序,記憶體管理就是對記憶體中資源進行管理。
2,記憶體管理要做那些工作?
(1)記憶體空間的分配與回收
(2)地址轉換
(3)記憶體空間的擴充
(4)各個程序儲存空間的保護
3,記憶體空間如何分配和回收?
    1,程式從外存到記憶體的過程?
    編譯:將程式碼編譯為目標模組
    連結:形成完整的裝入模組的邏輯地址
    分為三種方式:(1)靜態連結(2)裝入時動態連結(3)執行時動態連結
    裝入:在裝入時會發生從邏輯地址到實體地址的轉換
    分為三種方式:
        (1)絕對裝入:在連結時就生成實體地址(適合單道處理機)


        (2)可重定位裝入【又稱靜態重定位】:在裝入時形成實體地址(多道批處理)
        (3)動態執行時裝入:在執行時形成實體地址(現代作業系統)適合執行時程式位置可能會發生的OS,需要重定位暫存器的支援。
    2,如何決定佔用哪一塊的記憶體?
    記憶體空間的管理:
    (1)連續分配:
        單一連續分配:單道OS,將記憶體分為系統區和使用者區
        固定分割槽分配:【為了支援多道程式】分為分割槽大小相等和分割槽大小不等兩種
        利用分割槽表說明分割槽
        動態分割槽分配:【為了提高併發性,提高記憶體空間的利用率】
        問題:如何記錄?如何分配?如何回收?

        (1)記錄:用空閒分割槽表或空閒分割槽鏈
        (2)分配:動態分割槽分配演算法:首次適應,最佳適應,最壞適應,臨近適應演算法
    (2)非連續分配:
            邏輯地址結構決定了虛擬記憶體定址空間大小
            PCB存放記憶體中的系統區中。
        1,頁式儲存管理(產生內部碎片):
        (1)通過頁表來實現地址變換(邏輯地址到實體地址),頁表相當於一張索引表。
        過程:邏輯地址由邏輯頁號和頁內偏移組成,先用頁號檢索頁表得到相應的物理塊號,物理塊號與頁內地址拼接形成實體地址,訪問記憶體。
        檢索的過程:首先檢查邏輯地址的頁號是否大於頁表的長度,如果大於則產生越界中斷,反之,則用頁號×頁表項的長度+頁表起始地址(頁表暫存器中記錄)

        頁式儲存管理地址空間是一維的。
        (2)加入快表之後的地址變換:
        將頁號與頁表長度進行越界判斷之後就根據頁號查詢快表(TLB),未命中,再查慢表(記憶體中的頁表):快表需要儲存頁號,並且快表為相聯儲存器(按內容定址)
        2,段式儲存管理(產生外部碎片):
        段式儲存空間管理有利於共享和資訊的保護、程式的編譯和動態增長,並且符合人類的程式設計思維。
        通過段表來實現地址變換,變換過程:
        首先比較段號與段的總數,如果大於,則產生越界中斷,反之,則將段號×段表項長度,找到段號所對應的行,再比較段內地址與段長,如果大於,則產生越界中斷,反之用物理段號加段內偏移地址即是實體地址。
        段式儲存空間管理是二維的,不僅要給出段數,而且要給出段長(每段長度不固定)
        3,兩級頁表
        頁表需要連續儲存,當程式很大時就需要很多連續的空間去儲存頁表項,兩級頁表就是頁表的頁表,使頁表不需要連續儲存,但是增加了訪存的次數(3次)。
        4,段頁式儲存
        為什麼需要段頁式儲存?結合段式儲存與頁式儲存的優點,即方便程式設計,又方便計算機OS的管理。
        每一個程序都有一張段表,每一個段對應一張頁表,在進行地址轉換時:先查段表得到該項頁表的實體地址,再查頁表。得到最終的實體地址。
3,記憶體空間的擴充——虛擬儲存器
思想:將記憶體看作外存的高速儲存器,既有記憶體的速度,又有外存的大小。
    1,為什麼要引入虛擬記憶體?
    因為傳統的記憶體管理有一次性和駐留性,需要每次將整個作業裝入記憶體才能執行,且執行過程中不能換入換出(即時部分程式不常用),不利於大作業及多道併發工作。
    基於區域性性原理:只需要把程式的一部分裝入記憶體就可以執行,如果執行過程中,需要不在記憶體中的資訊,再由OS將所需要的部分調入記憶體即可。在執行過中,把暫時不需要的內容調出記憶體,換入更加需要的資訊。完成多次性和對換性
    2,引入虛擬記憶體之後需要那些變化
    虛擬記憶體大小?如何分配頁面數?如何換入換出?如何進行邏輯地址的轉換?
    (1)需要一些硬體支援
    需要缺頁中斷機制和地址變換機制
    (2)頁表項的變化
    需要增加有效位以表示該頁是否在記憶體中,增加修改位說明該塊是否進行了寫操作,增加外存地址,增加訪問欄位以決定如何進行塊的淘汰。
    虛存大小由虛擬地址結構決定
    (3)記憶體不夠時如何決定讓哪一頁換出?——頁面置換演算法
        FIFO:選擇最先進入記憶體的頁面淘汰,可能會造成Belady異常
        OPT:最佳置換演算法:向後看,選擇未來訪問最少的頁或不再訪問的頁面(是無法實現的,常被用作評價其他演算法的標準)
        LRU:最近最少使用,開銷大(需要記錄每個頁面的訪問次數),效能好
        CLOCK:為了解決LRU開銷大的問題
                       (1)簡單的clock演算法:用訪問位作為參考,先選擇訪問位為0的頁面換出
                         在迴圈掃描的過程中將自己掃描過的頁面的訪問位置為零。
                       (2)改進的clock演算法:選擇訪問位和修改位作為參考
                         最多進行四輪:優先順序(0,0)<(0,1)<(1,0)<(1,1)
    (4)如何確定給每一個程序分配的頁面數目大小?三種策略:
        1,固定分配,區域性變換 :每一個程序分配固定的頁面數目,在自己的頁面數目上進行換入換出
        2,可變分配,全域性置換:作業系統預留一個空白頁面集,每當某一個程序發生缺頁時就分配給該程序一個頁面。
        3,可變分配,區域性置換:只有當該程序頻繁出現缺頁現象才分配給該程序頁面。
    (5)用工作集的大小確定駐留集(分配頁面數)的大小
    駐留集:已經分配的記憶體頁面數
    工作集:在工作視窗中的頁面的集合
    分配的駐留集應該大於工作集的大小
    如果駐留集 < 工作集 可能會產生顛簸現象(頁面頻繁換入換出)
    (6)如何從外存調入頁面
將外存分為檔案區和對換區,調入調出頁面在對換區進行,為了提高對換區的換入換出速度採用連續儲存,而檔案區採用離散儲存。