1. 程式人生 > >作業系統第四章學習筆記 (2)儲存器管理 連續分配儲存管理方式

作業系統第四章學習筆記 (2)儲存器管理 連續分配儲存管理方式

連續分配方式:為一個使用者程式分配一個連續的記憶體空間

:單一連續分配

                記憶體分為系統區和使用者區兩部分:

                系統區:僅提供給OS使用,通常放在記憶體低址部分

                使用者區:除系統區以外的全部記憶體空間,提供給使用者使用。

                最簡單的一種儲存管理方式,只能用於單使用者、單任務的作業系統中。

                優點:易於管理。

                缺點:對要求記憶體空間少的程式,造成記憶體浪費;程式全部裝入,很少使用的程式部分也佔用記憶體。

:固定分割槽分配

                把記憶體分為一些大小相等或不等的分割槽(partition),每個應用程序佔用一個分割槽。作業系統佔用其中一個分割槽。

                提高:支援多個程式併發執行,適用於多道程式系統和分時系統。最早的多道程式儲存管理方式。

        劃分為幾個分割槽,便只允許幾道作業併發

        實現:

        分割槽大小:相等的和不等的

        需要的資料結構:分割槽表  |起始位置|大小|狀態|

        分割槽表中,表項值隨著記憶體的分配和釋放而動態改變

        過程:檢索空閒分割槽表;

                   找出一個滿足要求且尚未分配的分割槽,分配給請求程式;

                   若未找到大小足夠的分割槽,則拒絕為該使用者程式分配記憶體。

:動態分割槽分配    

               分割槽的大小不固定:在裝入程式時根據程序實際需要,動態分配記憶體空間,即——需要多少劃分多少。

               空閒分割槽表項:從1項到n項:

              記憶體會從初始的一個大分割槽不斷被劃分、回收從而形成記憶體中的多個分割槽。

       優點:併發程序數沒有固定數的限制,不產生內碎片。

               缺點:有外碎片(分割槽間無法利用的空間)

               實現:

               資料結構:空閒分割槽表、空閒分割槽鏈

               分割槽分配演算法:

動態分割槽方式,分割槽多、大小差異各不相同,此時把一個新作業裝入記憶體,更需選擇一個合適的分配演算法,從空閒分割槽表/鏈中選出一合適分割槽

              ①首次適應演算法FF

                              1.空閒分割槽排序:以地址遞增的次序連結。

                              2.檢索:分配記憶體時,從鏈首開始順序查詢直至找到一個大小能滿足要求的空閒分割槽;

                              3.分配:從該分割槽中劃出一塊作業要求大小的記憶體空間分配給請求者,

                                           餘下的空閒分割槽大小改變仍留在空閒鏈中。

                              若從頭到尾檢索不到滿足要求的分割槽則分配失敗

               優點:優先利用記憶體低址部分,保留了高地址部分的大空閒區;

               缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查詢從低址部分開始,會逐漸增加查詢開銷。

              ②迴圈首次適應演算法

                              1.空閒分割槽排序:按地址

                              2.檢索:從上次找到的空閒分割槽的下一個空閒分割槽開始查詢,直到找到一個能滿足要求的空閒

                                           分割槽。為實現演算法,需要:

                                                                                 ©設定一個起始查尋指標

                                                                                 ©採用迴圈查詢方式

                              3.分配:分出需要的大小

               優點:空閒分割槽分佈均勻,減少查詢開銷

               缺點:缺乏大的空閒分割槽

              ③最佳適應演算法

                               總是把能滿足要求、又是最小的空閒分割槽分配給作業,避免“大材小用”。

                               1.空閒分割槽排序:所有空閒分割槽按容量從小到大排序成空閒分割槽表或鏈。

                               2.檢索:從表或鏈的頭開始,找到的第一個滿足的就分配

                               3.分配:分出需要的大小

                    缺點:每次找到最合適大小的分割槽割下的空閒區也總是最小,會產生許多難以利用的小空閒區(外碎片

              ④最差適應演算法

                              基本不留下小空閒分割槽,但會出現缺乏較大的空閒分割槽的情況。

              ⑤快速適應演算法

                              根據程序常用空間大小進行劃分,相同大小的串成一個鏈,需管理多個各種不同大小的分割槽的連結串列。

                              程序需要時,從最接近大小需求的鏈中摘一個分割槽。類似的:夥伴演算法

                              能快速找到合適分割槽,但連結串列資訊會很多;實際上是空間換時間。

                分割槽分配操作

                    分配記憶體

                    回收記憶體

:動態重定位分割槽分配 --有緊湊功能的動態分割槽分配

                    動態連續分配方式無法解決“外碎片”問題

                    當前記憶體分配有3個小碎片,分別為30K64K40K。若有一個120K的作業申請一塊連續空間,無法滿足。

                    解決思路:移動分割槽位置,將小碎片整合為一個足夠大小可被使用的分割槽。即緊湊思想

 

地址變換過程是在程式執行過程期間(相對地址與重定位暫存器中的地址相加),隨著對每條指令的訪問自動進行,稱為動態重定位

動態重定位分割槽分配演算法與動態分割槽分配演算法基本相同,差別在於增加了緊湊的功能。

:其他

記憶體空間管理之對換

當記憶體空間還是滿足不了需求時,引入“對換”思想:

  把記憶體中暫時不能執行、或暫時不用的程式和資料調到外存上,以騰出足夠的記憶體;把已具備執行條件的程序和程序所需要的程式和資料,調入記憶體。

u按對換單位分類:

Ø整體對換(或程序對換):以整個程序為單位(連續分配)

Ø頁面對換或分段對換:以頁或段為單位(離散分配)

 實現程序對換,系統必須具備的功能:

對換空間的管理

程序的換出、換入操作

對換空間的管理