一、概述
在復(fù)習(xí)操作系統(tǒng)的時(shí)候 ,遇到的第一個(gè)難點(diǎn),當(dāng)年的操作系統(tǒng)課上老師這塊也沒(méi)講,所以對(duì)這些知識(shí)的了解幾乎為空白,特此記錄,怕過(guò)后忘了。
好,現(xiàn)在進(jìn)入正題。
頁(yè)式,段式或者段頁(yè)式都管理屬于離散存儲(chǔ)管理中的一種 ,采用這種方式的主要目的是為了解決碎片問(wèn)題,不用連續(xù)地分配內(nèi)存,可以將一個(gè)進(jìn)程/程序離散地裝入到不連續(xù)的內(nèi)存中。
二、主要過(guò)程及涉及技術(shù)介紹說(shuō)明
①分頁(yè)式存儲(chǔ)
首先將進(jìn)程和內(nèi)存都已頁(yè)為單位進(jìn)行分塊,進(jìn)程中的稱(chēng)為頁(yè),內(nèi)存中的稱(chēng)為塊,一一對(duì)應(yīng),大小相等,這個(gè)時(shí)候就需要一個(gè)專(zhuān)門(mén)的數(shù)據(jù)結(jié)構(gòu)來(lái)管理這種映射關(guān)系,也就是頁(yè)表,頁(yè)表也是存在內(nèi)存中的。在這種映射關(guān)系的基礎(chǔ)上,通過(guò)相應(yīng)的硬件轉(zhuǎn)換機(jī)制可以將邏輯地址轉(zhuǎn)換為對(duì)應(yīng)的物理地址,從而實(shí)現(xiàn)內(nèi)存的分配與管理。

頁(yè)面大小一般是由機(jī)器決定的,通常為4KB,如圖1.1所示,以某一32位邏址為例,4KB(2^12B)的頁(yè)大小,12根地址線(xiàn)可以完全表示,即快內(nèi)偏移為12位。剩下20位用來(lái)表示頁(yè)號(hào),最多可以表示2^20-1頁(yè)。再來(lái)看頁(yè)表項(xiàng),一個(gè)頁(yè)表項(xiàng)就代表了一個(gè)進(jìn)程中頁(yè)與內(nèi)存中塊的映射,故頁(yè)面數(shù)等于頁(yè)表項(xiàng)個(gè)數(shù),頁(yè)表項(xiàng)中有兩個(gè)數(shù)據(jù)項(xiàng),頁(yè)號(hào)和塊號(hào)。(圖1.2)根據(jù)給定的邏址可以算出對(duì)應(yīng)的頁(yè)號(hào),再結(jié)合頁(yè)表可以求出對(duì)應(yīng)的塊號(hào),此時(shí)再結(jié)合偏移地址便可得出物理地址。

具體過(guò)程見(jiàn)圖1.3,在映射的過(guò)程中,系統(tǒng)還設(shè)置了相應(yīng)的內(nèi)存保護(hù)機(jī)制,使用一個(gè)界限保護(hù)寄存器,來(lái)確保沒(méi)有地址越界等事情的發(fā)生。同時(shí),設(shè)置了一個(gè)頁(yè)面寄存器來(lái)存放頁(yè)表始址和頁(yè)面長(zhǎng)度。

