日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

11 操作系统第三章 内存管理 内存的基本知识 内存管理 内存空间扩充 连续分配管理方式

發(fā)布時(shí)間:2024/7/5 windows 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 11 操作系统第三章 内存管理 内存的基本知识 内存管理 内存空间扩充 连续分配管理方式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

      • 1 內(nèi)存概念
          • 1.1 內(nèi)存作用
          • 1.2 邏輯地址VS物理地址
          • 1.3 裝入的三種方式
            • 1.3.1 絕對(duì)裝入
            • 1.3.2 可重定位裝入
            • 1.3.3 動(dòng)態(tài)重定位裝入
          • 1.4 鏈接的三種方式
            • 1.4.1 靜態(tài)鏈接
            • 1.4.2 裝入時(shí)動(dòng)態(tài)鏈接
            • 1.4.3 運(yùn)行時(shí)動(dòng)態(tài)鏈接
          • 1.5 內(nèi)存的基礎(chǔ)知識(shí)小結(jié)
      • 2 內(nèi)存管理
          • 2.1 內(nèi)存管理的任務(wù)
          • 2.2 內(nèi)存保護(hù)的兩種方法
          • 2.3 內(nèi)存管理小結(jié)
      • 3 內(nèi)存空間擴(kuò)充
          • 3.1 內(nèi)存空間擴(kuò)充之覆蓋技術(shù)
          • 3.2 內(nèi)存空間擴(kuò)充之交換技術(shù)
          • 3.3 覆蓋與交換技術(shù)小結(jié)
      • 4 內(nèi)存空間分配
          • 4.1 單一連續(xù)分配
          • 4.2 固定分區(qū)分配
          • 4.3 動(dòng)態(tài)分區(qū)分配
          • 4.4 連續(xù)分配管理小結(jié)
          • 4.5 動(dòng)態(tài)分區(qū)分配算法
            • 4.5.1 首次適應(yīng)算法
            • 4.5.2 最佳適應(yīng)算法
            • 4.5.3 最壞(大)適應(yīng)算法
            • 4.5.4 鄰近適應(yīng)算法
            • 4.5.5 動(dòng)態(tài)分區(qū)分配算法小結(jié)

1 內(nèi)存概念

1.1 內(nèi)存作用

內(nèi)存可存放數(shù)據(jù)。程序執(zhí)行前需要先放到內(nèi)存中才能被CPU處理一一緩和CPU與硬盤(pán)之間的速度矛盾

思考:在多道程序環(huán)境下,系統(tǒng)中會(huì)有多個(gè)程序并發(fā)執(zhí)行,也就是說(shuō)會(huì)有多個(gè)程序的數(shù)據(jù)需要同時(shí)放到內(nèi)存中。那么,如何區(qū)分各個(gè)程序的數(shù)據(jù)是放在什么地方的呢?
方案:給內(nèi)存的存儲(chǔ)單元編地址

內(nèi)存地址相當(dāng)于酒店旅館中的小房間,酒店管理者為了便于管理每個(gè)房間,采取給每個(gè)房間編號(hào)
內(nèi)存中也有一個(gè)一個(gè)的“小房間”,每個(gè)小房間就是一 個(gè)“存儲(chǔ)單元”


如果計(jì)算機(jī)“按字節(jié)編址”, 則每個(gè)存儲(chǔ)單元大小為1字節(jié),即1B,即8個(gè)二進(jìn)制位
如果字長(zhǎng)為16位的計(jì)算機(jī) “按字編址”,則每個(gè)存儲(chǔ)單元大小為1個(gè)字;每個(gè)字的大小為16個(gè)二進(jìn)制位
存儲(chǔ)單元大小由計(jì)算機(jī)按字編址還是按字節(jié)編址來(lái)確定

一臺(tái)手機(jī)/電腦有4GB內(nèi)存,是指該內(nèi)存中可以存放4X2 30個(gè)字節(jié)。

