一分冈、概述
在復(fù)習(xí)操作系統(tǒng)的時(shí)候 ,遇到的第一個(gè)難點(diǎn)霸株,當(dāng)年的操作系統(tǒng)課上老師這塊也沒講雕沉,所以對(duì)這些知識(shí)的了解幾乎為空白,特此記錄去件,怕過后忘了坡椒。
好,現(xiàn)在進(jìn)入正題尤溜。
頁式倔叼,段式或者段頁式都管理屬于離散存儲(chǔ)管理中的一種 ,采用這種方式的主要目的是為了解決碎片問題宫莱,不用連續(xù)地分配內(nèi)存丈攒,可以將一個(gè)進(jìn)程/程序離散地裝入到不連續(xù)的內(nèi)存中。
二授霸、主要過程及涉及技術(shù)介紹說明
①分頁式存儲(chǔ)
首先將進(jìn)程和內(nèi)存都已頁為單位進(jìn)行分塊巡验,進(jìn)程中的稱為頁,內(nèi)存中的稱為塊碘耳,一一對(duì)應(yīng)显设,大小相等,這個(gè)時(shí)候就需要一個(gè)專門的數(shù)據(jù)結(jié)構(gòu)來管理這種映射關(guān)系辛辨,也就是頁表捕捂,頁表也是存在內(nèi)存中的瑟枫。在這種映射關(guān)系的基礎(chǔ)上,通過相應(yīng)的硬件轉(zhuǎn)換機(jī)制可以將邏輯地址轉(zhuǎn)換為對(duì)應(yīng)的物理地址绞蹦,從而實(shí)現(xiàn)內(nèi)存的分配與管理力奋。
頁面大小一般是由機(jī)器決定的,通常為4KB幽七,如圖1.1所示,以某一32位邏址為例溅呢,4KB(2^12B)的頁大小澡屡,12根地址線可以完全表示,即快內(nèi)偏移為12位咐旧。剩下20位用來表示頁號(hào)驶鹉,最多可以表示2^20-1頁。再來看頁表項(xiàng)铣墨,一個(gè)頁表項(xiàng)就代表了一個(gè)進(jìn)程中頁與內(nèi)存中塊的映射室埋,故頁面數(shù)等于頁表項(xiàng)個(gè)數(shù),頁表項(xiàng)中有兩個(gè)數(shù)據(jù)項(xiàng)伊约,頁號(hào)和塊號(hào)姚淆。(圖1.2)根據(jù)給定的邏址可以算出對(duì)應(yīng)的頁號(hào),再結(jié)合頁表可以求出對(duì)應(yīng)的塊號(hào)屡律,此時(shí)再結(jié)合偏移地址便可得出物理地址腌逢。
具體過程見圖1.3,在映射的過程中超埋,系統(tǒng)還設(shè)置了相應(yīng)的內(nèi)存保護(hù)機(jī)制搏讶,使用一個(gè)界限保護(hù)寄存器,來確保沒有地址越界等事情的發(fā)生霍殴。同時(shí)媒惕,設(shè)置了一個(gè)頁面寄存器來存放頁表始址和頁面長度。
上述過程通常由處理器的硬件直接完成来庭,不需要軟件參與妒蔚。通常,操作系統(tǒng)只需在進(jìn)程切換時(shí)巾腕,把進(jìn)程頁表的首地址裝入處理器特定的寄存器中即可面睛。
一般來說,頁表存儲(chǔ)在主存之中尊搬。這樣處理器每訪問一個(gè)在內(nèi)存中的操作數(shù)叁鉴,就要訪問兩次內(nèi)存:
第一次用來查找頁表將操作數(shù)的 邏輯地址變換為物理地址;第二次完成真正的讀寫操作佛寿。
這樣做時(shí)間上耗費(fèi)嚴(yán)重幌墓。為縮短查找時(shí)間但壮,可以將頁表從內(nèi)存裝入CPU內(nèi)部的關(guān)聯(lián)存儲(chǔ)器(例如,快表)中常侣,實(shí)現(xiàn)按內(nèi)容查找蜡饵。
此時(shí)的地址變換過程是:在CPU給出有效地址后,由地址變換機(jī)構(gòu)自動(dòng)將頁號(hào)送人快表胳施,并將此頁號(hào)與快表中的所有頁號(hào)進(jìn)行比較溯祸,而且這種比較是同時(shí)進(jìn)行的。
若其中有與此相匹配的頁號(hào)舞肆,表示要訪問的頁的頁表項(xiàng)在快表中焦辅。于是可直接讀出該頁所對(duì)應(yīng)的物理頁號(hào),這樣就無需訪問內(nèi)存中的頁表椿胯。由于關(guān)聯(lián)存儲(chǔ)器的訪問速度比內(nèi)存的訪問速度快得多筷登。
頁式管理方式的優(yōu)點(diǎn)是:
1)沒有外碎片,每個(gè)內(nèi)碎片不超過頁大比前面所討論的幾種管理方式的最大進(jìn)步是哩盲,
2)一個(gè)程序不必連續(xù)存放前方。
3)便于改變程序占用空間的大小(主要指隨著程序運(yùn)行,動(dòng)態(tài)生成的數(shù)據(jù)增多廉油,所要求的地址空間相應(yīng)增長)惠险。
缺點(diǎn)是:要求程序全部裝入內(nèi)存嗜历,沒有足夠的內(nèi)存航夺,程序就不能執(zhí)行
②分段式管理
跟頁式管理不同的是,段式管理是針對(duì)用戶的懒构,它是將程序進(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)存格式和頁式相似宝穗,由段號(hào)和段內(nèi)偏移組成(如圖2.1)户秤,而有點(diǎn)略微不同的是每一段的大小不是由系統(tǒng)決定的,是由用戶編程決定的逮矛。
同樣鸡号,段表項(xiàng)也發(fā)生了變換,頁表項(xiàng)只有兩項(xiàng)须鼎,而在段表中增加了一欄鲸伴,用來表示段長府蔗,具體結(jié)構(gòu)如下(圖2.2):
同樣,在地址變換機(jī)構(gòu)中汞窗,有兩種越界保護(hù)姓赤,①段號(hào)是否小于段長 ②段內(nèi)偏移是否小于段長。
在段式管理系統(tǒng)中仲吏,整個(gè)進(jìn)程的地址空間是二維的不铆,即其邏輯地址由段號(hào)和段內(nèi)地址兩部分組成。為了完成進(jìn)程邏輯地址到物理地址的映射裹唆,處理器會(huì)查找內(nèi)存中的段表狂男,由段號(hào)得到段的首地址,加上段內(nèi)地址品腹,得到實(shí)際的物理地址。(如圖2.3)這個(gè)過程也是由處理器的硬件直接完成的红碑,操作系統(tǒng)只需在進(jìn)程切換時(shí)舞吭,將進(jìn)程段表的首地址裝入處理器的特定寄存器當(dāng)中。這個(gè)寄存器一般被稱作段表地址寄存器析珊。