【作業系統筆記】動態儲存管理
轉載請註明出處:http://blog.csdn.net/ns_code/article/details/20661785
作業系統中常用來管理記憶體的動態分配和回收的方法有邊界標識法和夥伴系統。
邊界標識法
系統將所有的空閒塊連結在一個雙重迴圈連結串列結構的可利用空間表中。系統的特點在於:在每個記憶體區的頭部和底部兩個邊界上分別設有標識,以標識該區域是佔用塊或空閒塊,使得在回收使用者釋放的空閒塊時易於判別在物理位置上與其相鄰的記憶體區域是否為空閒塊,以便將所有地址連續的空閒塊組合成一個更大的可利用的空閒塊。
可利用空間表的結構如下圖所示:
其中space為一組連續的儲存單元,是可以分配給使用者使用的記憶體區域,它的大小由頭部的size屬性指示,頭部的llink域和rlink域分別指向上一個可用空間表和下一個可用空間表,底部的uplink域指向本節點頭部,頭部和底部都有個tag域,用來表示該當前塊是空閒塊還是佔用塊。
記憶體分配
採用該方法時,記憶體分配很簡單,採用首次擬合分配、最佳擬合分配、最差擬合分配均可。另外,為了避免修改指標,約定將該節點中的高地址部分分配給使用者。很明顯,如果每次分配都從同一個節點開始查詢的話,勢必會造成儲存量小的節點密集在頭指標所指節點附近,這同樣會增加查詢較大空閒塊的時間,因此在每次分配後,令指標指向剛剛分配過的節點的後續節點,這樣下一次記憶體分配時就從不同的節點進行查詢,避免了上述問題。
記憶體回收
某佔用塊被釋放後,檢查其左右鄰記憶體塊是否為空閒塊,如果是則連線起來成為一個更大的可用記憶體塊,並修改相應的域。
夥伴系統
在夥伴系統中,無論是佔用塊還是空閒塊,其大小均為2的整數次冪。比如,如果使用者請求申請n個位元組的記憶體區,那麼系統分配給它的佔用塊大小為2^k(2^(k-1) < n = < 2^k)。
可利用的空間表的結構如下圖所示:
其中,kva域的值為2的冪次k,space是一個大小為2^k個字的連續記憶體空間。
為了再分配時方便查詢,系統將所有大小相同的空閒塊用連結串列連線在一起,最後再索引到不同kval對應的位置,這有點類似於雜湊表的結構。如下圖所示:
記憶體分配
假設初始可用表中只有2^k大小的空閒塊,我們要申請n(2^(k-2) < n = < 2^(k-1))個位元組,的記憶體空間,此時由於節點為2^(k-1)大小的子表為空,則需從節點為2^k的子表中取出一塊,將其中的一半分配給使用者,剩餘的一半作為一個新節點插入到節點大小為2^(k-1)的字表中。同樣,若2^(k-i-1) < n =< 2^(k-i),並且所有節點大小小於2^k的子表均為空,則同樣需從節點大小為2^k的子表中取出一塊,將其中的2^(k-i)的一小部分分配給使用者,剩餘部分分成若干個節點分別插入到節點大小為2^(k-i)、2^(k-i+1)。。。2^(k-1)的子表中。
下圖展示了記憶體分配的情況:
記憶體回收
在夥伴系統中,僅會考慮將互為夥伴的兩個空閒塊合併在一起。我們在分配時經常需要將一個大的空閒塊分裂成兩個大小相等的儲存區,這兩個由同一個大塊分裂出來的小塊就互為夥伴塊。若有兩個空閒塊,即時大小相同且地址相鄰,但如果不是由同一個大塊分裂出來的,也不會合並在一起。
起始地址為p,大小為2^k的記憶體塊,其夥伴塊的起始地址滿足如下關係:
若p%2^(k+1)=0,則
夥伴塊的起始地址 = p+2^k;
若p%2^(k+1)=2^k,則
夥伴塊的起始地址 = p-2^k;
回收情況如下圖所示:
相關文章
- 作業系統儲存器管理筆記作業系統筆記
- 作業系統(8)儲存器管理作業系統
- 【學習筆記之作業系統原理篇】儲存管理筆記作業系統
- 作業系統——記憶體管理學習筆記作業系統記憶體筆記
- 作業系統筆記作業系統筆記
- 作業系統學習筆記:裝置管理作業系統筆記
- 理解作業系統之儲存管理作業系統
- 作業系統程式、儲存和I/O作業系統
- 作業系統——c++實現頁式虛擬儲存管理作業系統C++
- 作業系統學習筆記作業系統筆記
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- 作業系統ENDIAN(位元組儲存次序)作業系統
- 作業系統儲存管理實驗:最近最少使用LRU(Least Recently Used)作業系統AST
- 細說Oracle資料庫與作業系統儲存管理二三事Oracle資料庫作業系統
- 作業系統儲存管理和oracle資料庫(第二篇)作業系統Oracle資料庫
- 作業系統儲存管理和oracle資料庫(第三篇)作業系統Oracle資料庫
- 自動儲存、靜態儲存和動態儲存
- iNeuOS工業網際網路作業系統,釋出實時儲存方式:實時儲存、變化儲存、定時儲存,增加裝置振動狀態和電能狀態監測驅動,v3.6.2作業系統
- 作業系統儲存管理和oracle資料庫(第一篇)作業系統Oracle資料庫
- C、作業系統學習筆記作業系統筆記
- 作業系統記憶體管理概述作業系統記憶體
- 作業系統記憶體管理-原理作業系統記憶體
- 【作業系統】記憶體管理概述作業系統記憶體
- 408 知識點筆記——作業系統(檔案系統、裝置管理)筆記作業系統
- 作業系統動態庫呼叫過程作業系統
- 利用oracle儲存過程執行作業系統命令Oracle儲存過程作業系統
- 作業系統-記憶體、檔案管理作業系統記憶體
- 作為最常用的儲存協議,企業如何進行NAS儲存統一管理?協議
- 作業系統-程式管理作業系統
- 作業系統管理角色作業系統
- 作業系統 『動態(可變)分割槽分配』作業系統
- 作業系統筆記(八)程式同步附加篇作業系統筆記
- D版CentOS作業系統運維筆記CentOS作業系統運維筆記
- 【儲存管理】SAN儲存 Storage Area Network 儲存區域網路 學習筆記筆記
- VMWARE+RHEL3+ORACLE10g+ 自動儲存管理 (ASM) 筆記OracleASM筆記
- LOB儲存筆記筆記
- ucore作業系統學習筆記(一) ucore lab1系統啟動流程分析作業系統筆記