操作系统之存储管理
1.內(nèi)存分配的方式
(1) 連續(xù)分配方式
以固定分區(qū)分配方式為例,因為分區(qū)固定,所以缺乏靈活性。當程序太小時,一個分區(qū)不足以容納,造成內(nèi)部碎片。當程序太大時,一個分區(qū)又不足以容納,造成外部碎片。
(2) 基本分頁存儲管理方式
分頁存儲管理是將一個進程的邏輯地址空間分成若干個大小相等的片,稱為頁。并將各頁加以編號,從0開始,如第0頁,第1頁等。相應的也把內(nèi)存空間分成與頁面相同大小的存儲塊,也被稱為頁幀。
在為進程分配內(nèi)存的時候,將進程中的若干個頁分別裝入到多個可以不相鄰接的塊中,由于進程的最后一頁經(jīng)常裝不滿一塊形成不可利用的碎片,被稱為頁內(nèi)碎片。
在分頁系統(tǒng)中,允許將進程的各個頁離散的儲存在內(nèi)存不同的物理塊中,但系統(tǒng)要能保證進程的正確運行,必須要在內(nèi)存中找到每個頁面所對應的物理塊。因此系統(tǒng)為所有進程建立了一張頁表,頁表的作用是實現(xiàn)從頁號到物理塊號的地址映射。
由于頁表是放在內(nèi)存中的,使得CPU在存取每個數(shù)據(jù)的時候,都要兩次訪問內(nèi)存(也就是訪問頁表和訪問實際物理地址)。為了提高地址變換速度,增加了一個具有并行查詢能力的緩沖寄存器,被稱為聯(lián)想寄存器,也叫快表。
(3) 基本分段存儲管理方式
作業(yè)的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例程序段、數(shù)據(jù)段等。每個段都從0開始編址,并采用一段連續(xù)的地址空間。段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。
在段式虛擬存儲系統(tǒng)中,虛擬地址由段號和段內(nèi)地址組成,虛擬地址到實存地址的變換通過段表來實現(xiàn)。每個程序設置一個段表,段表的每一個表項對應一個段,每個表項至少包括三個字段:有效位(指明該段是否已經(jīng)調(diào)入主存)、段起址(該段在實存中的首地址)和段長(記錄該段的實際長度)。
地址變換:針對每一個虛擬地址,存儲管理部件首先以段號S為索引訪問段表的第S個表項。若該表項的有效位為1,則將虛擬地址的段內(nèi)地址D與該表項的段長字段比較;若段內(nèi)地址較大則說明地址越界,將產(chǎn)生地址越界中斷;否則,將該表項的段起址與段內(nèi)地址相加,求得主存實地址并訪存。如果該表項的有效位為0,則產(chǎn)生缺頁中斷,從輔存中調(diào)入該頁,并修改段表。段式虛擬存儲器虛實地址變換過程如圖所示。
分段和分頁的區(qū)別
- 頁是信息的物理單位,分頁式由于系統(tǒng)管理的需要,消減內(nèi)存的零頭。段是信息的邏輯單位
- 頁的大小固定,由系統(tǒng)決定,段的長度不固定
(4)段頁式存儲管理方式
段頁式系統(tǒng)的基本原理是先將用戶程序分成若干個段,然后再分為若干個頁。在段頁式系統(tǒng)中,地址結構由段號,段內(nèi)頁號和頁內(nèi)地址三部分所組成。段頁式存儲管理方式綜合了分頁系統(tǒng)能有效提高內(nèi)存利用率的優(yōu)點和分段系統(tǒng)能有效滿足用戶需求的優(yōu)點。
2.虛擬內(nèi)存
虛擬內(nèi)存的作用:先將部分程序?qū)雰?nèi)存,執(zhí)行完成之后導入下一部分程序,給我們的感覺是內(nèi)存變大了,實際上物理內(nèi)存的大小并沒有變化
虛擬內(nèi)存的優(yōu)點:
- 將邏輯內(nèi)存和物理內(nèi)存分開
- 虛擬內(nèi)存允許文件和內(nèi)存通過共享頁而為兩個或多個進程所共享
3.頁面置換算法
1.最優(yōu)頁面置換算法(OPT):選未來最遠將使用的頁淘汰,但是無法實現(xiàn)。
2.最近未使用(NRU):根據(jù)R位和M位分成四類
- 第0類:沒有被訪問,沒有被修改
- 第1類:沒有被訪問,已被修改
- 第2類:已被訪問,沒有被修改
- 第3類:已被訪問,已被修改
優(yōu)先選擇類編號最小的挑選一個頁面淘汰之。
3.先進先出(FIFO)
4.第二次機會
檢查最老頁面的R位,如果R位是0,那么這個頁面既老又沒有被使用,可以立刻置換掉,如果是1,就將R位清零,并把該頁面放到鏈表的尾端,修改它的裝入時間使它就像剛裝入一樣,繼續(xù)搜索。
5.時鐘頁面置換算法
時鐘頁面置換算法跟二次機會算法相似,不過頁面都是保存在一個類似鐘面的環(huán)形鏈表中,一個表針指向最老的頁面,發(fā)生缺頁中斷時,算法首先檢查表針指向的頁面,如果R位是0則淘汰該頁面,并把新的頁面插入這個位置,然后把表針前移一個位置,如果R位是1就消除R位并把指針前移一個位置。
6.最近最少使用(LRU)
LRU硬件維持一個初值為0的n * n的矩陣,當訪問到頁框k時,硬件首先把k行的位都設置為1,再把k列的位都設置為0,在任何時候,二進制數(shù)值最小的行就是最近最少使用的。
7.工作集:工作集就是最近K次內(nèi)存訪問所用過的頁面的集合
在每個時鐘周期,有一個定期的時鐘中斷會用軟件方法來清除r位。
在處理每個表項時,都需要檢查R位,如果它是1,都把當前實際時間寫進頁表項‘上次使用的時間域’,不應該刪除。
如果R是0,則表示當前時鐘周期沒有被訪問過,則它可以作為候選者,需要計算它的生存時間,(當前實際運行時間-上次使用時間),然后與z作比較。如果生存時間大于z,那么這個頁面不在工作集,要用新的頁面置換它。
8.工作集時鐘
工作集時鐘算法其實就是工作集算法和時鐘算法的結合版。
總結
- 上一篇: 扩展内容(进程的通信方式)
- 下一篇: 操作系统之设备管理