1. 程式人生 > >3.記憶體連續分配管理方式

3.記憶體連續分配管理方式

轉載自:http://c.biancheng.net/cpp/html/2610.html點選開啟連結

連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。它主要包括單一連續分配、固定分割槽分配和動態分割槽分配。

單一連續分配

記憶體在此方式下分為系統區和使用者區,系統區僅提供給作業系統使用,通常在低地址部分;使用者區是為使用者提供的、除系統區之外的記憶體空間。這種方式無需進行記憶體保護。

這種方式的優點是簡單、無外部碎片,可以釆用覆蓋技術,不需要額外的技術支援。缺點是隻能用於單使用者、單任務的作業系統中,有內部碎片,儲存器的利用率極低。

固定分割槽分配

固定分割槽分配是最簡單的一種多道程式儲存管理方式,它將使用者記憶體空間劃分為若干個固定大小的區域,每個分割槽只裝入一道作業。當有空閒分割槽時,便可以再從外存的後備作業佇列中,選擇適當大小的作業裝入該分割槽,如此迴圈。


圖3-4  固定分割槽分配的兩種方法
固定分割槽分配在劃分分割槽時,有兩種不同的方法,如圖3-4所示。
  • 分割槽大小相等:用於利用一臺計算機去控制多個相同物件的場合,缺乏靈活性。
  • 分割槽大小不等:劃分為含有多個較小的分割槽、適量的中等分割槽及少量的大分割槽。

為便於記憶體分配,通常將分割槽按大小排隊,併為之建立一張分割槽說明表,其中各表項包括每個分割槽的起始地址、大小及狀態(是否已分配),如圖3-5(a)所示。當有使用者程式要裝入時,便檢索該表,以找到合適的分割槽給予分配並將其狀態置為”已分配”;未找到合適分割槽則拒絕為該使用者程式分配記憶體。儲存空間的分配情況如圖3-5(b)所示。

這種分割槽方式存在兩個問題:一是程式可能太大而放不進任何一個分割槽中,這時使用者不得不使用覆蓋技術來使用記憶體空間;二是主存利用率低,當程式小於固定分割槽大小時,也佔用了一個完整的記憶體分割槽空間,這樣分割槽內部有空間浪費,這種現象稱為內部碎片。

固定分割槽是可用於多道程式設計最簡單的儲存分配,無外部碎片,但不能實現多程序共享一個主存區,所以儲存空間利用率低。固定分割槽分配很少用於現在通用的作業系統中,但在某些用於控制多個相同物件的控制系統中仍發揮著一定的作用。


圖3-5  固定分割槽說明表和記憶體分配情況

動態分割槽分配

動態分割槽分配又稱為可變分割槽分配,是一種動態劃分記憶體的分割槽方法。這種分割槽方法不預先將記憶體劃分,而是在程序裝入記憶體時,根據程序的大小動態地建立分割槽,並使分割槽的大小正好適合程序的需要。因此係統中分割槽的大小和數目是可變的。


圖3-6動態分割槽
如圖3-6所示,系統有64MB記憶體空間,其中低8MB固定分配給作業系統,其餘為使用者可用記憶體。開始時裝入前三個程序,在它們分別分配到所需空間後,記憶體只剩下4MB,程序4無法裝入。在某個時刻,記憶體中沒有一個就緒程序,CPU出現空閒,作業系統就換出程序2,換入程序4。由於程序4比程序2小,這樣在主存中就產生了一個6MB的記憶體塊。之後CPU又出現空閒,而主存無法容納程序2,作業系統就換出程序1,換入程序2。

