一些儲存概念自己有用需要封裝記憶體分配函式是了解

2021-04-12 12:47:00 字數 2858 閱讀 1316

連續分配儲存方式

1.固定分割槽(fixed partitioning)分配

固定分割槽是在作業裝入之前,記憶體就被劃分成若干個分割槽。劃分工作可以由系統管理員完成,

也可以由作業系統實現。然而一旦劃分完成,在系統執行期間不再重新劃分,即分割槽的個數不可變,

分割槽的大小不可變,所以,固定式分割槽又稱為靜態分割槽。

這種分割槽方式一般將記憶體的使用者區域劃分成大小不等的分割槽,以適應不同大小的作業的需要。系

統有一張分割槽說明表,每個表目說明乙個分割槽的大小、起始位址和是否已分配的使用標誌。

固定分割槽(fixed partitioning)分配

分割槽說明表

區號  大小  起址  標誌

1   16kb  20k   已分配

2   32kb  36k   已分配

3   64kb  68k   已分配

4  124kb 132k  未分配

固定式分割槽實現技術簡單,但是記憶體的利用率不高,適用於作業的大小和多少事先都比較清楚的

系統中。它用於60年代的ibm-360的mft作業系統中。

2.動態/可變式(dynamic partitioning)分割槽分配

可變式分割槽是指在作業裝入記憶體時,從可用的記憶體中劃出一塊連續的區域分配給它,且分割槽大

小正好等於該作業的大小。可變式分割槽中分割槽的大小和分割槽的個數都是可變的,而且是根據作業的大

小和多少動態地劃分,因此又稱為動態分割槽。這種儲存管理技術是固定式分割槽的改進,既可以獲得較

大的靈活性,又能提高記憶體的利用率。

可變式分割槽的分配和釋放的基本思想是:在分配時,首先找到乙個足夠大的空閒分割槽,即這個空

閒區的大小比作業要求的要大,系統則將這個空閒分割槽分成兩部分:一部分成為已分配的分割槽,剩餘

的部分仍作為空閒區。在**撤除作業所占領的分割槽時,要檢查**的分割槽是否與前後空閒的分割槽相

領接,若是,則加以合併,使之成為乙個連續的大空間。

動態/可變式(dynamic partitioning)分割槽分配

1、 可變式分割槽資料結構

空閒區表形式

空閒分割槽表為每個尚未分配的分割槽設定乙個表項,包括分割槽的序號、大小、始址和狀態。空閒區

鏈形式為了實現對空閒分割槽的分配和鏈結,在每個分割槽的起始部分,設定一些用於控制分割槽分配的資訊

(如分割槽的大小和狀態位),以及用於鏈結其它分割槽的前向指標;在分割槽尾部,則設定了乙個後向指

針,為了檢索方便也設定了控制分割槽分配的資訊。然後,通過前、後向指標將所有的分割槽鏈結成乙個

雙向鍊錶。 

動態/可變式(dynamic partitioning)分割槽分配

序號p  大小  起址  狀態

1   32k   20k   空閒

2   56k  260k   空閒

3   116k  396k  空閒

4   -    -    空表目

5   -    -    空表目 

2、 分割槽分配演算法(partitioning placement algorithm)

最佳適應演算法(best fit):

它從全部空閒區中找出能滿足作業要求的、且大小最小的空閒分割槽,這種方法能使碎片盡量小。

為適應此演算法,空閒分割槽表(空閒區鏈)中的空閒分割槽要按大小從小到大進行排序,自表頭開始查詢

到第乙個滿足要求的自由分割槽分配。該演算法保留大的空閒區,但造成許多小的空閒區。

首次適應演算法(first fit):

從空閒分割槽表的第乙個表目起查詢該錶,把最先能夠滿足要求的空閒區分配給作業,這種方法目

的在於減少查詢時間。為適應這種演算法,空閒分割槽表(空閒區鏈)中的空閒分割槽要按位址由低到高進

行排序。該演算法優先使用低址部分空閒區,在低址空間造成許多小的空閒區,在高位址空間保留大的

空閒區。

迴圈首次適應演算法(next fit):

該演算法是首次適應演算法的變種。在分配記憶體空間時,不再每次從表頭(鏈首)開始查詢,而是從

上次找到空閒區的下乙個空閒開始查詢,直到找到第乙個能滿足要求的的空閒區為止,並從中劃出一

塊與請求大小相等的記憶體空間分配給作業。該演算法能使記憶體中的空閒區分布得較均勻。

(4)動態重定位分割槽分配

1、 緊湊(compaction)/拼接

可變式分割槽也有零頭問題。在系統不斷地分配和**中,必定會出現一些不連續的小的空閒區

,稱為碎片(fragment)(又稱零頭)。小的空閒區稱外零頭,固定分區內的空閒部分稱為內零頭。

雖然可能所有零頭的總和超過某乙個作業的要求,但是由於不連續而無法分配。解決零頭的方法是緊

湊(或稱拼接),即向乙個方向(例如向低位址端)移動已分配的作業,使那些零散的小空閒區在另

一方向連成一片。分割槽的拼接技術,一方面是要求能夠對作業進行重定位,另一方面系統在拼接時要

耗費較多的時間。

2、 動態重定位

實現緊湊所需的允許作業在執行過程中在記憶體中移動的技術必須獲得硬體支援。只有具有動態

重定位硬體機構的計算機系統,才有可能採取動態重定位可變分割槽多道管理技術,系統的硬體包括重

定位暫存器和加法器。

3、 動態重定位分割槽分配演算法

動態重定位分割槽管理中何時進行儲存器緊縮有二種不同的解決辦法:

在某個分割槽被釋放後立即進行緊縮,系統總是只有乙個連續的分割槽而無碎片,此法很花費機時。

當"請求分配模組"找不到足夠大的自由分割槽分給使用者時再進行緊縮,這樣緊縮的次數比上種方法

少得多,但**管理複雜。採用此法的動態重定位分割槽分配演算法框圖。 

4、 分割槽的保護

分割槽的保護的常用方法是由系統提供硬體:一對界限暫存器。這可以是上界暫存器、下界寄存

器,或者是基址暫存器、限長暫存器。基址暫存器存放起始位址,作為重定位(位址對映)使用;限

長暫存器存放程式長度,作為存貯保護使用。

php 自己封裝的一些函式

手機歸屬地函式 function get mobile area phone else else return content 將陣列轉成物件 function array2object array else return obj 將物件轉化成陣列 function object2array obj...

儲存的一些基本概念

塊裝置 字元裝置 裸裝置 學過linux的沒有不聽說過block塊的,linux中有兩種型別的裝置檔案 塊裝置檔案和字元裝置檔案。乙個塊裝置每次讀取或者寫入一塊資料 一組位元組,通常是512的倍數 字元裝置每次讀取或者寫入乙個位元組。字元裝置 按照字元流的方式被有序訪問,不能隨機訪問,如鍵盤 串列埠...

react需要了解的一些概念

高階元件本質上是乙個函式,是可以傳遞乙個元件作為引數,並且會返回乙個新的元件,可以通過props的形式傳遞給目標元件,這樣目標元件可以直接在props裡面獲取使用就可以,在工作中,我們使用的connect withrouter 還有一些自己封裝復用的元件 basicfram公共標題 class he...