作業系統精髓與設計原理學習筆記七 記憶體管理

2021-06-26 23:43:43 字數 4203 閱讀 9725

在單道程式設計系統中,記憶體被劃分成兩個部分:一部分供作業系統使用(駐留監控程式、核心),一部分供當前正在執行的程式使用。在多道程式設計系統中,必須在記憶體中進一步細分出「使用者」部分,以滿足多個程序的要求。細分的任務由作業系統動態完成,這稱為記憶體管理

有效的記憶體管理在多道程式設計系統中是至關重要的。如果只有少量程序在記憶體中,所有程序大部分時間都用來等待io,這種情況下,處理器也處於空閒狀態。因此,必須有效地分配記憶體來保證有適當數目的就緒程序可以占用這些可用的處理時間。

一、記憶體管理的需求

1 重定位

在多道程式設計系統中,可用的記憶體空間通常被多個程序共享。

通常情況下,程式設計師並不能事先知道在某個程式執行期間會有其他哪些程式駐留在記憶體中。此外還希望通過提供乙個巨大的就緒程序池,能夠把活動程序換入或換出記憶體,以便使處理器的利用率最大。

一旦程式被換出磁碟,當下一次被換入時,需要把程序重定位到記憶體的不同區域。因此,我們事先不知道程式將會被放置到哪個區域,並且我們必須允許程式通過交換技術在記憶體中移動。

作業系統需要知道程序控制資訊和執行棧的位置,以及該程序開始執行程式的入口點。

2 保護

每個程序都應該受到保護,以免被其他程序有意無意地干涉。因此,該程序以外的其他程序中的程式不能未經授權地訪問(程序讀操作或寫操作)該程序的記憶體單元。

通常,使用者程序不能訪問作業系統的任何部分,不論是程式還是資料。並且,乙個程序中的程式通常不能跳轉到另乙個程序中的指令。如果沒有特別的許可,乙個程序中的程式不能訪問其他程序的資料區。

3 共享

任何保護機制都必須具有一定靈活性,以允許多個程序訪問記憶體的同一部分。

例如,如果多個程序正在執行同乙個程式,則允許每個程序訪問該程式的同乙個副本要比讓每個程序都有單獨的副本更有優勢。

合作完成同乙個任務的程序可能需要共享訪問相同的資料結構。

4 邏輯組織

計算機系統中的記憶體總是被組織成線性的位址空間,並且位址空間是由一系列位元組或字組成的。

但這種組織方式並不符合程式構造的典型方法。大多數程式被組織成模組,某些模組式不可修改的,某些模組包含可以修改的資料。

如果作業系統和計算機硬體能夠有效的處理以某種模組的形式組織的使用者程式和資料,則會帶來很多好處。

5 物理組織

系統主要關注的是記憶體和外存之間資訊流的組織。在兩極儲存器間移動資訊的任務應該是一種系統責任,而該任務恰恰就是儲存管理的本質所在。

二、記憶體分割槽

記憶體管理最基本的操作是由處理器把程式裝入記憶體中執行。

典型記憶體管理技術:

1)固定分割槽

2)動態分割槽

3)簡單分頁

4)簡單分段

5)虛擬記憶體分頁

6)虛擬記憶體分段

1 固定分割槽

在大多數記憶體管理方案中,可以假定作業系統佔據了記憶體中的某些固定部分,記憶體的其餘部分可供多個使用者程序使用。

管理使用者記憶體空間的最簡單的方案就是把它分割槽,從而形成若干邊界固定的區域。

對於固定分割槽的兩個難點:

1)程式可能太大而不能放到乙個分割槽中。在這種情況下,程式設計師必須使用覆蓋技術設計程式,使得在任何時候該程式只有一部分需要放到記憶體中。

2)由於被裝入的資料塊小於分割槽大小,從而導致分割槽內部有空間浪費,這種現象稱為內部碎片