動態分割槽在開始分配時是很好的,但是之後會導致記憶體中出現許多小的記憶體塊。隨著時間的推移,記憶體中會產生越來越多的碎片(圖3-6中最後的4MB和中間的6MB,且隨著程序的換入/換出,很可能會出現更多更小的記憶體塊),記憶體的利用率隨之下降。這些小的記憶體塊稱為外部碎片,指在所有分割槽外的儲存空間會變成越來越多的碎片,這與固定分割槽中的內部碎片正好相對。克服外部碎片可以通過緊湊(Compaction)技術來解決,就是作業系統不時地對程序進行移動和整理。但是這需要動態重定位暫存器的支援,且相對費時。緊湊的過程實際上類似於Windows系統中的磁碟整理程式,只不過後者是對外存空間的緊湊。

在程序裝入或換入主存時,如果記憶體中有多個足夠大的空閒塊,作業系統必須確定分配哪個記憶體塊給程序使用,這就是動態分割槽的分配策略,考慮以下幾種演算法:
  • 首次適應(First  Fit)演算法:空閒分割槽以地址遞增的次序連結。分配記憶體時順序查詢,找到大小能滿足要求的第一個空閒分割槽。
  • 最佳適應(Best  Fit)演算法:空閒分割槽按容量遞增形成分割槽鏈,找到第一個能滿足要求的空閒分割槽。
  • 最壞適應(Worst  Fit)演算法:又稱最大適應(Largest Fit)演算法,空閒分割槽以容量遞減的次序連結。找到第一個能滿足要求的空閒分割槽,也就是挑選出最大的分割槽。
  • 鄰近適應(Next  Fit)演算法:又稱迴圈首次適應演算法,由首次適應演算法演變而成。不同之處是分配記憶體時從上次查詢結束的位置開始繼續查詢。

在這幾種方法中,首次適應演算法不僅是最簡單的,而且通常也是最好和最快的。在UNIX 系統的最初版本中,就是使用首次適應演算法為程序分配記憶體空間,其中使用陣列的資料結構 (而非連結串列)來實現。不過,首次適應演算法會使得記憶體的低地址部分出現很多小的空閒分割槽,而每次分配查詢時,都要經過這些分割槽,因此也增加了查詢的開銷。

鄰近適應演算法試圖解決這個問題,但實際上,它常常會導致在記憶體的末尾分配空間(因為在一遍掃描中,記憶體前面部分使用後再釋放時,不會參與分配),分裂成小碎片。它通常比首次適應演算法的結果要差。

最佳適應演算法雖然稱為“最佳”,但是效能通常很差,因為每次最佳的分配會留下很小的難以利用的記憶體塊,它會產生最多的外部碎片。

最壞適應演算法與最佳適應演算法相反,選擇最大的可用塊,這看起來最不容易產生碎片,但是卻把最大的連續記憶體劃分開,會很快導致沒有可用的大的記憶體塊,因此效能也非常差。

Kunth和Shore分別就前三種方法對記憶體空間的利用情況做了模擬實驗,結果表明:

首次適應演算法可能比最佳適應法效果好,而它們兩者一定比最大適應法效果好。另外注意,在演算法實現時,分配操作中最佳適應法和最大適應法需要對可用塊進行排序或遍歷查詢,而首次適應法和鄰近適應法只需要簡單查詢;回收操作中,當回收的塊與原來的空閒塊相鄰時(有三種相鄰的情況,比較複雜),需要將這些塊合併。在演算法實現時,使用陣列或連結串列進行管理。除了記憶體的利用率,這裡的演算法開銷也是作業系統設計需要考慮的一個因素。

表3-1三種記憶體分割槽管理方式的比較
作業道數 內部
碎片
外部
碎片
硬體支援 可用空
間管理
解決碎
片方法
解決空
間不足
提高作
業道數
單道連續
分配
1 界地址暫存器、越界
檢查機構
-- -- 覆蓋 交換
多道固定
連續分配
<=N
(使用者空間劃
為N塊)
  1. 上下界暫存器、越界檢查機構
  2. 基地址暫存器、長度暫存器、動態地址轉換機構
-- --
多道可變連續分配
  • 陣列
  • 連結串列
