操作系統(tǒng)基礎(chǔ) 單、多道編程操作系統(tǒng)的內(nèi)存管理

單、多道編程操作系統(tǒng)的內(nèi)存管理

1.單道編程的內(nèi)存管理

在單道編程環(huán)境下,整個內(nèi)存里面只有兩個程序:一個是用戶程序,另一個是操作系統(tǒng)。由于只有一個用戶程序,而操作系統(tǒng)所占用的內(nèi)存空間是恒定的,我們可以將用戶程序總是加載到同一個內(nèi)存地址上。即用戶程序永遠(yuǎn)從同一個地方開始執(zhí)行。
在這種管理方式下,操作系統(tǒng)永遠(yuǎn)跳轉(zhuǎn)到同一個地方來啟動用戶程序。這樣,用戶程序里面的地址都可以事先計(jì)算出來,即在程序運(yùn)行前就計(jì)算出所有的物理地址。這種在運(yùn)行前即將物理地址計(jì)算好的方式叫做靜態(tài)地址翻譯。
固定地址的內(nèi)存管理單元非常簡單,實(shí)際上并不需要任何內(nèi)存管理單元。因?yàn)槌绦虬l(fā)出的地址已經(jīng)是物理地址,在執(zhí)行過程中無須進(jìn)行任何地址翻譯。而這種情況的直接結(jié)果就是程序運(yùn)行速度快,因?yàn)樵竭^了地址翻譯這個步驟。

缺點(diǎn):

1.整個程序要加載到內(nèi)存空間中去,將導(dǎo)致比物理內(nèi)存大的程序無法運(yùn)行。

2.只運(yùn)行一個程序造成資源浪費(fèi),如果一個程序很小,雖然所用內(nèi)存空間小,但剩下的內(nèi)存空間也無法使用。

3.程序可能無法在不同的操作系統(tǒng)下運(yùn)行,因?yàn)椴煌僮飨到y(tǒng)占用的內(nèi)存空間大小可能不一樣,使得用戶程序的起始地址可能不一樣。這樣在一個系統(tǒng)環(huán)境下編譯出來的程序很可能無法在另一個系統(tǒng)環(huán)境下執(zhí)行。

2.多道編程的內(nèi)存管理

多道編程可以極大地改善CPU和內(nèi)存的效率,改善用戶響應(yīng)時間,但代價是操作系統(tǒng)的復(fù)雜性。

因?yàn)槎嗟谰幊痰那闆r下,無法將程序總是加到固定的內(nèi)存地址上,也就是無法使用靜態(tài)地址翻譯。這樣我們就必須在程序加載完畢后才能計(jì)算物理地址,也就是在程序運(yùn)行時進(jìn)行地址翻譯,進(jìn)行從虛擬地址->物理地址的翻譯,這種翻譯稱為動態(tài)地址翻譯。

多道編程下的內(nèi)存管理策略有兩種:固定分區(qū)和非固定分區(qū)。

2.1 固定分區(qū)的多道編程內(nèi)存管理策略

固定分區(qū)的管理就是將內(nèi)存分為固定的幾個區(qū)域,每個區(qū)域的大小固定。最下面的分區(qū)為操作系統(tǒng)占用,其他分區(qū)由用戶程序使用。這些分區(qū)大小可以一樣,也可以不一樣??紤]到程序大小不一的實(shí)際情況,分區(qū)的大小通常也各不相同。當(dāng)需要加載程序時,選擇一個當(dāng)前閑置且容量夠大的分區(qū)進(jìn)行加載。

共享隊(duì)列的固定分區(qū)策略

這種模式下,當(dāng)一個新的程序想要運(yùn)行,必須排在一個共同的隊(duì)列里等待。當(dāng)有空閑分區(qū)時,才能進(jìn)行加載。由于程序大小和分區(qū)大小不一定匹配,有可能形成一個小程序占用一個大分區(qū)的情況,從而造成內(nèi)存里雖然有小分區(qū)閑置,但無法加載大程序的情況。

分開隊(duì)列的固定分區(qū)策略

為解決上述問題,我們可以將小程序加載到小分區(qū)里,讓不同的分區(qū)有不同的隊(duì)列,程序就可以分配到大小更合適的內(nèi)存空間。當(dāng)然,這種方式也有缺點(diǎn),就是如果還有空閑分區(qū),但等待的程序不在該分區(qū)的等待隊(duì)列上,就將造成有空間而不能運(yùn)行程序的尷尬處境。

2.2非固定分區(qū)的多道編程內(nèi)存管理策略

非固定分區(qū)的思想很簡單:當(dāng)一個程序需要占用內(nèi)存空間時,就在該片空間里面分出一個大小剛剛滿足程序所需的空間;再來一個程序,則在剩下的空間里面再這樣分出一塊來。在這種模式下,一個程序可以加載到任何地方。