對於大小相等的分割槽策略,程序在記憶體中的放置非常簡單。只要存在可用的分割槽,程序就可以裝入分割槽。由於所有的分割槽大小相等,因而使用哪個分割槽都沒有關係。如果所有的分割槽都被處於不可執行狀態的程序所佔據,那麼這些程序中的乙個必須被換出,從而為新程序讓出空間。

對於大小不等的分割槽策略,有兩種方法可以把程序分配到分割槽。最簡單的方法是把美國程序分配到能夠容納它的最小分割槽。在這種情況下,每個分割槽都需要維護乙個排程佇列,用於儲存從這個分割槽換出的程序。

一種更可取的方法是為所有程序只提供乙個佇列。當需要把乙個程序裝入記憶體時,選擇可以容納該程序的最小可用分割槽。如果所有分割槽都已被佔據,則必須進行交換。

2 動態分割槽

對於動態分割槽,分割槽長度和數目是可變的。當程序被裝入記憶體時,系統會給它分配一塊和它所需容量完全相等的記憶體空間,不多也不少。

動態分割槽方法在開始時是很好的,但它最終會導致在記憶體中出現許多小的空洞。隨時間的推移,記憶體中產生了越來越多的碎片,記憶體利用率隨之下降。這種現象稱為外部碎片,指在所有分割槽外的儲存空間變成越來越多的碎片。

克服外部碎片的一種技術室壓縮:作業系統不時地移動程序,使得程序占用的空間連續,並且使所有空閒空間連成一片。

放置演算法:當把乙個程序裝入或換入記憶體時,如果記憶體中有多個足夠大的空閒塊,則作業系統必須確定要為此程序分配哪個空閒塊。可供考慮的有三種放置演算法:最佳適配、首次適配、下次適配。

換置演算法:在使用動態分割槽的多道程式設計系統中,有時候會出現記憶體中的所有程序都處於阻塞態,並且即使進行了壓縮,對乙個新的程序仍沒有足夠的記憶體空間。為了避免由於等待乙個活動程序解除阻塞狀態引起的處理器時間浪費,作業系統將把乙個阻塞的程序換出記憶體,給新程序或處於就緒-掛起態的程序讓出空間。因此,作業系統必須選擇要替換哪個程序。

3 夥伴系統

固定分割槽方案限制了活動程序的數目,並且,如果可用分割槽的大小與程序大小非常不匹配,則記憶體空間的利用率非常低。

動態分割槽的維護特別複雜,並且引入了進行壓縮的額外開銷。

夥伴系統是乙個合理的這種方案,它客服了固定分割槽和可變分割槽方案的缺陷。但在當前的作業系統中,基於分頁和分段機制的虛擬記憶體更先進。

4 重定位

當程序被換入或在記憶體中移動時,指令和資料單元的位置會發生改變。

邏輯位址是指與當前資料在記憶體中的物理分配位址無關的訪問位址,在執行對記憶體的訪問之前必須把它轉換成實體地址。相對位址是邏輯位址的乙個特例,是相對於某些一直點的儲存單元。實體地址或絕對位址是資料在記憶體中的實際位置。

首先,基址暫存器中的值假設相對位址產生乙個絕對位址;然後得到的結果與接線暫存器的值想比較,如果這個位址在界限範圍內,則繼續該指令的執行。

三、分頁

假如記憶體被劃分稱為大小固定相等的塊,且塊相對比較小,每個程序也被分成同樣大小的小塊,那麼程序中稱為的塊可以指定到記憶體中稱為頁框的可用塊。

簡單扉頁類似於固定分割槽,他們的不同之處在於:採用分頁技術的分割槽相當小,乙個程式可以佔據多個分割槽,並且這些分割槽不需要是連續的。

使用頁大小為2的冪的頁的結果是雙重的。首先,邏輯位址方案多程式設計者、彙編器和鏈結是透明的。程式的每個邏輯位址(頁號,偏移量)與它的相對位址是一致的。第二,用硬體實現執行時動態位址轉換的功能相對比較容易。