緊湊

以上三種記憶體分割槽管理方法有一共同特點,即使用者程序(或作業)在主存中都是連續存放的。這裡對它們進行比較和總結,見表3-1。

相關推薦

3.記憶體連續分配管理方式

轉載自:http://c.biancheng.net/cpp/html/2610.html點選開啟連結 連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。它主要包括單一連續分配、固定分割槽分配和動態分割槽分配。 單一連續分配 記憶體在此方式下分為系統區和使用者區

作業系統--記憶體管理連續分配管理方式

連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。它主要包括單一連續分配、固定分割槽分配和動態分割槽分配。 1單一連續分配 記憶體在此方式下分為系統區和使用者區,系統區僅提供給作業系統使用,通常在低地址部分;使用者區是為使用者提供的、除系統區之外的記憶體空間。這

記憶體管理連續分配管理方式

連續分配管理方式      連續分配方式是指為一個使用者程式分配一個連續的記憶體空間。通俗地說,就是給記憶體劃格子(格子中都是一個程序,和非連續分配管理方式相對)。(1)單一連續分配     將記憶體分為系統區和使用者區,記憶體中永遠只有一道程式——已經成為歷史(2)固定分割

記憶體連續分配方式採用的幾種演算法及各自優劣。

連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。它主要包括單一連續分配、固定分割槽分配和動態分割槽分配。 單一連續分配 記憶體在此方式下分為系統區和使用者區,系統區僅提供給作業系統使用,通常在低地址部分;使用者區是為使用者提供的、除系統區之外的記憶體空間。這

第4章 儲存器管理 連續分配儲存管理方式

一,連續分配儲存管理方式 1,連續分配方式 為一個使用者程式分配一個連續的記憶體空間 (1)單一連續分配 記憶體分為系統區和使用者區兩部分: 系統區:僅提供給OS使用,通常放在記憶體低址部分 使用者區:除系統區以外的全部記憶體空間,提供給使用者使用。 最簡單的一種儲存管

作業系統 第四章 2 儲存器管理 連續分配方式

