作業系統—記憶體管理
轉載:https://blog.csdn.net/BillCYJ/article/details/79039828
內容會持續更新,有錯誤的地方歡迎指正,謝謝!
記憶體管理
問題
1、什麼是區域性性原理?
時間上的區域性性:最近被訪問的頁在不久的將來還會被訪問,例如:迴圈語句;
空間上的區域性性:記憶體中被訪問的頁周圍的頁也很可能被訪問,例如:使用陣列。
2、什麼是虛擬記憶體?
1).記憶體的發展歷程(瞭解)
沒有記憶體抽象(單程序,除去作業系統所用的記憶體之外,全部給使用者的一個程式使用)
有記憶體抽象(多程序,程序獨立的地址空間,交換技術(記憶體大小不可能容納下所有併發執行的程序))
連續記憶體分配(固定大小分割槽,可變分割槽(首次適應(空閒區表按地址遞增排),最佳適應(空閒區表按大小遞增排),最差適應(空閒區表按大小遞減排)),碎片)
不連續記憶體分配(分頁、分段、段頁式)
2).虛擬記憶體——記憶體管理的核心
虛擬記憶體是將硬碟的一部分作為記憶體(又叫主存)來使用。在程式裝入時,可將程式的一部分裝入記憶體,就可啟動程式執行;在程式執行過程中,當所訪需要的資訊不在記憶體時,就將這部分從虛擬記憶體調入記憶體,然後繼續執行程式;最後,將記憶體中暫時不用的資訊換出到虛擬記憶體。
3、記憶體管理有哪幾種方式
頁式管理、段式和段頁式管理。
4、說說頁式儲存管理實現虛擬記憶體的原理?
是實現虛擬記憶體的一種常用方式(還有段式、段頁式)。需要頁表、地址對映、缺頁中斷機制。
先來了解一些名詞:
1.頁(又叫頁面):將程序分為等大的小片,這些小片就是頁。一個頁的大小一般為4KB。
2.頁框(又叫物理塊號):將記憶體分為等大的小片,這些小片就是頁框。
3.頁號:頁的編號;頁框號:頁框的編號。
4.頁表:一個程序就對應一個頁表(如下表),用於記錄頁號和頁框號等對應的資訊 以 顯示一個頁和一個頁框的對應的關係。頁表放在Cache(快速緩衝區Cache位於主存和CPU之間,作用是解決主存和CPU速率匹配問題)中就叫快表;放在記憶體中就叫慢表。
頁號 頁框號 中斷位 輔存地址
1
0
5.地址對映:地址對映時優先訪問快表。若在快表中找到所需資料的頁號,則“命中”,也就是所需的頁在記憶體裡的;若沒有在快表中找到,則訪問慢表同時更新快表。
6.缺頁中斷:經常發生,缺頁中斷就是要訪問的頁不在記憶體,需要作業系統將其調入記憶體後再進行訪問,並更新頁表中該頁對應的頁框號以及修改中斷位為0。
頁式儲存管理的基本思想:在程序執行前,僅裝入當前執行所需的頁;在執行時,調入要訪問但又不在記憶體的頁(即缺頁中斷);當記憶體空間已滿,而又需要裝入新的頁時,則根據合理的頁面排程策略適當調出某個頁,以便騰出空間而裝入新的頁。
5、介紹下常見的頁面排程策略(又叫淘汰策略,又叫Cache替換演算法)?
FIFO先進先出演算法:淘汰最先進來的;
LRU最久未使用演算法:淘汰距離上次使用時間最長的;
LFU(Least frequently use)最不經常使用演算法:淘汰使用次數最少的(用計數器對每頁進行計數);
OPT最優置換演算法:淘汰將來不再需要或在最遙遠的將來才會使用的頁。
6、什麼是頁面顛簸(又叫頁面抖動)?
顛簸本質上是指頻繁的頁排程行為。頁面在記憶體和輔存間頻繁交換的現象。會導致整個系統的效率急劇下降,這種現象稱為顛簸(抖動)。
記憶體顛簸的解決策略包括:
如果是因為頁面替換策略失誤,可以修改替換演算法來解決這個問題;
如果是因為程序太多,無法同時將所有頻繁訪問的頁面調入記憶體,則要降低程序的數量;
否則,增加實體記憶體容量。
7、分頁和分段有什麼區別?
兩者的區別:
目的不同:分頁是資訊的物理單位,由於系統管理的需要而不是使用者的需要;分段(如下圖)是資訊的邏輯單位,目的是為了能更好地滿足使用者的需要;
大小不同:頁的大小固定且由系統決定,而段的長度可變,由其所完成的功能來決定長度;
地址空間不同: 段向用戶提供二維地址空間(段號+偏移);頁向用戶提供一維地址空間;
資訊共享:段便於儲存保護和資訊的共享,頁的儲存保護和資訊的共享受到限制;
記憶體碎片:頁式儲存管理的優點是沒有外碎片(因為頁的大小固定),但會產生內碎片(一個頁可能填充不滿);而段式管理的優點是沒有內碎片(因為段可以改變段大小來消除內碎片),但段會產生外碎片(比如4k的段換5k的段,會產生1k的外碎片)。
8、Windows記憶體管理的方式(頁式、段式、段頁式)
頁式能有效地提高記憶體的利用率,而段式系統能反映程式的邏輯結構,便於段的共享與保護。將分頁與分段兩種儲存方式結合起來,就形成了段頁式儲存管理方式。
在段頁式儲存管理系統中,作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,每個程序設定一個段表;再將每段分成若干個大小相等的頁,每個段有自己的頁表。段頁式排程綜合了段式和頁式的優點,大型通用計算機系統多數採用段頁式排程。
PS:Linux只用了頁式虛擬儲存管理的方式。
9、段頁式管理每取一資料,要訪問()次記憶體。
3次
在段頁式儲存管理方式中,取一次資料:首先要從記憶體中查詢段表;再查詢該段對應的頁表;最後通過得到的實體地址訪問記憶體獲得資料。
參考
【1】作業系統面試問題集錦
http://blog.csdn.net/justloveyou_/article/details/78304294
【2】作業系統基礎知識梳理
https://www.nowcoder.com/discuss/62723