非固定分區(qū)內(nèi)存地址管理的機(jī)制也很簡單,使用基址+極限來進(jìn)行地址翻譯。

即:

? 物理地址=虛擬地址+程序所在區(qū)域的起始地址

這種方式可以對每一個程序配備兩個寄存器:基址寄存器和極限寄存器。所有訪問地址都必須在這兩個寄存器值框定的空間里,否則就算非法訪問。

非固定分區(qū)這種管理方式存在一個重大問題:如果程序在執(zhí)行過程中需要更多空間,怎么辦?解決的辦法當(dāng)然是在一開始給程序分配空間時就分配足夠大的空間,留有一片閑置空間供程序增長用。不過,在分配增長空間后需要考慮一個問題。一個程序的空間增長通常有兩個來源:數(shù)據(jù)和棧。

分配增長空間

1.數(shù)據(jù)和棧往一個方向增長。缺點(diǎn):當(dāng)下面的數(shù)據(jù)長到上面數(shù)據(jù)所分配空間的底時,就無法再長了;而移動棧底非常不方便。


棧和數(shù)據(jù)同向生長.jpg

2.數(shù)據(jù)和棧相對而生長。這是UNIX采取的策略。


棧和數(shù)據(jù)相向生長.jpg

重疊

如果一個程序超過了物理內(nèi)存,還能運(yùn)行嗎?

其實(shí)是能的。這個辦法就是重疊。

重疊,就是將程序按照功能分成一段一段功能相對完整的單元,一個單元執(zhí)行完后,再執(zhí)行下一個單元,而一旦執(zhí)行到下一個單元,就不會再執(zhí)行前面的單元。所以我們可以把后面的程序單元內(nèi)存數(shù)據(jù)覆蓋到當(dāng)前程序單元上。這樣就可以執(zhí)行一個比物理內(nèi)存還要大的程序。

但是這相當(dāng)于把內(nèi)存管理的部分功能交給了用戶,不能算是操作系統(tǒng)提供的解決方案。

雙基址

如果我們運(yùn)行兩個一樣的程序,只是數(shù)據(jù)不同,我們自然想到能否讓兩個程序共享部分內(nèi)存空間。例如,如果我們同時啟動兩個PPT演示文稿,我們希望PPT的程序代碼部分能夠共享。

設(shè)定兩組基址和極限。數(shù)據(jù)和代碼分別用一組基址和極限表示,這就解決了問題。


雙基址.jpg
2.3 交換內(nèi)存管理

問題是程序在運(yùn)行之前,我們無法知道它需要內(nèi)存的準(zhǔn)確大小,所以內(nèi)存增長的問題仍需解決,而交換就是一個方式。

交換是當(dāng)一個程序所占空間不夠時,我們將其倒到磁盤上,再加載到一片更大的內(nèi)存空間。

總結(jié)

到目前為止,本書已經(jīng)介紹了幾種基本的內(nèi)存管理方法,分別是固定加載地址的內(nèi)存管理、固定分區(qū)的內(nèi)存管理、非固定分區(qū)的內(nèi)存管理和交換內(nèi)存管理。其中,以交換內(nèi)存管理最為靈活和先進(jìn)。它可以解決因程序所需空間增長而無法繼續(xù)運(yùn)行的困難,又可以實(shí)現(xiàn)動態(tài)多道編程。

但事實(shí)上,這種策略存在很多重大問題,而其中最重要的兩個問題是空間浪費(fèi)和程序大小受限。

為解決這些問題,出現(xiàn)了頁式內(nèi)存管理段式內(nèi)存管理。

參考資料:
《操作系統(tǒng)之哲學(xué)原理》 鄒恒明著

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 基礎(chǔ)知識 1.1、 基本概念、 功能 馮諾伊曼體系結(jié)構(gòu)1、計(jì)算機(jī)處理的數(shù)據(jù)和指令一律用二進(jìn)制數(shù)表示2、順序執(zhí)...
    yunpiao閱讀 5,801評論 1 22
  • 操作系統(tǒng)概論 操作系統(tǒng)的概念 操作系統(tǒng)是指控制和管理計(jì)算機(jī)的軟硬件資源,并合理的組織調(diào)度計(jì)算機(jī)的工作和資源的分配,...
    野狗子嗷嗷嗷閱讀 12,480評論 3 34
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,981評論 0 9
  • word直接復(fù)制來了,格式就不改了。至于這門課怎么復(fù)習(xí),只要平時實(shí)驗(yàn)都認(rèn)真完成、報(bào)告認(rèn)真寫,平時分都很高;考試的話...
    Jozhn閱讀 4,912評論 0 8
  • 泛黃的草地 熟悉的泥土氣息 樹葉一片片飄向你的腳底 你們曾約定: 待到春風(fēng)起 一起破春泥 南飛的鴻雁 空中徘徊了多...
    石憶_閱讀 915評論 18 61

友情鏈接更多精彩內(nèi)容