如果是按字節(jié)編址的 話,也就是有4X2 30=232個(gè)“小房間”
這么多“小房間”,需要232個(gè)地址才能一一標(biāo)識(shí),所以地址需要用32個(gè)二進(jìn)制位來(lái)表示(0~232-1)
210=1K (千)
220=1M (兆,百萬(wàn))
230=1G (十億,千兆)
可以通過(guò)內(nèi)存的大小,讓我們確定地址長(zhǎng)度應(yīng)該是多少(即要多少個(gè)二進(jìn)制位才能表示相應(yīng)數(shù)目的存儲(chǔ)單元)

1.2 邏輯地址VS物理地址

實(shí)際生活中的例子:

宿舍四個(gè)人一起出去旅行,四個(gè)人的學(xué)號(hào)尾號(hào)分別是0、1、2、3。
住酒店時(shí)酒店給你們安排了4個(gè)房號(hào)相連的房間。四個(gè)人按學(xué)號(hào)遞增次序入住房間。比如0、1、2、3號(hào)同學(xué)分別入住了5、6、7、8號(hào)房間。
四個(gè)人的編號(hào)0、1、2、3其實(shí)是一個(gè)“相對(duì)位置”,而各自入住的房間號(hào)是一個(gè)“絕對(duì)位置”。

只要知道0號(hào)同學(xué)住的是房號(hào)為N的房間,那么M號(hào)同學(xué)的房號(hào)一定是N+M。

指令中的地址也可以采用這種思想。編譯時(shí)產(chǎn)生的指令只關(guān)心“相對(duì)地址”,實(shí)際放入內(nèi)存中時(shí)再想辦法根據(jù)起始位置得到“絕對(duì)地址”。

相對(duì)地址又稱邏輯地址,絕對(duì)地址又稱物理地址。

