1. 程式人生 > >第四章儲存管理

第四章儲存管理

一。分割槽分配演算法詳解
 1. 首次適應演算法(First Fit)
  以空閒分割槽鏈為例進行說明,FF演算法要求空閒分割槽鏈以地址遞增的次序連結,在分配記憶體時,從鏈首開始順序查詢,直至找到一個大小能滿足要求的空閒分割槽為止,然後再按照作業的大小,從該分區劃出一塊記憶體空間分配給請求者,餘下的空閒分割槽仍留在空閒鏈中,若從鏈首直至鏈尾都不能找到一個能滿足要求的分割槽,則此次記憶體分配失敗,返回。該演算法傾向於優先利用記憶體中低址部分的空閒分割槽,從而保留了高址部分的大空閒區,這給以後達到的大作業分配大的記憶體空閒創造了條件,缺點在與低地址空間不斷被劃分,會留下許多難以利用的、很小的空閒分割槽,而每次查詢又都是從低地址部分開始,這無疑會增加查詢可用空閒分割槽的開銷。
  2. 迴圈首次適應演算法(Next Fit)

由首次適應演算法演變而來,在未程序分配記憶體空間時,不再是每次都從鏈首開始查詢,而是從上次找到的空閒分割槽的下一個空閒分割槽開始查詢,直至找到一個能滿足要求的空閒分割槽,從中劃分出一塊與請求大小相等的記憶體空間分配給作業。進行空閒分割槽分配時,會採用迴圈查詢方式,即如果最後一個(鏈尾)空閒分割槽的大小仍不能滿足要求,則返回第一個空閒分割槽。該演算法能使記憶體中的空閒分割槽分佈得更加均勻,從而減少了查詢空閒分割槽時的開銷,但是會缺乏大的空閒分割槽。
  3. 最佳適應演算法(Best Fit)
  該演算法總是能把滿足要求、又是最小的康縣分割槽分配給作業,避免大材小用,為了加速尋找,該演算法要求把所有的空閒分割槽按其容量以從小到大的順序形成一個空閒分割槽鏈,這樣,第一次就能找到滿足要求的空閒區,必然是最佳的,孤立地看,最佳適應演算法似乎是最佳的,然而巨集觀上卻不一定,因為每次分配後所切割下來的剩餘部分總是最小的,會留下很多難以使用的小空閒區。
  4. 快速適應演算法(Quick Fit)


  該演算法又稱為分類搜尋法,是將空閒分割槽容量大小進行分類,對於每一類具有相同容量的所有空閒分割槽,單獨設立一個空閒分割槽連結串列,這些,系統中存在多個空閒分割槽連結串列,同時在記憶體中設立一張管理索引表,該表的每一項對應了一種空閒分割槽型別,並記錄了該型別空閒分割槽連結串列表頭的指標。該演算法的優點是查詢效率高,僅需根據程序的長度,尋找到能容納它的最小空閒區連結串列,並取下第一塊進行分配即可。該演算法在進行空閒分割槽分配時,不會對任何分割槽產生分割,所以能保留大的分割槽,滿足對大空間的需求,也不會產生記憶體碎片。但是在分割槽歸還主存時演算法複雜,系統開銷大。
 二、基本分頁儲存管理方式
  連續分配方式會形成很多碎片,為之進行緊湊操作的開銷非常大,如果允許一個程序直接分散地裝入到許多不相鄰接的分割槽中,則無須進行緊湊操作,基於這一思想產生了離散分配方式,如果離散分配的基本單位是頁,則稱為分頁儲存管理方式,若為段,則為分段儲存管理方式。
  1 頁面與頁表

  分頁儲存管理是將一個程序的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,併為各頁進行編號,從0開始。相應地,把記憶體空間分成與頁面相同大小的若干個儲存塊,稱為(物理)塊或者頁框,也同樣為它們編號,如0#塊,1#塊等。在未程序分配記憶體時,以塊為單位將程序的若干個頁分別裝入到多個可以不相鄰接的物理塊中,由於程序的最後一頁經常裝不滿一塊而形成不可利用的碎片,稱之為頁內碎片。
  在分頁系統中的頁面其大小應適中,頁面若太大,一方面可以是記憶體碎片減少,有利於提供記憶體利用率,但是,每一個程序佔用的頁面較多,導致頁表過長,佔用太多記憶體,會降低頁面換進換出的效率。頁面若太大,可減少頁表的長度,提供頁面換進換出的速度,但是,記憶體碎片會增大,所以,也頁面大小應適中,通常為512B~8K
  說明:前一部分為頁號P,後一部分為位移量W(或稱為頁內地址),總共32位,其中0-11位為頁內地址,每頁大小4kb,12-31位為頁號,地址空間最多允許1M頁。
  為了能夠保證在記憶體中找到每個頁面所對應的物理塊,系統為每個程序建立了一張頁面對映表,簡稱為頁表。頁表項紀錄了相應頁在記憶體中對應的物理塊號,在配置了頁表後,程序執行時,通過查詢該表,即可找到每頁在記憶體中的物理塊號,頁表實現了從頁號到物理塊號的地址映像。
 2 地址變換機構
  為了能夠將使用者地址空間中的邏輯地址變換為記憶體空間中的實體地址,在系統中必須設定地址變換機構,該機構的基本任務是實現從邏輯地址到實體地址的轉換,由於頁內地址與物裡塊內的地址一一對應,無須再進行轉換,因此,地址變換機構的任務實際上只是將邏輯地址中的頁號轉換為記憶體中的物理塊號。又因為頁面對映表的的作用就是用於實現從頁號到物理塊號的變換,因此,地址變換任務是藉助頁表來完成的。
  三、基本分段儲存管理方式
  從固定分割槽到動態分割槽分配,再到分頁儲存管理方式,其主要動力為提高記憶體利用率,引入分段儲存管理的目的在於滿足使用者在程式設計和使用上多方面的要求。如
  ① 方便程式設計,使用者可以把自己的作業按照邏輯關係劃分為若干段,每個段都是從0開始編址,並有自己的名字和長度。
  ② 資訊共享,在實現對程式和資料的共享時,是以資訊的邏輯單位為基礎的,比如共享某個函式。
  ③ 資訊保護,資訊保護同樣是對資訊的邏輯單位進行保護。
  ④ 動態增長,在實際應用中,資料段在使用過程中往往會不斷增長,而實現無法確切知道資料段會增長到多大,分段可以較好的解決這個問題。
  ⑤ 動態連結,再執行時,先將主程式所對應的目標程式裝入記憶體並啟動執行,當執行過程中有需要呼叫某段時,才將該段調入記憶體並進行連結。
  在這裡插入圖片描述在這裡插入圖片描述