上述過(guò)程通常由處理器的硬件直接完成,不需要軟件參與。通常,操作系統(tǒng)只需在進(jìn)程切換時(shí),把進(jìn)程頁(yè)表的首地址裝入處理器特定的寄存器中即可。
一般來(lái)說(shuō),頁(yè)表存儲(chǔ)在主存之中。這樣處理器每訪(fǎng)問(wèn)一個(gè)在內(nèi)存中的操作數(shù),就要訪(fǎng)問(wèn)兩次內(nèi)存:
第一次用來(lái)查找頁(yè)表將操作數(shù)的 邏輯地址變換為物理地址;第二次完成真正的讀寫(xiě)操作。
這樣做時(shí)間上耗費(fèi)嚴(yán)重。為縮短查找時(shí)間,可以將頁(yè)表從內(nèi)存裝入CPU內(nèi)部的關(guān)聯(lián)存儲(chǔ)器(例如,快表)中,實(shí)現(xiàn)按內(nèi)容查找。
此時(shí)的地址變換過(guò)程是:在CPU給出有效地址后,由地址變換機(jī)構(gòu)自動(dòng)將頁(yè)號(hào)送人快表,并將此頁(yè)號(hào)與快表中的所有頁(yè)號(hào)進(jìn)行比較,而且這種比較是同時(shí)進(jìn)行的。
若其中有與此相匹配的頁(yè)號(hào),表示要訪(fǎng)問(wèn)的頁(yè)的頁(yè)表項(xiàng)在快表中。于是可直接讀出該頁(yè)所對(duì)應(yīng)的物理頁(yè)號(hào),這樣就無(wú)需訪(fǎng)問(wèn)內(nèi)存中的頁(yè)表。由于關(guān)聯(lián)存儲(chǔ)器的訪(fǎng)問(wèn)速度比內(nèi)存的訪(fǎng)問(wèn)速度快得多。
頁(yè)式管理方式的優(yōu)點(diǎn)是:
1)沒(méi)有外碎片,每個(gè)內(nèi)碎片不超過(guò)頁(yè)大比前面所討論的幾種管理方式的最大進(jìn)步是,
2)一個(gè)程序不必連續(xù)存放。
3)便于改變程序占用空間的大小(主要指隨著程序運(yùn)行,動(dòng)態(tài)生成的數(shù)據(jù)增多,所要求的地址空間相應(yīng)增長(zhǎng))。
缺點(diǎn)是:要求程序全部裝入內(nèi)存,沒(méi)有足夠的內(nèi)存,程序就不能執(zhí)行
②分段式管理
跟頁(yè)式管理不同的是,段式管理是針對(duì)用戶(hù)的,它是將程序進(jìn)行分段,裝入內(nèi)存。在段式存儲(chǔ)管理系統(tǒng)中,為每個(gè)段分配一個(gè)連續(xù)的分區(qū),而進(jìn)程中的各個(gè)段可以不連續(xù)地存放在內(nèi)存的不同分區(qū)中。程序加載時(shí),操作系統(tǒng)為所有段分配其所需內(nèi)存,這些段不必連續(xù),物理內(nèi)存的管理采用動(dòng)態(tài)分區(qū)的管理方法。
段式管理的內(nèi)存格式和頁(yè)式相似,由段號(hào)和段內(nèi)偏移組成(如圖2.1),而有點(diǎn)略微不同的是每一段的大小不是由系統(tǒng)決定的,是由用戶(hù)編程決定的。

同樣,段表項(xiàng)也發(fā)生了變換,頁(yè)表項(xiàng)只有兩項(xiàng),而在段表中增加了一欄,用來(lái)表示段長(zhǎng),具體結(jié)構(gòu)如下(圖2.2):

同樣,在地址變換機(jī)構(gòu)中,有兩種越界保護(hù),①段號(hào)是否小于段長(zhǎng) ②段內(nèi)偏移是否小于段長(zhǎng)。

在段式管理系統(tǒng)中,整個(gè)進(jìn)程的地址空間是二維的,即其邏輯地址由段號(hào)和段內(nèi)地址兩部分組成。為了完成進(jìn)程邏輯地址到物理地址的映射,處理器會(huì)查找內(nèi)存中的段表,由段號(hào)得到段的首地址,加上段內(nèi)地址,得到實(shí)際的物理地址。(如圖2.3)這個(gè)過(guò)程也是由處理器的硬件直接完成的,操作系統(tǒng)只需在進(jìn)程切換時(shí),將進(jìn)程段表的首地址裝入處理器的特定寄存器當(dāng)中。這個(gè)寄存器一般被稱(chēng)作段表地址寄存器。