總之,採用簡單分頁技術,記憶體被分成許多大小相等且很小的頁框,每個程序被劃分成同樣大小的頁;較小的程序需要較少的頁,較大的程序需要較多的頁;當乙個程序被裝入時,它的所有頁都被裝入到可用頁框中,並且建立乙個頁表。

四、分段

採用分段技術,可以把程式和其相關的資料劃分到幾個中。儘管段有乙個最大長度限制,但並不要求所有程式的所有段的長度都相等。和分頁一樣,採用分段技術時的邏輯位址也是由兩部分組成:段號和偏移量。

與動態分割槽不同的是,在分段方案中,乙個程式可以佔據多個分割槽,並且這些分割槽不要求是連續的。分段消除了內部碎片,但是和動態分割槽一樣,它會產生外部碎片,不過由於程序被分成多個小塊,因此外部碎片也會很小。

分頁對程式設計師來說是透明的,而分段通常是可見的,並且作為組織程式和資料的一種方便手段提供給程式設計師。

類似於分頁,在簡單的分段方案中,每個程序都有一段表,系統也會維護乙個記憶體中的空閒塊列表。每個段表象必須給出相應的端在記憶體中的起始位址,還必須指明段的長度,以確保不會使用無效位址。

總之,採用簡單分段技術,程序被劃分成許多段,段的大小不需要相等;當乙個程序被調入時,它的所有段都被裝入記憶體的可用區域,並建立乙個段表。

五、安全問題

最明顯的安全需求是防止程序的記憶體中的內容遭受到未授權訪問。

如果程序未生命共享其他部分記憶體,則其他程式不得訪問這部分記憶體內容。

如果程序生命其某些部分記憶體可以被指定程式共享,那麼作業系統的安全服務必須保證只有這些指定程序可以訪問這部分記憶體。

六、小結

記憶體管理是作業系統中最重要、最複雜的任務之一。記憶體管理把記憶體視為乙個資源,可以分配給多個活動程序,或者由多個活動程序共享。為有效地使用處理器和io裝置,需要在記憶體中保留盡可能多的程序。此外,程式設計師在程序程式開發時最好能不受程式大小的限制。

記憶體管理的基本工具是分頁和分段。採用分頁技術,每個程序被劃分成相對比較小的、大小固定的頁。採用分段技術可以使用大小不同的塊。還可以再乙個單獨的記憶體管理方案中把分頁技術和分段技術結合起來使用。

作業系統精髓與設計原理學習筆記

1.3指令的執行 1.4中斷 1.5儲存器的層次結構 計算機基本構成 處理器 儲存器 輸入 輸出部件 處理器 邏輯處理單元,控制計算機的操作,執行資料處理功能,cpu 記憶體 儲存資料和程式。特點是易失性,關機後,儲存器的內容就會丟失,通常被稱為實儲存器或主儲存器。輸入 輸出模組 在計算機和外部環境...

《作業系統 精髓與設計原理》 作業系統概述

作業系統為應用程式提供與硬體互動的介面,它的主要功能是為執行中的程式動態地分配可共享的系統資源,與之相關的研究主要涉及記憶體 程序及外設的管理和排程。相鄰層次間的介面不斷改變。一方面,原來由作業系統負責的功能被遷移到硬體中,另一方面,一些與應用程式解決的問題無關的程式化函式也被加入作業系統中 作業系...

筆記 《作業系統精髓與設計原理》 4 併發

併發原理 訊號量管程 訊息生產者 消費者 讀者 寫者 死鎖的條件 互斥 乙個資源一次只能給乙個程序使用。其他程序不能訪問已分配給其他程序的資源。占有且等待 乙個程序等待其他程序時,繼續占有已經分配的資源。不可搶占 不能強行搶占程序已占有的資源。迴圈等待。1 3條件是死鎖存在的必要條件。加上條件4才是...