可變分區 存儲管理 不是預先把記憶體中的用戶區域劃分成若干固定分區,而是在作業要求裝入記憶體時,根據用戶作業的大小和當時記憶體空間使用情況決定是否為該作業分配一個分區。因此分區大小不是預先固定的,而是按作業需求量來劃分的;分區的個數和位置也不是預先確定的。它有效地克服了固定分區方式中,由於分區內部剩餘記憶體空置造成浪費的問題。
基本介紹
- 屬 於:存儲管理
存儲管理
基本思想
內、外部碎片
內部碎片 | 外部碎片 |
存儲管理中,把分配給了用戶而用戶未用的存儲區稱為“內部碎片” | 存儲管理中,把那些無法分配出去滿足作業存儲請求的空閒區稱為“外部碎片” |
解決的問題
- 採用地址動態重定位技術,使程式能在記憶體中移動,為空閒區合併提供保證。
- 記住各分區的使用情況,當一個分區被釋放時,要能判定它的前、後分區是否為空閒區。若是空閒區,就進行合併,形成一個大的空閒區
- 給出分區分配算法,在有多個空閒區都滿足作業的存儲請求時,決定分配哪一個
空閒區的合併
- 釋放分槓項拒區的前、後鄰接分區都是已分配區循勸只,沒有合併的問題存在。
- 釋放分區的前鄰接分區是空閒區,後鄰接分區是已分配區。釋放區應該和前鄰接的空閒區合併成一個新的空閒區。
- 釋放區的前鄰接分區是已分配區,後鄰接分區是空閒區。因此,釋放分區應該和後鄰接的空閒區合併成一個新的空閒區。
- 釋放區的前、後鄰接分放邀戲區都是空閒區。因此,釋放區應該和前、後兩個鄰接的空閒區合併成一個新的空閒區。
- 一是調度到某作業時,若系統的每個空閒區尺寸都小於它的需要,但空閒區總存儲量大於它的存儲請求,於是進行空閒區合併,得到一個大的空閒區,滿足該作業的需要。
- 一是只要有作業運行完歸還所占用的存儲區,系統就進行空閒區的合併。
分區的管理
表格法
- 設定兩張表:“已分配表”和“空閒區表”。其中“序號”是表目項的順序號,“起始地址”、“尺寸”、“狀態” 都是該分區的相應屬性。由於系統中分區的數目是變化的,因此每張表格中的表目項數要足夠的多,暫時不用的表目項的狀態被設為“空”。
- 作業提出存儲需求時,查空閒區表里狀態為“空閒”的表目項。若該項的尺寸能滿足所求,就將它一分為二:分配出去的那部分在已分配表里找一個狀態為“空” 的表目項進行登記,剩下的部分仍在空閒區表里占據一個表目項。
- 若有作業運行結束,則根據作業名到已分配表里找到它的表目項,將該項的 “狀態”改為“空”,隨之在空閒區表里尋找一個狀態為“空”的表目項,把釋放分區的信息填入,並將表目項狀態改為“空閒”。
單鍊表法
- 基本思想
把記憶體中每個空閒分區視為一個整體,在它裡面開闢出兩個單元,一個存放該分區的長度(size),一個存放它下一個空閒分區的起址(next),作業系統開闢一個單元,存放第1個空閒分區的起址,這個單元稱為“鏈首指針”。最後一個空閒分區的next里存放標誌“NULL” 。這樣一來,系統里所有空閒分區被next連線成一個鍊表。從鏈首指針出發,順著各個空閒分區的next往下走,就能到達每一個空閒分區。 - 存儲分配
對淚辨提出的任何一個存儲請頸抹籃漏求,從空閒區鍊表首指針開始查看一個個空閒區。若有滿足要求的,按尺寸分配,調整next指針;若到達NULL未見滿足要求,則分配失敗。 - 存儲釋放
作業完成任務後,將占用的存儲區釋放,鏈入霉束煉凶空閒區鍊表(要調整指針和空閒區合併)。