操作系统内存管理--简单、页式、段式、段页式
一、內(nèi)存管理的目的和功能
內(nèi)存一直是計(jì)算機(jī)系統(tǒng)中寶貴而又緊俏的資源,內(nèi)存能否被有效、合理地使用,將直接影響到操作系統(tǒng)的性能。此外,雖然物理內(nèi)存的增長(zhǎng)現(xiàn)在達(dá)到了N個(gè)GB,但比物理內(nèi)存增長(zhǎng)還快的是程序,所以無(wú)論物理內(nèi)存如何增長(zhǎng),都趕不上程序增長(zhǎng)的速度,所以操作系統(tǒng)如何有效的管理內(nèi)存便顯得尤為重要。
(1)內(nèi)存管理的目的
內(nèi)存管理的目的主要有兩個(gè):一是方便用戶(hù)使用;二是提高存儲(chǔ)器的利用率。
(2)內(nèi)存管控的功能
內(nèi)存管理主要有四個(gè)方面的功能:
1)內(nèi)存空間的分配與回收:由操作系統(tǒng)完成主存儲(chǔ)器空間的分配和管理,使程序員擺脫存儲(chǔ)分配的麻煩,提高編程效率。
2)地址轉(zhuǎn)換:在多道程序環(huán)境下,程序中的邏輯地址與內(nèi)存中的物理地址不可能一致,因此存儲(chǔ)管理必須提供地址變換功能,把邏輯地址轉(zhuǎn)換成相應(yīng)的物理地址
3)存儲(chǔ)保護(hù)和存儲(chǔ)共享:保證各道作業(yè)在各自的存儲(chǔ)空間內(nèi)運(yùn)行,互不干擾;同時(shí)充分利用內(nèi)存空間,共享內(nèi)存中存放的信息。
4)內(nèi)存空間的擴(kuò)充:利用虛擬存儲(chǔ)技術(shù)或自動(dòng)覆蓋技術(shù),從邏輯上擴(kuò)充內(nèi)存。
二、內(nèi)存管理中的基本概念
(1)邏輯地址、相對(duì)地址、虛地址
源程序經(jīng)過(guò)編譯處理后,源程序中的各種符號(hào)元素轉(zhuǎn)換成機(jī)器指令和數(shù)據(jù)組成的目標(biāo)程序,并用實(shí)際地址碼替換符號(hào)地址。這種經(jīng)編譯后的目標(biāo)代碼所限定的地址域叫做該程序的地址空間。地址空間中的各個(gè)地址叫做相對(duì)地址,邏輯地址或虛地址。地址空間總是從0號(hào)單元開(kāi)始編址,其他所以地址都是以0單元為起始地址順序編碼的。
(2)線(xiàn)性地址
線(xiàn)性地址是邏輯地址到物理地址變換之間的中間層。在段頁(yè)式存儲(chǔ)管理中,程序代碼會(huì)產(chǎn)生邏輯地址,或者說(shuō)是段中的偏移地址,加上相應(yīng)段的基地址就生成了一個(gè)線(xiàn)性地址。如果啟用了分頁(yè)機(jī)制,那么線(xiàn)性地址可以再經(jīng)變換以產(chǎn)生一個(gè)物理地址。若沒(méi)有啟用分頁(yè)機(jī)制,那么線(xiàn)性地址直接就是物理地址。
(3)物理地址、絕對(duì)地址、實(shí)地址
物理地址空間是指內(nèi)存中物理單元的集合,它是地址轉(zhuǎn)換的最終地址,進(jìn)程在運(yùn)行時(shí)執(zhí)行指令和訪(fǎng)問(wèn)數(shù)據(jù)最后都要通過(guò)物理地址從主存中存取。物理地址又叫絕對(duì)地址、實(shí)地址。
(4)地址重定位
當(dāng)裝入程序?qū)⒖蓤?zhí)行代碼裝入內(nèi)存時(shí),必須通過(guò)地址轉(zhuǎn)換將邏輯地址轉(zhuǎn)換成物理地址,這個(gè)過(guò)程稱(chēng)為地址重定位。即把程序相對(duì)地址空間的邏輯地址轉(zhuǎn)換成存儲(chǔ)空間的絕對(duì)地址的工作叫做地址重定位,又叫地址映射或地址變換。
地址重定位又分為兩種:靜態(tài)重定位和動(dòng)態(tài)重定位。
1)靜態(tài)重定位
在裝入作業(yè)時(shí),由裝入程序把用戶(hù)程序中的指令地址和數(shù)據(jù)地址全部轉(zhuǎn)換成存儲(chǔ)空間的絕對(duì)地址。這種地址轉(zhuǎn)換工作是在程序執(zhí)行前集中一次完成的,程序執(zhí)行時(shí)就無(wú)需要再進(jìn)行地址轉(zhuǎn)換工作。
主要優(yōu)點(diǎn)是無(wú)需增加硬件地址變換機(jī)構(gòu),主要缺點(diǎn)是要求給每個(gè)程序分配一片連續(xù)的存儲(chǔ)空間。
2)動(dòng)態(tài)重定位
動(dòng)態(tài)重定位是靠硬件的地址轉(zhuǎn)換機(jī)構(gòu)來(lái)實(shí)現(xiàn)的,通常使用一個(gè)重定位寄存器。在存儲(chǔ)管理為程序分配一個(gè)主存區(qū)域后,裝入程序直接把程序和數(shù)據(jù)裝入到分配的存儲(chǔ)區(qū)中,然后把這個(gè)存儲(chǔ)區(qū)的起始地址送入重定位寄存器中。在程序執(zhí)行時(shí),對(duì)于每一個(gè)存儲(chǔ)器的訪(fǎng)問(wèn),都要講相對(duì)地址轉(zhuǎn)化成主存的絕對(duì)地址。
主要優(yōu)點(diǎn)是使用更加靈活有效,不用給程序分配一大片連續(xù)的空間,能夠給用戶(hù)提供一個(gè)比主存大的多的地址空間。
三、常見(jiàn)的內(nèi)存管理技術(shù)
(1)簡(jiǎn)單存儲(chǔ)管理
1)單一連續(xù)分配
單一連續(xù)分配是指主存中只有一個(gè)用戶(hù)作業(yè),把程序裝入主存之后,占據(jù)全部存儲(chǔ)空間和資源。
內(nèi)存在此方式下分為系統(tǒng)區(qū)和用戶(hù)區(qū),系統(tǒng)區(qū)僅提供給操作系統(tǒng)使用,通常在低地址部分;用戶(hù)區(qū)是為用戶(hù)提供的、除系統(tǒng)區(qū)之外的內(nèi)存空間。這種方式的優(yōu)點(diǎn)是簡(jiǎn)單、無(wú)外部碎片,可以釆用覆蓋技術(shù),不需要額外的技術(shù)支持。缺點(diǎn)是只能用于單用戶(hù)、單任務(wù)的操作系統(tǒng)中,有內(nèi)部碎片,存儲(chǔ)器的利用率極低。
2)分區(qū)分配
分區(qū)分配又分為:固定式分區(qū)和可變式分區(qū)。
-----------------------------
固定分區(qū)分配是將內(nèi)存空間劃分為若干個(gè)固定大小的區(qū)域,每個(gè)分區(qū)只裝入一道作業(yè)。當(dāng)有空閑分區(qū)時(shí),便可以再?gòu)耐獯娴暮髠渥鳂I(yè)隊(duì)列中,選擇適當(dāng)大小的作業(yè)裝入該分區(qū),如此循環(huán)。
固定分區(qū)方式存在兩個(gè)問(wèn)題:一是程序可能太大而放不進(jìn)任何一個(gè)分區(qū)中,這時(shí)用戶(hù)不得不使用覆蓋技術(shù)來(lái)使用內(nèi)存空間;二是主存利用率低,當(dāng)程序小于固定分區(qū)大小時(shí),也占用了一個(gè)完整的內(nèi)存分區(qū)空間,這樣分區(qū)內(nèi)部有空間浪費(fèi),這種現(xiàn)象稱(chēng)為內(nèi)部碎片。
-----------------------------
可變式分區(qū)在進(jìn)程裝入內(nèi)存時(shí),根據(jù)進(jìn)程的大小動(dòng)態(tài)地建立分區(qū),并使分區(qū)的大小正好適合進(jìn)程的需要。
動(dòng)態(tài)分區(qū)在開(kāi)始分配時(shí)是很好的,但是之后會(huì)導(dǎo)致內(nèi)存中出現(xiàn)許多小的內(nèi)存塊。隨著時(shí)間的推移,內(nèi)存中會(huì)產(chǎn)生越來(lái)越多的碎片,且隨著進(jìn)程的換入/換出,很可能會(huì)出現(xiàn)更多更小的內(nèi)存塊,內(nèi)存的利用率隨之下降。這些小的內(nèi)存塊稱(chēng)為外部碎片,指在所有分區(qū)外的存儲(chǔ)空間會(huì)變成越來(lái)越多的碎片,這與固定分區(qū)中的內(nèi)部碎片正好相對(duì)。
動(dòng)態(tài)分區(qū)的分配策略,考慮以下幾種算法:?
》首次適應(yīng)(First Fit)算法:空閑分區(qū)以地址遞增的次序鏈接。分配內(nèi)存時(shí)順序查找,找到大小能滿(mǎn)足要求的第一個(gè)空閑分區(qū)。?
》最佳適應(yīng)(Best Fit)算法:空閑分區(qū)按容量遞增形成分區(qū)鏈,找到第一個(gè)能滿(mǎn)足要求的空閑分區(qū)。?
》最壞適應(yīng)(Worst Fit)算法:又稱(chēng)最大適應(yīng)(Largest Fit)算法,空閑分區(qū)以容量遞減的次序鏈接。找到第一個(gè)能滿(mǎn)足要求的空閑分區(qū),也就是挑選出最大的分區(qū)。?
》鄰近適應(yīng)(Next Fit)算法:又稱(chēng)循環(huán)首次適應(yīng)算法,由首次適應(yīng)算法演變而成。不同之處是分配內(nèi)存時(shí)從上次查找結(jié)束的位置開(kāi)始繼續(xù)查找。
-----------------------------解決碎片的方法是采取緊湊技術(shù),即對(duì)碎片進(jìn)行拼接,但是需要消耗系統(tǒng)資源。
3)覆蓋與交換
1.虛擬存儲(chǔ)器
當(dāng)一個(gè)作業(yè)程序的地址空間比主存可用空間大時(shí),操作系統(tǒng)可將這個(gè)程序的地址空間的一部分放入主存內(nèi),其余部分放在輔存上。當(dāng)訪(fǎng)問(wèn)的信息不在主存時(shí),再由操作系統(tǒng)負(fù)責(zé)調(diào)入所需要的部分。這樣計(jì)算機(jī)系統(tǒng)好像為用戶(hù)提供了一個(gè)比實(shí)際主存大得多的存儲(chǔ)空間,這樣的技術(shù)叫做虛擬存儲(chǔ)器。
實(shí)現(xiàn)的基礎(chǔ):一是需要有相當(dāng)數(shù)量的外存,二是需要有一定容量的主存,三是地址變換機(jī)構(gòu)。
2.覆蓋
覆蓋是指同一主存區(qū)可以被不同的程序段重復(fù)使用。作業(yè)在一次運(yùn)行時(shí),把那些不會(huì)同時(shí)執(zhí)行的程序段共用一個(gè)主存區(qū)。相互覆蓋的程序段叫做覆蓋,可共享的主存區(qū)叫做覆蓋區(qū)。覆蓋技術(shù)的基礎(chǔ)是提供正確的覆蓋結(jié)構(gòu)。
3.交換
交換就是系統(tǒng)根據(jù)需要把主存中暫時(shí)不允許的某個(gè)或某些作業(yè)部分或全部移到輔存,而把輔存中的某個(gè)或某些作業(yè)移到相應(yīng)的主存區(qū),并使其投入運(yùn)行。
(2)頁(yè)式存儲(chǔ)管理
1)基本概念
頁(yè)式存儲(chǔ)管理將程序邏輯地址空間劃分為固定大小的頁(yè)(page),而物理內(nèi)存劃分為同樣大小的頁(yè)框(page frame)。為方便地址轉(zhuǎn)換,頁(yè)面大小應(yīng)是2的整數(shù)冪。每一個(gè)作業(yè)有一個(gè)頁(yè)表,用來(lái)記錄各個(gè)頁(yè)在內(nèi)存中所對(duì)應(yīng)的塊(頁(yè)框)。
2)地址結(jié)構(gòu)
地址結(jié)構(gòu)包含兩部分:前一部分為頁(yè)號(hào)P,后一部分為頁(yè)內(nèi)偏移量W。其中頁(yè)號(hào)與頁(yè)內(nèi)偏移量所占多少位,與頁(yè)面的大小和主存的最大容量有關(guān)。
每頁(yè)大小為4KB,主存大學(xué)為4GB。則地址長(zhǎng)度為32 位,其中0~11位為頁(yè)內(nèi)地址,即:12~31位為頁(yè)號(hào),地址空間最多允許有2^20頁(yè)。
3)地址變換機(jī)制
上面介紹的地址變換過(guò)程可知,若頁(yè)表全部放在內(nèi)存中,則存取一個(gè)數(shù)據(jù)或一條指令至少要訪(fǎng)問(wèn)兩次內(nèi)存:一次是訪(fǎng)問(wèn)頁(yè)表,確定所存取的數(shù)據(jù)或指令的物理地址,第二次才根據(jù)該地址存取數(shù)據(jù)或指令。顯然,這種方法比通常執(zhí)行指令的速度慢了一半。
為此,在地址變換機(jī)構(gòu)中增設(shè)了一個(gè)具有并行查找能力的高速緩沖存儲(chǔ)器——快表,又稱(chēng)聯(lián)想寄存器(TLB),用來(lái)存放當(dāng)前訪(fǎng)問(wèn)的若干頁(yè)表項(xiàng),以加速地址變換的過(guò)程。
(3)請(qǐng)求式分頁(yè)存儲(chǔ)管理
1)基本概念
請(qǐng)求分頁(yè)系統(tǒng)建立在基本分頁(yè)系統(tǒng)基礎(chǔ)之上,為了支持虛擬存儲(chǔ)器功能而增加了請(qǐng)求調(diào)頁(yè)功能和頁(yè)面置換功能。請(qǐng)求分頁(yè)是目前最常用的一種實(shí)現(xiàn)虛擬存儲(chǔ)器的方法。在請(qǐng)求分頁(yè)系統(tǒng)中,只要求將當(dāng)前需要的一部分頁(yè)面裝入內(nèi)存,便可以啟動(dòng)作業(yè)運(yùn)行。在作業(yè)執(zhí)行過(guò)程中,當(dāng)所要訪(fǎng)問(wèn)的頁(yè)面不在內(nèi)存時(shí),再通過(guò)調(diào)頁(yè)功能將其調(diào)入,同時(shí)還可以通過(guò)置換功能將暫時(shí)不用的頁(yè)面換出到外存上,以便騰出內(nèi)存空間。
2)擴(kuò)充的頁(yè)表
3)地址變換機(jī)制
4)頁(yè)面置換算法
1.最佳算法(OPT算法)
用來(lái)評(píng)價(jià)其他算法,使用缺頁(yè)中斷率:
f = F / A(其中F為作業(yè)失敗訪(fǎng)問(wèn)的次數(shù),A為作業(yè)總的訪(fǎng)問(wèn)次數(shù))
2.先進(jìn)先出算法(FIFO算法)
淘汰在內(nèi)存駐留時(shí)間最長(zhǎng)的頁(yè)面。
3.最近最久未使用淘汰算法(LRU算法)
淘汰最久沒(méi)有被使用的頁(yè)面。
4.最不經(jīng)常使用淘汰算法(LFU算法)
淘汰一段時(shí)間內(nèi),訪(fǎng)問(wèn)次數(shù)最少的頁(yè)面。
(LRU和LFU的區(qū)別:http://blog.csdn.net/guoweimelon/article/details/50855351)
(4)段式存儲(chǔ)管理
1)基本概念
段式存儲(chǔ)管理要求每個(gè)作業(yè)的地址空間按照程序自身的邏輯劃分為若干段,每個(gè)段都有一個(gè)唯一的內(nèi)部段號(hào)。
2)地址結(jié)構(gòu)
邏輯地址由段號(hào)S與段內(nèi)偏移量W兩部分組成。
段號(hào)為16位,段內(nèi)偏移量為16位,則一個(gè)作業(yè)最多可有2^16=65536個(gè)段,最大段長(zhǎng)為64KB。
3)地址變換機(jī)制
(5)段頁(yè)式存儲(chǔ)管理
1)基本概念
在段頁(yè)式存儲(chǔ)中,每個(gè)分段又被分成若干個(gè)固定大小的頁(yè)。
2)地址結(jié)構(gòu)
邏輯地址由段號(hào)S、段內(nèi)頁(yè)號(hào)P與段內(nèi)偏移量W兩部分組成。
3)地址變換機(jī)制
參考資料:
http://c.biancheng.net/cpp/html/2611.html
http://blog.csdn.net/hguisu/article/details/5713164
http://www.cnblogs.com/CareySon/archive/2012/04/25/2470063.html
http://blog.csdn.net/yang_yulei/article/details/24142743
http://blog.csdn.net/leves1989/article/details/3305402
http://blog.csdn.net/yusiguyuan/article/details/9664887
總結(jié)
以上是生活随笔為你收集整理的操作系统内存管理--简单、页式、段式、段页式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 肾窦是什么
- 下一篇: OSI/RM 开放系统互联参考模型