1. 程式人生 > >作業系統--記憶體管理之連續分配管理方式

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

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

1單一連續分配

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

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

2固定分割槽分配

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



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

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

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


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


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

3動態分割槽分配

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


圖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。

相關推薦

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

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

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

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

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

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

記憶體管理程序分配記憶體的策略和分配演算法涉及的問題

在為多個程序分配記憶體空間時,由於記憶體的大小固定,所以如何分?分多少?量不夠?等問題都會影響到記憶體的利用效率 涉及三個問題: 1)最小物理塊的確定,一個程序有多個頁組成,在記憶體中完全儲存有可能需要很多個塊,但是在CPU中一次執行一條指令,所以停留在記憶體中的很多頁面都

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

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

Linux軟體安裝與管理apt-get安裝方式

  apt-get是一款適用於Unix和Linux系統的應用程式管理器,基於deb包管理,同yum一樣可以自動處理軟體依賴關係,主要用於Debian和Ubuntu等發行版本。 1 安裝和刪除軟

linux記憶體管理夥伴系統管理

【摘要】本文主要介紹linux系統中,夥伴管理系統是如何處理記憶體頁的.【正文】夥伴系統基本資訊1  夥伴系統由來:linux核心支援申請連續的記憶體頁,但由於記憶體碎片化,可能出現空閒記憶體足夠,但連續頁不足的情況,如此引入夥伴系統,在申請和釋放記憶體過程,儘量保持頁的連續

計算機原理學習(6)-- x86-32 CPU和記憶體管理分頁管理

前言 上一篇我們瞭解了x86-16 CPU計算機的記憶體訪問方式,定址方式,以及基於MS-DOS的應用程式的記憶體佈局。這一篇會主要介紹32位處理器的記憶體訪問,記憶體管理以及應用程式的記憶體佈局。雖然目前64位CPU已經非常普及了,不過相對於32位的記憶體管理方式並沒

linux系統管理存儲管理

加利福尼亞 software university linux 控制器 存儲管理:這裏我們要學介紹兩種磁盤陣列:磁盤陣列是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。一

linux系統管理進程管理

進程管理進程管理的操作命令為了管理這些linux進程,用戶應該能夠: 查看所有運行中的進程 查看進程消耗資源 定位個別進程並且對其執行指定操作 改變進程的優先級 殺死指定進程 限制進程可用的系統資源等linux提供了許多命令來讓用戶來高效掌控上述的操作;1.pstree -

項目後臺管理權限管理(RBAC)

如果 ont logs 權限管理 設計思想 更多 表設計方法 com alt 首先給沒有做過權限的小夥伴普及一下,權限管理主要思想就是采用RBAC(Role-Based Access Control)的設計方法。 在我們的項目中使用的是基本的5張表設計方法,包括(用戶表,用

文件系統管理linux 系統管理

文件 系統 linux文件系統基礎知識http://4001454.blog.51cto.com/3991454/882988 本文出自 “運維自動化” 博客,請務必保留此出處http://shower.blog.51cto.com/4926872/1972139文件系統管理之linux 系統管理

Linux系列教程(十五)——Linux用戶和用戶組管理用戶管理命令

總結 usr 而且 ron 初始 切換 密碼規則 一個 郵箱目錄   上篇博客我們介紹了用戶管理的相關配置文件,包括用戶信息文件/etc/passwd,用戶密碼文件/etc/shadow;然後介紹了用戶組信息文件/etc/group,用戶組密碼文件/etc/gshadow。

Linux系統管理硬盤管理

本地文件 硬件raid disabled tune2fs support lin 重要 溫度 健康狀況 硬盤是計算的重要組成部件之一,硬盤為操作系統提供持久話存儲的功能,在Linux硬盤設備的性能和好壞可能關系到生成線的安全和用戶體驗等等。熟練的掌握硬盤管理相關的信息能讓我

GitLab管理 - Gitlab 使用者管理

1. 移除使用者 (1) 使用管理員登陸Gitlab伺服器 (2) 點選管理區域 (3) 點選Users.   (4)點選【Block User】     2. 新增使用者(1)用root 管理員登陸。(2)點選【管理區域】 (3)點選【New Us

磁碟管理邏輯卷管理(Logical Volume Manager)

LVM是邏輯卷管理(Logical Volume Manager)的簡稱,它是建立在物理儲存裝置之上的一個抽象層,允許你生成邏輯儲存卷,與直接使用物理儲存在管理上相比,提供了更好靈活性。 LVM將儲存虛擬化,使用邏輯卷,你不會受限於物理磁碟的大小,另外,與硬體相關的儲存

資訊系統管理 掙值管理(PV、EV、AC、SV、CV、SPI、CPI)記憶

     掙值管理法中的PV、EV、AC、SV、CV、SPI、CPI這些英文簡寫相信把大家都搞得暈頭轉向的。在掙值管理法中,需要記憶理解的有三個引數:PV、AC、EV。      PV:計劃值,在即

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

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

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

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

linux高階記憶體管理連續記憶體區(分配和釋放)

前面總結了非連續記憶體區域的核心描述,接著看看他的分配和釋放。 一、非連續記憶體區的分配 不管是vmalloc()還是vmalloc_32()等系列的分配函式最後都會呼叫__vmalloc_node()函式實現,直接看這個函式的實現。 * __vmalloc_node