從寫(xiě)程序到程序運(yùn)行:

  • 編譯:由編譯程序?qū)⒂脩粼创a編譯成若干個(gè)目標(biāo)模塊(編譯就是把高級(jí)語(yǔ)言翻譯為機(jī)器語(yǔ)言)
  • 鏈接:由鏈接程序?qū)⒕幾g后形成的一組目標(biāo)模塊,以及所需庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊
  • 裝入(裝載):由裝入程序?qū)⒀b入模塊裝入內(nèi)存運(yùn)行
  • 程序經(jīng)過(guò)編譯、鏈接后生成的指令中指明的是邏輯地址(相對(duì)地址),即:相對(duì)于進(jìn)程的起始地址而言的地址

    如何將指令中的邏輯地址轉(zhuǎn)換為物理地址?

    策略:三種裝入方式

  • 絕對(duì)裝入
  • 可重定位裝入(靜態(tài)重定位)
  • 動(dòng)態(tài)運(yùn)行時(shí)裝入(動(dòng)態(tài)重定位)
  • 1.3 裝入的三種方式
    1.3.1 絕對(duì)裝入

    絕對(duì)裝入:在編譯時(shí),如果知道程序?qū)⒎诺絻?nèi)存中的哪個(gè)位置,編譯程序?qū)a(chǎn)生絕對(duì)地址的目標(biāo)代碼。 裝入程序按照裝入模塊中的地址,將程序和數(shù)據(jù)裝入內(nèi)存。

    編譯、鏈接后得到的裝入模塊的指令直接就使用了絕對(duì)地址。

    絕對(duì)裝入只適用于單道程序環(huán)境。 程序中使用的絕對(duì)地址,可在編譯或匯編時(shí)給出,也可由程序 員直接賦予。通常情況下都是編譯或匯編時(shí)再轉(zhuǎn)換為絕對(duì)地址。

    1.3.2 可重定位裝入

    靜態(tài)重定位:又稱可重定位裝入。編譯、鏈接后的裝入模塊的地址都是從0開(kāi)始的,指令中使用的地址、數(shù)據(jù)存放的地址都是相對(duì)于起始地址而言的邏輯地址。可根據(jù)內(nèi)存的當(dāng)前情況,將裝入模塊裝入到內(nèi)存的適當(dāng)位置。裝入時(shí)對(duì)地址進(jìn)行“重定位”,將邏輯地址變換為物理地址(地址變換是在裝入時(shí)一次完成的)。

    靜態(tài)重定位的特點(diǎn)是在一個(gè)作業(yè)裝入內(nèi)存時(shí),必須分配其要求的全部?jī)?nèi)存空間,如果沒(méi)有足夠的內(nèi)存,就不能裝入該作業(yè)。 作業(yè)一旦進(jìn)入內(nèi)存后,在運(yùn)行期間就不能再移動(dòng),也不能再申請(qǐng)內(nèi)存空間。

    1.3.3 動(dòng)態(tài)重定位裝入

    動(dòng)態(tài)重定位:又稱動(dòng)態(tài)運(yùn)行時(shí)裝入。編譯、鏈接后的裝入模塊的地址都是從0開(kāi)始的。裝入程序把裝 入模塊裝入內(nèi)存后,并不會(huì)立即把邏輯地址轉(zhuǎn)換為物理地址,而是把地址轉(zhuǎn)換推遲到程序真正要執(zhí)行 時(shí)才進(jìn)行。因此裝入內(nèi)存后所有的地址依然是邏輯地址。這種方式需要一個(gè)重定位寄存器的支持。

    1.4 鏈接的三種方式
    1.4.1 靜態(tài)鏈接
  • 靜態(tài)鏈接:在程序運(yùn)行之前, 先將各目標(biāo)模塊及它們所需的庫(kù)函數(shù)連接成一個(gè)完整的可執(zhí)行文件(裝入模塊), 之后不再拆開(kāi)。
  • 1.4.2 裝入時(shí)動(dòng)態(tài)鏈接
  • 裝入時(shí)動(dòng)態(tài)鏈接:將各目標(biāo)模塊裝入內(nèi)存時(shí),邊裝入邊鏈接的鏈接方式。
  • 1.4.3 運(yùn)行時(shí)動(dòng)態(tài)鏈接
  • 運(yùn)行時(shí)動(dòng)態(tài)鏈接:在程序執(zhí)行中需要該目標(biāo)模塊時(shí),才對(duì)它進(jìn)行鏈接。其優(yōu)點(diǎn)是便于修改和更新,便于實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享。
  • 1.5 內(nèi)存的基礎(chǔ)知識(shí)小結(jié)

    2 內(nèi)存管理

    2.1 內(nèi)存管理的任務(wù)

    操作系統(tǒng)作為系統(tǒng)資源的管理者,當(dāng)然也需要對(duì)內(nèi)存進(jìn)行管理,要管些什么呢?

    1.操作系統(tǒng)負(fù)責(zé)內(nèi)存空間的分配與回收

  • 操作系統(tǒng)需要提供某種技術(shù)從邏輯上對(duì)內(nèi)存空間進(jìn)行擴(kuò)充
    游戲GTA的大小超過(guò)60GB,按理來(lái)說(shuō)這個(gè)游戲程序運(yùn)行之前需要把60GB數(shù)據(jù)全部放入內(nèi)存。然而,實(shí)際我的電腦內(nèi)存才12GB,但為什么這個(gè)游戲可以順利運(yùn)行呢?
    ——虛擬技術(shù)(操作系統(tǒng)的虛擬性)
  • 操作系統(tǒng)需要提供地址轉(zhuǎn)換功能,負(fù)責(zé)程序的邏輯地址與物理地址的轉(zhuǎn)換
    為了使編程更方便,程序員寫(xiě)程序時(shí)應(yīng)該只需要關(guān)注指令、數(shù)據(jù)的邏輯地址。而邏輯地址到物理地址的轉(zhuǎn)換(這個(gè)過(guò)程稱為地址重定位)應(yīng)該由操作系統(tǒng)負(fù)責(zé),這樣就保證了程序員寫(xiě)程序時(shí)不需要關(guān)注物理內(nèi)存的實(shí)際情況。
    三種裝入方式實(shí)現(xiàn)邏輯地址與物理地址的轉(zhuǎn)換:
  • 操作系統(tǒng)需要提供內(nèi)存保護(hù)功能。保證各進(jìn)程在各自存儲(chǔ)空間內(nèi)運(yùn)行,互不干擾
    使得各個(gè)進(jìn)程只能訪問(wèn)自己的內(nèi)存空間
  • 2.2 內(nèi)存保護(hù)的兩種方法

    方法一:在CPU中設(shè)置一對(duì)上、下限寄存器,存放進(jìn)程的上、下限地址。進(jìn)程的指令要訪問(wèn)某個(gè)地址時(shí),CPU檢查是否越界。

    方法二:采用重定位寄存器(又稱基址寄存器)和界地址寄存器(又稱限長(zhǎng)寄存器)進(jìn)行越界檢查。
    重定位寄存器中存放的是進(jìn)程的起始物理地址。界地址寄存器中存放的是進(jìn)程的最大邏輯地址。

    2.3 內(nèi)存管理小結(jié)

    3 內(nèi)存空間擴(kuò)充

    3.1 內(nèi)存空間擴(kuò)充之覆蓋技術(shù)

    引入覆蓋技術(shù),用來(lái)解決“程序大小超過(guò)物理內(nèi)存總和”的問(wèn)題

    覆蓋技術(shù)的思想:

    將程序分為多個(gè)段(多個(gè)模塊)。 常用的段常駐內(nèi)存,不常用的段在需要時(shí)調(diào)入內(nèi)存。
    內(nèi)存中分為一個(gè)“固定區(qū)”和若干個(gè)“覆蓋區(qū)”。
    需要常駐內(nèi)存的段放在“固定區(qū)”中,調(diào)入后就不再調(diào)出(除非運(yùn)行結(jié)束)
    不常用的段放在“覆蓋區(qū)”,需要用到時(shí)調(diào)入內(nèi)存, 用不到時(shí)調(diào)出內(nèi)存

    由圖可見(jiàn),未使用覆蓋技術(shù)時(shí),程序執(zhí)行需要使用8K+8K+10K+12K+4K+10K=52K的內(nèi)存空間
    采用覆蓋技術(shù)后,需要8K+10K+12K=30K的內(nèi)存空間

    必須由程序員聲明覆蓋結(jié)構(gòu),操作系統(tǒng)完成自動(dòng)覆蓋。
    缺點(diǎn):對(duì)用戶不透明,增加了用戶編程負(fù)擔(dān)。 覆蓋技術(shù)只用于早期的操作系統(tǒng)中,現(xiàn)在已成為歷史。

    3.2 內(nèi)存空間擴(kuò)充之交換技術(shù)

    交換(對(duì)換)技術(shù)的設(shè)計(jì)思想:內(nèi)存空間緊張時(shí),系統(tǒng)將內(nèi)存中某些進(jìn)程暫時(shí)換出外存,把外存中某些已具備運(yùn)行條件的進(jìn)程換入內(nèi)存(進(jìn)程在內(nèi)存與磁盤(pán)間動(dòng)態(tài)調(diào)度)
    暫時(shí)換出外存等待的進(jìn)程狀態(tài)為掛起狀態(tài)(掛起態(tài),suspend)
    掛起態(tài)又可以進(jìn)一步細(xì)分為就緒掛起、阻塞掛起兩種狀態(tài)
    .
    中級(jí)調(diào)度(內(nèi)存調(diào)度),就是要決定將哪個(gè)處于掛起狀態(tài)的進(jìn)程重新調(diào)入內(nèi)存。

    交換技術(shù)面臨的問(wèn)題:

  • 應(yīng)該在外存(磁盤(pán))的什么位置保存被換出的進(jìn)程?
  • 什么時(shí)候應(yīng)該交換?
  • 應(yīng)該換出哪些進(jìn)程?
  • 具有對(duì)換功能的操作系統(tǒng)中,通常把磁盤(pán)空間分為文件區(qū)和對(duì)換區(qū)兩部分。

    (1)文件區(qū)主要用于存放文件,主要追求存儲(chǔ)空間的利用率,因此對(duì)文件區(qū)空間的管理采用離散分配方式;
    (2)對(duì)換區(qū)空間只占磁盤(pán)空間的小部分,被換出的進(jìn)程數(shù)據(jù)就存放在對(duì)換區(qū)。由于對(duì)換的速度直接影響到系統(tǒng)的整體速度,因此對(duì)換區(qū)空間的管理主要追求換入換出速度,因此通常對(duì)換區(qū)采用連續(xù)分配方式。
    (3)總之,對(duì)換區(qū)的I/O速度比文件區(qū)的更快。
  • 交換通常在許多進(jìn)程運(yùn)行且內(nèi)存吃緊時(shí)進(jìn)行,而系統(tǒng)負(fù)荷降低就暫停。
    例如:在發(fā)現(xiàn)許多進(jìn)程運(yùn)行時(shí)經(jīng)常發(fā)生缺頁(yè),就說(shuō)明內(nèi)存緊張,此時(shí)可以換出一些進(jìn)程; 如果缺頁(yè)率明顯下降,就可以暫停換出。
  • 可優(yōu)先換出阻塞進(jìn)程;可換出優(yōu)先級(jí)低的進(jìn)程;為了防止優(yōu)先級(jí)低的進(jìn)程在被調(diào) 入內(nèi)存后很快又被換出,有的系統(tǒng)還會(huì)考慮進(jìn)程在內(nèi)存的駐留時(shí)間…
  • 注意:雖然交換技術(shù)會(huì)將內(nèi)存中某些進(jìn)程暫時(shí)換出外存,但進(jìn)程的PCB會(huì)常駐內(nèi)存,不會(huì)被換出外存

    3.3 覆蓋與交換技術(shù)小結(jié)

    4 內(nèi)存空間分配

    內(nèi)存空間分配可分為連續(xù)分配管理方式和非連續(xù)分配管理方式

    連續(xù)分配:指為用戶進(jìn)程分配的必須是一個(gè)連續(xù)的內(nèi)存空間

    4.1 單一連續(xù)分配

    在單一連續(xù)分配方式中,內(nèi)存被分為系統(tǒng)區(qū)用戶區(qū)
    系統(tǒng)區(qū)通常位于內(nèi)存的低地址部分,用于存放操作系統(tǒng)相關(guān)數(shù)據(jù);用戶區(qū)用于存放用戶進(jìn)程相關(guān)數(shù)據(jù)。
    單一連續(xù)分配 內(nèi)存中只能有一道用戶程序,用戶程序獨(dú)占整個(gè)用戶區(qū)空間。

    優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單;無(wú)外部碎片;可以采用覆蓋技術(shù)擴(kuò)充 內(nèi)存;不一定需要采取內(nèi)存保護(hù)(eg:早期的PC操作系統(tǒng)MS-DOS)。
    缺點(diǎn):只能用于單用戶、單任務(wù)的操作系統(tǒng)中;有內(nèi)部碎片;存儲(chǔ)器利用率極低。

    4.2 固定分區(qū)分配

    20世紀(jì)60年代出現(xiàn)了支持多道程序的系統(tǒng),為了能在內(nèi)存中裝入多道程序,且這些程序之間又不會(huì)相互干擾,于是將整個(gè)用戶空間劃分為若干個(gè)固定大小的分區(qū),在 每個(gè)分區(qū)中只裝入一道作業(yè),這樣就形成了最早的、最 簡(jiǎn)單的一種可運(yùn)行多道程序的內(nèi)存管理方式。

    固定分區(qū)分配可分為分區(qū)大小相等、分區(qū).大小不等兩種類(lèi)型

    分區(qū)大小相等:缺乏靈活性,但是很適合用于用一臺(tái)計(jì) 算機(jī)控制多個(gè)相同對(duì)象的場(chǎng)合(比如:鋼鐵廠有n個(gè)相 同的煉鋼爐,就可把內(nèi)存分為n個(gè)大小相等的區(qū)域存放 n個(gè)煉鋼爐控制程序)
    分區(qū)大小不等:增加了靈活性,可以滿足不同大小的進(jìn) 程需求。根據(jù)常在系統(tǒng)中運(yùn)行的作業(yè)大小情況進(jìn)行劃分 (比如:劃分多個(gè)小分區(qū)、適量中等分區(qū)、少量大分區(qū))

    操作系統(tǒng)需要建立一個(gè)數(shù)據(jù)結(jié)構(gòu)——分區(qū)說(shuō)明表,來(lái)實(shí)現(xiàn)各個(gè)分區(qū)的分配與回收。每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)分區(qū),通常按分區(qū)大小排列。每個(gè)表項(xiàng)包括對(duì)應(yīng)分區(qū)的 大小、起始地址、狀態(tài)(是否已分配)。

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    128未分配
    2210未分配
    3412已分配
    ····························
  • 用數(shù)據(jù)結(jié)構(gòu) 的數(shù)組(或 鏈表)即可 表示這個(gè)表
    當(dāng)某用戶程序要裝入內(nèi)存時(shí),由操作系統(tǒng)內(nèi)核程序根據(jù)用戶程序大小檢索該表, 從中找到一個(gè)能滿足大小的、未分配的分區(qū),將之分配給該程序,然后修改狀 態(tài)為“已分配”。
  • 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,無(wú)外部碎片。
    缺點(diǎn):a.當(dāng)用戶程序太大時(shí),可能所有的分區(qū)都不能滿足需求,此時(shí)不得不采用覆蓋技術(shù)來(lái)解決,但這又會(huì)降低性能; b.會(huì)產(chǎn)生內(nèi)部碎片,內(nèi)存利用率低。

    4.3 動(dòng)態(tài)分區(qū)分配

    動(dòng)態(tài)分區(qū)分配又稱為可變分區(qū)分配。這種分配方式不會(huì)預(yù)先劃分內(nèi)存分區(qū),而是在進(jìn)程裝入內(nèi)存時(shí), 根據(jù)進(jìn)程的大小動(dòng)態(tài)地建立分區(qū),并使分區(qū)的大小正好適合進(jìn)程的需要。因此系統(tǒng)分區(qū)的大小和數(shù)目是可變的。

    動(dòng)態(tài)分區(qū)分配核心問(wèn)題:
    1.系統(tǒng)要用什么樣的數(shù)據(jù)結(jié)構(gòu)記錄內(nèi)存的使用情況?
    2.當(dāng)很多個(gè)空閑分區(qū)都能滿足需求時(shí),應(yīng)該選擇哪個(gè)分區(qū)進(jìn)行分配?
    3.如何進(jìn)行分區(qū)的分配與回收操作?

  • 系統(tǒng)要用什么樣的數(shù)據(jù)結(jié)構(gòu)記錄內(nèi)存的使用情況?
    兩種常用的數(shù)據(jù)結(jié)構(gòu):空閑分區(qū)表和空閑分區(qū)鏈
    每一時(shí)刻系統(tǒng)分配如下:

    采用空閑分區(qū)表:
    空閑分區(qū)表:每 個(gè)空閑分區(qū)對(duì)應(yīng) 一個(gè)表項(xiàng)。表項(xiàng) 中包含分區(qū)號(hào)、 分區(qū)大小、分區(qū) 起始地址等信息
  • 分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    1208空閑
    21032空閑
    3460空閑

    空閑分區(qū)鏈:
    空閑分區(qū)鏈:每個(gè)分區(qū)的起始部分和末尾部分分別設(shè)置前向指 針和后向指針。起始部分處還可記錄分區(qū)大小等信息


  • 當(dāng)很多個(gè)空閑分區(qū)都能滿足需求時(shí),應(yīng)該選擇哪個(gè)分區(qū)進(jìn)行分配?

  • 現(xiàn)有進(jìn)程5(4MB)調(diào)入內(nèi)存,應(yīng)該用最大的分區(qū)進(jìn)行分配?還是用最小的分區(qū)進(jìn)行分配?又或是用地址最低的部分進(jìn)行分配?
    把一個(gè)新作業(yè)裝入內(nèi)存時(shí),須按照一定的動(dòng)態(tài)分區(qū)分配算法,從空閑分區(qū)表(或空閑分區(qū)鏈)中選出一個(gè)分區(qū)分配給該作業(yè)。


  • 如何進(jìn)行分區(qū)的分配與回收操作? 假設(shè)系統(tǒng)采用的數(shù)據(jù)結(jié)構(gòu)是“空閑分區(qū)表”… 如 何 分 配 ?
  • 情況一:回收區(qū)的后面有一個(gè)相鄰的空閑分區(qū)

    此時(shí)分區(qū)表是

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    11032空閑
    2460空閑

    假設(shè)此時(shí)進(jìn)程4運(yùn)行結(jié)束,將進(jìn)程4占用的4M內(nèi)存空間回收,而后面有一塊10M的相鄰空閑區(qū)

    此時(shí)空閑分區(qū)表:

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    11428空閑
    2460空閑

    兩個(gè)相鄰的空閑分區(qū)合并為一個(gè)

    情況二:回收區(qū)的前面有一個(gè)相鄰的空閑分區(qū)

    此時(shí)空閑分區(qū)表:

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    1208空閑
    21032空閑

    假設(shè)此時(shí)進(jìn)程3運(yùn)行結(jié)束,將進(jìn)程3占用的18M內(nèi)存空間回收,而前面有一塊10M的相鄰空閑區(qū)

    此時(shí)空閑分區(qū)表:

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    1208空閑
    22832空閑

    兩個(gè)相鄰的空閑分區(qū)合并為一個(gè)

    情況三:回收區(qū)的前、后各有一個(gè)相鄰的空閑分區(qū)


    此時(shí)空閑分區(qū)表:

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    1208空閑
    21032空閑
    3460空閑

    假設(shè)此時(shí)進(jìn)程4運(yùn)行結(jié)束,將進(jìn)程4占用的4M內(nèi)存空間回收,而后面有一塊10M的相鄰空閑區(qū),前面有一塊20M的內(nèi)存空間

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    1348空閑
    2460空閑

    三個(gè)相鄰的空閑分區(qū)合并為一個(gè)

    情況四:回收區(qū)的前、后都沒(méi)有相鄰的空閑分區(qū)


    此時(shí)空閑分區(qū)表:

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    1460空閑

    假設(shè)此時(shí)進(jìn)程2運(yùn)行結(jié)束,將進(jìn)程2占用的14M內(nèi)存空間回收,而后面有一塊4M的不相鄰空閑區(qū)

    此時(shí)空閑分區(qū)表:

    分區(qū)號(hào)大小(MB)起始地址(M)狀態(tài)
    11428空閑
    2460空閑

    注:各表項(xiàng)的順序不一定按照地址遞增順序排列,具體的排列方式需要依據(jù)動(dòng)態(tài)分區(qū)分配算法來(lái)確定。

    動(dòng)態(tài)分區(qū)分配又稱為可變分區(qū)分配。這種分配方式不會(huì)預(yù)先劃分內(nèi)存分區(qū),而是在進(jìn)程裝入內(nèi)存時(shí), 根據(jù)進(jìn)程的大小動(dòng)態(tài)地建立分區(qū),并使分區(qū)的大小正好適合進(jìn)程的需要。因此系統(tǒng)分區(qū)的大小和數(shù)目是可變的。

    動(dòng)態(tài)分區(qū)分配沒(méi)有內(nèi)部碎片,但是有外部碎片。
    內(nèi)部碎片,分配給某進(jìn)程的內(nèi)存區(qū)域中,如果有些部分沒(méi)有用上。 外部碎片,是指內(nèi)存中的某些空閑分區(qū)由于太小而難以利用。

    如果內(nèi)存中空閑空間的總和本來(lái)可以滿足某進(jìn)程的要求, 但由于進(jìn)程需要的是一整塊連續(xù)的內(nèi)存空間,因此這些 “碎片”不能滿足進(jìn)程的需求。 可以通過(guò)緊湊(拼湊,Compaction)技術(shù)來(lái)解決外部碎片。


    進(jìn)程1如何分配內(nèi)存空間?
    緊湊法挪位

    從而就可以將進(jìn)程1調(diào)入內(nèi)存

    4.4 連續(xù)分配管理小結(jié)

    4.5 動(dòng)態(tài)分區(qū)分配算法

    動(dòng)態(tài)分區(qū)分配算法解決的問(wèn)題:
    在動(dòng)態(tài)分區(qū)分配方式中, 當(dāng)很多個(gè)空閑分區(qū)都能滿足需求時(shí),應(yīng)該選擇哪個(gè)分區(qū)進(jìn)行分配?

    4.5.1 首次適應(yīng)算法

    算法思想:每次都從低地址開(kāi)始查找,找到第一個(gè)能滿足大小的空閑分區(qū)。

    如何實(shí)現(xiàn):空閑分區(qū)以地址遞增的次序排列。每次分配內(nèi)存時(shí)順序查找空閑分區(qū)鏈(或空閑分區(qū) 表),找到大小能滿足要求的第一個(gè)空閑分區(qū)。

    4.5.2 最佳適應(yīng)算法

    算法思想:由于動(dòng)態(tài)分區(qū)分配是一種連續(xù)分配方式,為各進(jìn)程分配的空間必須是連續(xù)的一整片區(qū)域。因此為了保證當(dāng)“大進(jìn)程”到來(lái)時(shí)能有連續(xù)的大片空間,可以盡可能多地留下大片的空閑區(qū), 即,優(yōu)先使用更小的空閑區(qū)。

    如何實(shí)現(xiàn):空閑分區(qū)按容量遞增次序鏈接。每次分配內(nèi)存時(shí)順序查找空閑分區(qū)鏈(或空閑分區(qū) 表),找到大小能滿足要求的第一個(gè)空閑分區(qū)。

    缺點(diǎn):每次都選最小的分區(qū)進(jìn)行分配,會(huì)留下越來(lái)越多的、很小的、難以利用的內(nèi)存塊。因此這種方法會(huì)產(chǎn)生很多的外部碎片

    4.5.3 最壞(大)適應(yīng)算法

    算法思想:為了解決最佳適應(yīng)算法的問(wèn)題——即留下太多難以利用的小碎片,可以在每次分配時(shí)優(yōu)先使用最大的連續(xù)空閑區(qū),這樣分配后剩余的空閑區(qū)就不會(huì)太小,更方便使用。

    如何實(shí)現(xiàn):空閑分區(qū)=按容量遞減次序鏈接。每次分配內(nèi)存時(shí)順序查找空閑分區(qū)鏈(或空閑分區(qū) 表),找到大小能滿足要求的第一個(gè)空閑分區(qū)。

    缺點(diǎn):每次都選最大的分區(qū)進(jìn)行分配,雖然可以讓分配后留下的 空閑區(qū)更大,更可用,但是這種方式會(huì)導(dǎo)致較大的連續(xù)空閑區(qū)被 迅速用完。如果之后有“大進(jìn)程”到達(dá),就沒(méi)有內(nèi)存分區(qū)可用了。

    4.5.4 鄰近適應(yīng)算法

    算法思想:首次適應(yīng)算法每次都從鏈頭開(kāi)始查找的。這可能會(huì)導(dǎo)致低地址部分出現(xiàn)很多小的空閑分區(qū),而每次分配查找時(shí),都要經(jīng)過(guò)這些分區(qū),因此也增加了查找的開(kāi)銷(xiāo)。如果每次都從上次查找結(jié)束的位置開(kāi)始檢索,就能解決上述問(wèn)題。

    如何實(shí)現(xiàn):空閑分區(qū)以地址遞增的順序排列(可排成一個(gè)循環(huán)鏈表)。每次分配內(nèi)存時(shí)從上次查找結(jié)束的位置開(kāi)始查找空閑分區(qū)鏈(或空閑分區(qū)表),找到大小能滿足要求的第一個(gè)空閑分區(qū)。

    首次適應(yīng)算法每次都要從頭查找,每次都需要檢索低地址的小分區(qū)。 但是這種規(guī)則也決定了當(dāng)?shù)偷刂凡糠钟懈〉姆謪^(qū)可以滿足需求時(shí), 會(huì)更有可能用到低地址部分的小分區(qū),也會(huì)更有可能把高地址部分的大分區(qū)保留下來(lái)(最佳適應(yīng)算法的優(yōu)點(diǎn))

    鄰近適應(yīng)算法的規(guī)則可能會(huì)導(dǎo)致無(wú)論低地址、高地址部分的空閑分區(qū)都有相同的概率被使用,也就導(dǎo)致了高地址部分的大分區(qū)更可能被使用,劃分為小分區(qū),最后導(dǎo)致無(wú)大分區(qū)可用(最大適應(yīng)算法的缺點(diǎn))
    綜合來(lái)看,四種算法中,首次適應(yīng)算法的效果反而更好

    4.5.5 動(dòng)態(tài)分區(qū)分配算法小結(jié)

    總結(jié)

    以上是生活随笔為你收集整理的11 操作系统第三章 内存管理 内存的基本知识 内存管理 内存空间扩充 连续分配管理方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。