1)單一連續分配: 記憶體分為系統區和使用者區兩部分 2)固定分割槽分配: 把記憶體分為一些大小相等或不等的分割槽,每個應用程序佔用一個分割槽。作業系統佔用其中一個分割槽。(劃分為幾個分割槽,便只允許幾道作業併發)    建立一記錄相關資訊的分割槽表(或分割槽連結

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

連續分配方式:為一個使用者程式分配一個連續的記憶體空間 :單一連續分配                 記憶體分為系統區和使用者區兩部分:        

第4章 儲存器管理 連續分配儲存管理方式

一,連續分配儲存管理方式 1,連續分配方式 為一個使用者程式分配一個連續的記憶體空間 (1)單一連續分配 記憶體分為系統區和使用者區兩部分: 系統區:僅提供給OS使用,通常放在記憶體低址部分 使用者區:除系統區以外的全部記憶體空間,提供給使用者使用。 最簡單的

4.2連續分配儲存管理方式

1.單一連續分配:記憶體分為系統區和使用者區兩部分 優點:易於管理。 2.固定分割槽分配:把記憶體分為一些大小相等或不等的分割槽,每個應用程序佔用一個分割槽。作業系統佔用其中一個分割槽。(劃分為幾個分割槽,便只允許幾道作業併發)    建立一記錄相關資訊的分割槽表(或分割

linux 高階記憶體頁框管理:永久核心對映、臨時核心對映以及非連續記憶體分配

摘要:高階記憶體頁框的核心對映分為三種情況:永久核心對映、臨時核心對映和非連續記憶體對映。那麼這三者有什麼區別和聯絡呢?臨時核心對映如何保證不會被阻塞呢?本文主要為你解答這些疑問,並詳細探討高階記憶體對映的前兩種方式。 1.高階記憶體的區域劃分 核心將高階記憶體

找工作筆試面試那些事兒(3)---記憶體管理那些事

作者:寒小陽 時間:2013年8月。 出處:http://blog.csdn.net/han_xiaoyang/article/details/10676931。 宣告:版權所有,轉載請註明出處,謝謝。   七、記憶體管理        

5.3 記憶體分配與垃圾回收

5.3 記憶體分配與垃圾回收    在5.4部分中,我們將展示如何用一個暫存器機器實現一個SCHEME直譯器。 為了簡化討論,我們假定我們的暫存器機器有一個列表結構的記憶體,而且 操作列表結構的基本操作是原生的。當我們聚焦於在一個SCHEME直譯器中的控制機制時, 假定如此的記憶

儲存管理技術--連續分配

簡單儲存管理技術:早期的作業系統,只支援單程序,為了實現簡單。在執行程式之前,作業系統必須將待執行的程式全部裝入記憶體。 虛擬儲存技術:現代作業系統,支援多程序併發執行,允許程序裝入部分程式即可以開始執行。其餘部分保留在外存。當執行所需的部分不在記憶體時,中斷程序執行,使之阻塞等待,直到相

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.4 虛擬儲存管理

虛擬儲存管理 背景:固定式、分頁式、分段式儲存一個共同的特點是要求的儲存空間必須足夠大裝載入作業的全部資訊,但由於作業在執行過程中,作業中所有的記憶體不是一次全部使用的,甚至有些記憶體塊根本就不是使用,這樣就造成了記憶體資源的極度浪費 虛擬儲存工作過程:當作業載入到記憶體時

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.3 段頁式管理

分頁式儲存管理 概念:為了避免分割槽式管理產生儲存碎片和管理複雜的問題,分頁式管理把作業的邏輯地址劃分成若干個相等的區域(稱為頁),記憶體空間也劃分成若干個與頁長度相等的區域(也稱為頁幀或塊),然後把頁裝載到頁幀中 特點 頁幀可以是連續的,也可以是不連續的

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.2 分割槽儲存管理

記憶體儲存管理方式分類 分割槽儲存管理方式 分頁式儲存管理方式 分段式儲存管理方式 虛擬儲存器 分割槽儲存管理方式 固定分割槽 分割槽方法:在裝入作業前,記憶體被操作管理員分為N個區,分割槽大小和分割槽數量不可以修改

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.1 地址變換

幾種程式 源程式:使用者用開發語言編寫的程式 編譯程式(彙編程式):專門編譯源程式的程式 目標程式:編譯後的程式 地址 邏輯地址 概念:指的是目標程式使用的地址,也稱為相對地址或者虛擬地址 格式:一般以0為基地址

記一次 JVM 原始碼分析(3.記憶體管理與GC)

簡介 miniJVM 的記憶體管理的實現較為簡單 記憶體分配使用了開源的 ltalloc 庫 GC就是經典的 Mark-Sweep GC 物件分配 物件分配要關注的就兩個過程 New 一個 Java 物件的過程 記憶體塊在堆上分配的過程 物件在 JVM

嵌入式--記憶體分配管理

嵌入式---記憶體分配管理 嵌入式的記憶體一般都非常的小,最進在學習LWIP協議棧的移植,在正點原子的學習資料中找到了許多關於怎麼移植協議棧的東西,其中使用到了記憶體的分配管理技術,能夠高效的管理和使用記憶體,學習之後整理了放在這裡。 一、記憶體分配管理函式 函

Android記憶體優化—Android的記憶體管理方式

記憶體管理機制 從作業系統的角度來說,記憶體就是一塊資料儲存區域,屬於可被作業系統排程的資源。現代多工(程序)的作業系統中,記憶體管理尤為重要,作業系統需要為每一個程序合理的分配記憶體資源,所以可以從兩方面來理解作業系統的記憶體管理機制。 第一:分配機制。為每一個程序分配一個合理的記