http://blog.sina.com.cn/s/blog_6f5e19860102vlv0.htmlhtml
存儲管理的基本原理算法
內存管理方法編程
內存管理主要包括內存分配和回收、地址變換、內存擴充、內存共享和保護等功能。數據結構
下面主要介紹連續分配存儲管理、覆蓋與交換技術以及頁式與段式存儲管理等基本概念和原理。併發
1.連續分配存儲管理方式app
連續分配是指爲一個用戶程序分配連續的內存空間。連續分配有單一連續存儲管理和分區式儲管理兩種方式。函數
(1)單一連續存儲管理性能
在這種管理方式 中,內存被分爲兩個區域:系統區和用戶區。應用程序裝入到用戶區,可以使用用戶區所有空間。其特色是,最簡單,適用於單用戶、單任務的操做系統。CP/M和 DOS 2.0如下就是採用此種方式。這種方式的最大優勢就是易於管理。但也存在着一些問題和不足之處,例如對要求內存空間少的程序,形成內存浪費;程序所有裝 入,使得不多使用的程序部分也佔用—定數量的內存。操作系統
(2)分區式存儲管理htm
爲了支持多道程序 系統和分時系統,支持多個程序併發執行,引入了分區式存儲管理。分區式存儲管理是把內存分爲一些大小相等或不等的分區,操做系統佔用其中一個分區,其他的 分區由應用程序使用,每一個應用程序佔用一個或幾個分區。分區式存儲管理雖然能夠支持併發,但難以進行內存分區的共享。
分區式存儲管理引 人了兩個新的問題:內碎片和外碎片。前者是佔用分區內未被利用的空間,後者是佔用分區之間難以利用的空閒分區(一般是小空閒分區)。爲實現分區式存儲管 理,操做系統應維護的數據結構爲分區表或分區鏈表。表中各表項通常包括每一個分區的起始地址、大小及狀態(是否已分配)。
分區式存儲管理常 採用的一項技術就是內存緊縮(compaction):將各個佔用分區向內存一端移動,而後將各個空閒分區合併成爲一個空閒分區。這種技術在提供了某種程 度上的靈活性的同時,也存在着一些弊端,例如:對佔用分區進行內存數據搬移佔用CPU~t寸間;若是對佔用分區中的程序進行「浮動」,則其重定位須要硬件 支持。
1)固定分區(nxedpartitioning)。
固定式分區的特色 是把內存劃分爲若干個固定大小的連續分區。分區大小能夠相等:這種做法只適合於多個相同程序的併發執行(處理多個類型相同的對象)。分區大小也能夠不等: 有多個小分區、適量的中等分區以及少許的大分區。根據程序的大小,分配當前空閒的、適當大小的分區。這種技術的優勢在於,易於實現,開銷小。缺點主要有兩 個:內碎片形成浪費;分區總數固定,限制了併發執行的程序數目。
2)動態分區(dynamic partitioning)。
動態分區的特色是 動態建立分區:在裝入程序時按其初始要求分配,或在其執行過程當中經過系統調用進行分配或改變分區大小。與固定分區相比較其優勢是:沒有內碎片。但它卻引入 了另外一種碎片——外碎片。動態分區的分區分配就是尋找某個空閒分區,其大小需大於或等於程序的要求。如果大於要求,則將該分區分割成兩個分區,其中一個分 區爲要求的大小並標記爲「佔用」,而另外一個分區爲餘下部分並標記爲「空閒」。分區分配的前後次序一般是從內存低端到高端。動態分區的分區釋放過程當中有一個 要注意的問題是,將相鄰的空閒分區合併成一個大的空閒分區。
下面列出了幾種經常使用的分區分配算法:
首先適配法(nrst-fit):按分區在內存的前後次序從頭查找,找到符合要求的第一個分區進行分配。該算法的分配和釋放的時間性能較好,較大的空閒分區能夠被保留在內存高端。但隨着低端分區不斷劃分會產生較多小分區,每次分配時查找時間開銷便會增大。
下次適配法(next-fit):按分區在內存的前後次序,從上次分配的分區起查找(到最後{區時再從頭開始},找到符合要求的第一個分區進行分配。該算法的分配和釋放的時間性能較好,使空閒分區分佈得更均勻,但較大空閒分區不易保留。
最佳適配法(best-fit):按分區在內存的前後次序從頭查找,找到其大小與要求相差最小的空閒分區進行分配。從個別來看,外碎片較小;但從總體來看,會造成較多外碎片優勢是較大的空閒分區能夠被保留。
最壞適配法(worst- fit):按分區在內存的前後次序從頭查找,找到最大的空閒分區進行分配。基本不留下小空閒分區,不易造成外碎片。但因爲較大的空閒分區不被保留,當對內存需求較大的進程須要運行時,其要求不易被知足。
2.覆蓋和交換技術
引入覆蓋 (overlay)技術的目標是在較小的可用內存中運行較大的程序。這種技術經常使用於多道程序系統之中,與分區式存儲管理配合使用。覆蓋技術的原理很簡單, 一個程序的幾個代碼段或數據段,按照時間前後來佔用公共的內存空間。將程序必要部分(經常使用功能)的代碼和數據常駐內存;可選部分(不經常使用功能)平時存放在 外存(覆蓋文件)中,在須要時才裝入內存。不存在調用關係的模塊沒必要同時裝入到內存,從而能夠相互覆蓋。覆蓋技術的缺點是編程時必須劃分程序模塊和肯定程 序模塊之間的覆蓋關係,增長編程複雜度;從外存裝入覆蓋文件,以時間延長換取空間節省。覆蓋的實現方式有兩種:以函數庫方式實現或操做系統支持。
交換 (swapping)技術在多個程序併發執行時,能夠將暫時不能執行的程序送到外存中,從而得到空閒內存空間來裝入新程序,或讀人保存在外存中而處於就緒 狀態的程序。交換單位爲整個進程的地址空間。交換技術經常使用於多道程序系統或小型分時系統中,與分區式存儲管理配合使用又稱做「對換」或「滾進/滾出」 (roll-in/roll-out)。其優勢之一是增長併發運行的程序數目,並給用戶提供適當的響應時間;與覆蓋技術相比交換技術另外一個顯著的優勢是不 影響程序結構。交換技術自己也存在着不足,例如:對換人和換出的控制增長處理器開銷;程序整個地址空間都進行對換,沒有考慮執行過程當中地址訪問的統計特 性。
3.頁式和段式存儲管理
在前面的幾種存儲 管理方法中,爲進程分配的空間是連續的,使用的地址都是物理地址。若是容許將一個進程分散到許多不連續的空間,就能夠避免內存緊縮,減小碎片。基於這一思 想,經過引入進程的邏輯地址,把進程地址空間與實際存儲空間分離,增長存儲管理的靈活性。地址空間和存儲空間兩個基本概念的定義以下:
地址空間:將源程序通過編譯後獲得的目標程序,存在於它所限定的地址範圍內,這個範圍稱爲地址空間。地址空間是邏輯地址的集合。
存儲空間:指主存中一系列存儲信息的物理單元的集合,這些單元的編號稱爲物理地址存儲空間是物理地址的集合。
根據分配時所採用的基本單位不一樣,可將離散分配的管理方式分爲如下三種
段式存儲管理和段頁式存儲管理。其中段頁式存儲管理是前兩種結合的產物。
(1)頁式存儲管理
1)基本原理。將 程序的邏輯地址空間劃分爲固定大小的頁(page),而物理內存劃分爲一樣大小的頁框(pageframe)。程序加載時,可將任意一頁放人內存中任意一 個頁框,這些頁框沒必要連續,從而實現了離散分配。該方法須要CPU的硬件支持,來實現邏輯地址和物理地址之間的映射。在頁式存儲管理方式中地址結構由兩部 構成,前一部分是頁號,後一部分爲頁內地址,如圖4-2所示。
這種管理方式的優 點是,沒有外碎片,每一個內碎片不超過頁大比前面所討論的幾種管理方式的最大進步是,一個程序沒必要連續存放。這樣就便於改變程序佔用空間的大小(主要指隨着 程序運行,動態生成的數據增多,所要求的地址空間相應增加)。缺點是仍舊要求程序所有裝入內存,沒有足夠的內存,程序就不能執行。
2)頁式管理的數據結構。在頁式系統中進程創建時,操做系統爲進程中全部的頁分配頁框。當進程撤銷時收回全部分配給它的頁框。在程序的運行期間,若是容許進程動態地申請空間,操做系統還要爲進程申請的空間分配物理頁框。操做系統爲了完成這些功能,必須記錄系統內存中
實際的頁框使用狀況。操做系統還要在進程切換時,正確地切換兩個不一樣的進程地址空間到物理內存空間的映射。這就要求操做系統要記錄每一個進程頁表的相關信息。爲了完成上述的功能,—個頁式系統中,通常要採用以下的數據結構。
進程頁表:完成邏輯頁號(本進程的地址空間)到物理頁面號(實際內存空間)的映射。
每一個進程有一個頁表,描述該進程佔用的物理頁面及邏輯排列順序。
物理頁面表:整個系統有一個物理頁面表,描述物理內存空間的分配使用情況,其數據結構可採用位示圖和空閒頁鏈表。
請求表:整個系統有一個請求表,描述系統內各個進程頁表的位置和大小,用於地址轉換也能夠結合到各進程的PCB(進程控制塊)裏。
3)頁式管理地址變換