內(nèi)存管理分頁(yè)技術(shù)
內(nèi)存管理分頁(yè)技術(shù),(簡(jiǎn)稱:分頁(yè))(Paging)是一種內(nèi)存管理方案,是將進(jìn)程以頁(yè)的形式從輔助內(nèi)存中檢索到主存中的過(guò)程,不需要連續(xù)分配物理內(nèi)存,將每個(gè)進(jìn)程劃分為頁(yè)。分頁(yè)的主要思想是將主存的虛擬(邏輯)地址空間和真實(shí)(物理)地址空間劃分成容量和大小相等的頁(yè),使所有地址都可以用頁(yè)號(hào)拼接頁(yè)內(nèi)地址的形式表示。
在計(jì)算機(jī)操作系統(tǒng)中,連續(xù)分配的算法阻礙了存儲(chǔ)管理方案的設(shè)計(jì),造成了大量的內(nèi)存碎片,因此需要考慮非連續(xù)分配的算法,分頁(yè)管理就是其中最具代表性的一種。1959年,亞多拉斯系統(tǒng)被開發(fā)出來(lái),使用分頁(yè)將虛擬地址映射到主存,并于1962年投入使用。1969年,IBM的研究人員證明了虛擬內(nèi)存覆蓋系統(tǒng)比早期的手動(dòng)系統(tǒng)工作得更好。在20世紀(jì)70年代,大型機(jī)和小型計(jì)算機(jī)通常使用虛擬內(nèi)存。1982年Intel在80286處理器的保護(hù)模式下引入了虛擬內(nèi)存,1985年80386出來(lái)的時(shí)候引入了分頁(yè)支持。
分頁(yè)存儲(chǔ)管理將內(nèi)存空間分成若干大小相等、位置固定的小分區(qū),每個(gè)小分區(qū)稱為一個(gè)存儲(chǔ)塊,依次編號(hào)。每個(gè)存儲(chǔ)塊的大小由不同的系統(tǒng)決定,一般是2的n次方。分頁(yè)提高了內(nèi)存管理的效率,進(jìn)而提高了系統(tǒng)性能和響應(yīng)能力。但是在頁(yè)面存儲(chǔ)下,程序的模塊化較差,需要占用大量的存儲(chǔ)空間。
發(fā)展歷史
早期操作系統(tǒng)采用的連續(xù)分配管理模式,要求分配給進(jìn)程的物理空間必須是連續(xù)的,這是產(chǎn)生大量碎片的主要原因,所以一直考慮非連續(xù)分配算法。在分頁(yè)技術(shù)出現(xiàn)之前,內(nèi)存管理方案偶爾會(huì)使用覆蓋技術(shù)。它只需要將CPU當(dāng)前需要的指令和數(shù)據(jù)保存在內(nèi)存中,以維持計(jì)算機(jī)系統(tǒng)的運(yùn)行。當(dāng)需要其他指令、數(shù)據(jù)或程序段時(shí),只需將它們加載到不再需要的指令所占用的內(nèi)存空間中。
分頁(yè)管理是不連續(xù)分配管理中具有代表性的算法,它要求將物理內(nèi)存空間劃分成固定大小的塊,分頁(yè)技術(shù)不會(huì)產(chǎn)生外部碎片。分頁(yè)技術(shù)的具體應(yīng)用可以追溯到一個(gè)早期的重要系統(tǒng)Atlas,它是在1959年開發(fā)的,使用分頁(yè)將虛擬地址映射到主存,并于1962年投入使用。1969年,IBM的研究人員證明了虛擬內(nèi)存覆蓋系統(tǒng)比早期的手動(dòng)系統(tǒng)工作得更好。在20世紀(jì)70年代,大型機(jī)和小型計(jì)算機(jī)通常使用虛擬內(nèi)存。1982年Intel在80286處理器的保護(hù)模式下引入了虛擬內(nèi)存,1985年80386出來(lái)的時(shí)候引入了分頁(yè)支持。
隨著分頁(yè)技術(shù)的不斷成熟,它已經(jīng)成為一種關(guān)鍵的內(nèi)存管理技術(shù),用于實(shí)現(xiàn)計(jì)算機(jī)操作系統(tǒng)中的虛擬內(nèi)存管理方法,提供進(jìn)程間的內(nèi)存保護(hù)和隔離。后來(lái)隨著硬件技術(shù)的發(fā)展,Intel在1985年推出了Intel 80386微處理器,開啟了處理器內(nèi)置分頁(yè)機(jī)制的時(shí)代。
為了降低分頁(yè)機(jī)制的缺頁(yè)率,提高虛擬內(nèi)存的性能,相關(guān)技術(shù)人員開發(fā)了許多頁(yè)面替換算法,包括最優(yōu)替換算法、先進(jìn)先出替換算法、最近未使用替換算法等頁(yè)面替換算法。20世紀(jì)10年代,云計(jì)算開始出現(xiàn)。是計(jì)算服務(wù)的分發(fā),虛擬化是云計(jì)算的基礎(chǔ),通過(guò)制作虛擬鏡像,有助于共享系統(tǒng)資源。分頁(yè)作為一種內(nèi)存管理技術(shù),也應(yīng)用于云計(jì)算,讀寫數(shù)據(jù)到硬盤。
工作原理
分頁(yè)的主要思想是將主存的虛擬(邏輯)地址空間和真實(shí)(物理)地址空間劃分成容量和大小相等的頁(yè)面,使所有地址都可以用頁(yè)號(hào)拼接頁(yè)內(nèi)地址的形式表示,按頁(yè)分配主存的存儲(chǔ)管理方式稱為頁(yè)管理。
系統(tǒng)中通常有一個(gè)地址翻譯機(jī)制,將程序在地址空間中的邏輯地址翻譯成在內(nèi)存空間中的物理地址,實(shí)現(xiàn)它們之間的重定位。當(dāng)訪問(wèn)和操作一個(gè)進(jìn)程的邏輯地址時(shí),地址翻譯機(jī)制自動(dòng)將有效邏輯地址根據(jù)頁(yè)面大小分為兩部分:頁(yè)碼和頁(yè)內(nèi)位移。邏輯地址除以頁(yè)面長(zhǎng)度得到的商和余數(shù)分別是邏輯頁(yè)碼和頁(yè)內(nèi)位移。
在分頁(yè)中,物理內(nèi)存被劃分為固定大小的塊,稱為頁(yè)幀,其大小與進(jìn)程使用的頁(yè)面大小相同。進(jìn)程的邏輯地址空間也分為固定大小的塊,稱為頁(yè)面,其大小與頁(yè)框相同。當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),操作系統(tǒng)將為該進(jìn)程分配一個(gè)或多個(gè)頁(yè)框,并將該進(jìn)程的邏輯頁(yè)映射到物理頁(yè)框。邏輯頁(yè)面和物理頁(yè)面幀之間的映射由頁(yè)面表維護(hù),內(nèi)存管理單元使用該頁(yè)面表將邏輯地址轉(zhuǎn)換為物理地址。頁(yè)表將每個(gè)邏輯頁(yè)號(hào)映射到物理頁(yè)框號(hào)。
分頁(yè)技術(shù)提高了主存的利用率,有利于多程序運(yùn)行,可以增加ram(隨機(jī)存取存儲(chǔ)器)或期望分頁(yè)的數(shù)量,提高RAM讀取的命中率來(lái)提高系統(tǒng)性能,還可以通過(guò)減少CPU等待從磁盤加載頁(yè)面的時(shí)間來(lái)提高性能。
頁(yè)表分類
多級(jí)頁(yè)面表:多級(jí)頁(yè)表可以去除頁(yè)表中的無(wú)效區(qū)域,對(duì)頁(yè)表進(jìn)行索引。采用分頁(yè)存儲(chǔ)管理模式時(shí),頁(yè)表會(huì)占用相當(dāng)大的內(nèi)存空間。因?yàn)楹茈y找到足夠的內(nèi)存空間來(lái)存儲(chǔ)頁(yè)表,所以也可以將頁(yè)表分成若干頁(yè)并進(jìn)行編號(hào),這樣就可以將每一頁(yè)離散地存儲(chǔ)在不同的物理塊中。為了管理這些頁(yè)表,需要建立另一個(gè)頁(yè)表,稱為外頁(yè)表,也就是頁(yè)表的索引表。外部頁(yè)表的每個(gè)頁(yè)表?xiàng)l目記錄頁(yè)表頁(yè)的物理塊號(hào)。
對(duì)于32位機(jī)器,采用兩級(jí)頁(yè)表結(jié)構(gòu)是合適的,但對(duì)于64位機(jī)器,則需要采用多級(jí)頁(yè)表,對(duì)外層頁(yè)表進(jìn)行分頁(yè),然后將每個(gè)頁(yè)離散地分布到不相連的物理塊中,再用二級(jí)頁(yè)表映射它們的關(guān)系。
散列頁(yè)表:哈希頁(yè)表是操作系統(tǒng)用來(lái)有效管理虛擬和物理內(nèi)存地址之間的內(nèi)存映射的數(shù)據(jù)結(jié)構(gòu)。與傳統(tǒng)的頁(yè)表相比,搜索速度更快,只存儲(chǔ)當(dāng)前使用的頁(yè)面的條目就可以減小頁(yè)表的大小。
使用以邏輯頁(yè)號(hào)作為哈希值的哈希頁(yè)表。在哈希頁(yè)表中,每個(gè)頁(yè)表項(xiàng)都包含一個(gè)鏈表,鏈表中元素的哈希值都指向同一個(gè)位置,哈希值相同的元素使用隊(duì)列處理沖突。哈希頁(yè)表的地址轉(zhuǎn)換過(guò)程是根據(jù)邏輯頁(yè)號(hào)找到哈希值,并將這個(gè)頁(yè)號(hào)與鏈表中第一個(gè)元素的字段進(jìn)行比較。如果匹配,則將對(duì)應(yīng)的物理塊號(hào)和位移拼接形成物理地址;如果不匹配,則沿著鏈表依次搜索匹配的頁(yè)表項(xiàng)。
倒頁(yè)表:傳統(tǒng)的頁(yè)表和哈希頁(yè)表包含數(shù)百萬(wàn)個(gè)頁(yè)表項(xiàng),會(huì)消耗大量的內(nèi)存空間。所以引入了倒排頁(yè)表,按物理地址排序。每個(gè)物理塊都有一個(gè)條目,每個(gè)條目包含物理塊中存儲(chǔ)的頁(yè)面的邏輯地址和擁有該頁(yè)面的進(jìn)程的信息。當(dāng)使用倒排頁(yè)表進(jìn)行地址轉(zhuǎn)換時(shí),將根據(jù)進(jìn)程標(biāo)識(shí)符和頁(yè)碼檢索倒排頁(yè)表。如果檢索到匹配的頁(yè)表項(xiàng),則頁(yè)表項(xiàng)的序列號(hào)(中間的)是該頁(yè)的物理塊號(hào),它可以與頁(yè)中的地址一起用于形成物理地址,并將其發(fā)送到存儲(chǔ)器地址寄存器。如果搜索了整個(gè)倒排頁(yè)表,但沒有找到匹配的頁(yè)表?xiàng)l目,則意味著該頁(yè)還沒有被加載到內(nèi)存中。
分頁(yè)方法
請(qǐng)求頁(yè)面調(diào)度:在按需分頁(yè)中,操作系統(tǒng)僅在程序運(yùn)行時(shí)將程序的必要頁(yè)面加載到內(nèi)存中。當(dāng)程序啟動(dòng)時(shí),它首先不會(huì)將任何頁(yè)面加載到內(nèi)存中。當(dāng)程序訪問(wèn)當(dāng)前不在內(nèi)存中的頁(yè)面時(shí),會(huì)發(fā)生頁(yè)面錯(cuò)誤,然后操作系統(tǒng)將所需的頁(yè)面從磁盤加載到內(nèi)存中,并相應(yīng)地更新頁(yè)面表。
高級(jí)分頁(yè):預(yù)分頁(yè)將所有頁(yè)面加載到內(nèi)存中,當(dāng)進(jìn)程實(shí)際引用這些頁(yè)面時(shí),它們將被一起調(diào)用,因此加載到主存中的頁(yè)面可能會(huì)被使用,也可能不會(huì)被使用。預(yù)分頁(yè)是用來(lái)在進(jìn)程開始的時(shí)候盡量減少大量的頁(yè)面錯(cuò)誤,但是會(huì)有資源的浪費(fèi)。
分段分頁(yè):段-頁(yè)管理模式是將進(jìn)程的邏輯地址空間分段,建立段表,實(shí)現(xiàn)分段模式下的地址翻譯,然后對(duì)每個(gè)段進(jìn)行分頁(yè)建立頁(yè)表,實(shí)現(xiàn)分頁(yè)模式下的地址翻譯。大多數(shù)CPU都采用這種思路,比如Intel CPU的Intel 80386架構(gòu)。
命中缺頁(yè):當(dāng)CPU試圖從主內(nèi)存中獲取所需的頁(yè)面,并且該頁(yè)面存在于主內(nèi)存(RAM)中時(shí),這被稱為“頁(yè)面命中”,當(dāng)頁(yè)面丟失時(shí),就會(huì)發(fā)生“未命中”。當(dāng)進(jìn)程試圖訪問(wèn)物理內(nèi)存中不存在的頁(yè)面時(shí),就會(huì)發(fā)生頁(yè)面錯(cuò)誤。頁(yè)面出錯(cuò)的原因有三:一是頁(yè)面從未被加載到內(nèi)存中;第二,頁(yè)面已經(jīng)從內(nèi)存中刪除;第三,頁(yè)面在內(nèi)存中被修改,需要寫回磁盤。
操作系統(tǒng)使用分頁(yè)方法或終止進(jìn)程來(lái)處理頁(yè)面錯(cuò)誤。如果該頁(yè)不重要或者程序不在臨界區(qū),則終止程序,或者將未使用的頁(yè)移到輔助存儲(chǔ)器,并將導(dǎo)致頁(yè)面錯(cuò)誤的頁(yè)引入主存儲(chǔ)器。此外,通過(guò)使用適合當(dāng)前需求并最大化頁(yè)面命中率的適當(dāng)頁(yè)面替換算法,可以減輕頁(yè)面錯(cuò)誤對(duì)性能的影響。
缺頁(yè)率:缺頁(yè)率是指一定時(shí)間內(nèi)缺頁(yè)中斷次數(shù)與頁(yè)面趨勢(shì)次數(shù)的比值。缺頁(yè)中斷是影響程序性能的一個(gè)重要指標(biāo)。系統(tǒng)在處理缺頁(yè)中斷時(shí)會(huì)產(chǎn)生大量的開銷。通常,缺頁(yè)率越低,系統(tǒng)的性能就越高。缺頁(yè)率計(jì)算過(guò)程舉例:采用最優(yōu)替換算法,假設(shè)系統(tǒng)給一個(gè)進(jìn)程分配三個(gè)物理塊,進(jìn)程運(yùn)行時(shí)的頁(yè)面走向?yàn)?4,3,2,1,4,3,5,4,3,2,3,5,三個(gè)物理塊一開始都是空閑的。
頁(yè)面替換:頁(yè)面替換是當(dāng)一個(gè)頁(yè)面由于缺頁(yè)而中斷時(shí)所采用的策略。頁(yè)面替換算法可以選擇換出頁(yè)面,并將內(nèi)存中的頁(yè)面換出到外部存儲(chǔ)器。常用的頁(yè)面替換算法包括OPT、FIFO、LRU等頁(yè)面替換算法。
最佳置換算法:最好的替換算法是從存儲(chǔ)器中選擇不再被訪問(wèn)的頁(yè)面或者在最長(zhǎng)時(shí)間之后需要被訪問(wèn)的頁(yè)面來(lái)消除。這種算法很難實(shí)現(xiàn),因?yàn)楹茈y準(zhǔn)確預(yù)測(cè)頁(yè)面訪問(wèn)的未來(lái)順序,但可以用來(lái)評(píng)估其他算法的優(yōu)劣。
先進(jìn)先出排列算法:先進(jìn)先出替換算法總是選擇在內(nèi)存中停留時(shí)間最長(zhǎng)的頁(yè)面進(jìn)行淘汰,即先進(jìn)入內(nèi)存的頁(yè)面先退出內(nèi)存。這個(gè)算法很容易實(shí)現(xiàn),但是沒有考慮到緩存頁(yè)面被使用的情況,會(huì)有一個(gè)頻繁訪問(wèn)的頁(yè)面會(huì)被清除出緩存。最近一段時(shí)間內(nèi)最長(zhǎng)時(shí)間未被訪問(wèn)的頁(yè)面由最長(zhǎng)時(shí)間替換算法選擇以被消除。這種算法的性能接近最佳算法,但實(shí)現(xiàn)起來(lái)比較困難。它需要花費(fèi)巨大的系統(tǒng)開銷來(lái)找出最長(zhǎng)時(shí)間沒有使用的頁(yè)面,為每個(gè)頁(yè)面設(shè)置相關(guān)記錄,記錄頁(yè)面訪問(wèn)情況。
其他頁(yè)面替換算法
第二次機(jī)會(huì)算法:第二次機(jī)會(huì)算法是先進(jìn)先出算法的改進(jìn),以避免消除頻繁使用的頁(yè)面。它與頁(yè)表中的“參考位”相結(jié)合。算法的實(shí)現(xiàn)思想是:在選擇一個(gè)頁(yè)面替換時(shí),先檢查先入先出頁(yè)面隊(duì)列中隊(duì)列的第一頁(yè)。如果其“參考位”為0,則消除該頁(yè)面。如果為1,則將它的“參考位”清除為0。
簡(jiǎn)單時(shí)鐘算法:簡(jiǎn)單時(shí)鐘算法是二次機(jī)會(huì)算法的改進(jìn),也是LRU算法的近似。該算法要求為每個(gè)頁(yè)面設(shè)置一個(gè)訪問(wèn)位,并將內(nèi)存中的所有頁(yè)面鏈接到一個(gè)循環(huán)隊(duì)列中。當(dāng)訪問(wèn)頁(yè)面時(shí),系統(tǒng)將其訪問(wèn)位設(shè)置為1。替換時(shí),使用指針從當(dāng)前指針位置開始按順序檢查頁(yè)面。如果訪問(wèn)位為0,則選擇要替換的頁(yè)面。如果訪問(wèn)位為1,則其被設(shè)置為0,并且重復(fù)該過(guò)程,直到找到具有0的參考頁(yè)面的頁(yè)面。最后,指針停留在被替換頁(yè)面的下一頁(yè)。
分配策略
在計(jì)算機(jī)操作系統(tǒng)中,內(nèi)存分配策略包括固定分配和可變分配,在替換頁(yè)面時(shí)也可以采用兩種策略,即全局替換和局部替換。全局替換允許一個(gè)進(jìn)程從所有內(nèi)存物理塊的集合中選擇過(guò)時(shí)對(duì)象,而局部替換規(guī)定每個(gè)進(jìn)程只能從分配給它的物理塊中選擇過(guò)時(shí)對(duì)象。
固定分配:固定分配是一種持續(xù)的內(nèi)存管理技術(shù),在這種技術(shù)中,主內(nèi)存被劃分為固定大小的分區(qū)(分區(qū)大小可以相等,也可以不相等)。當(dāng)需要分配進(jìn)程內(nèi)存時(shí),會(huì)找到一個(gè)足夠大的空閑分區(qū)來(lái)容納該進(jìn)程。然后將內(nèi)存分配給該進(jìn)程。如果沒有空閑空間,進(jìn)程就在隊(duì)列中等待分配內(nèi)存。
可變分配:變量分配也是一種連續(xù)內(nèi)存管理技術(shù),在這種技術(shù)中,不會(huì)將主內(nèi)存劃分為分區(qū),而是將足夠大的可用內(nèi)存塊分配給進(jìn)程。剩余的空間被視為可用空間,可以被其他進(jìn)程進(jìn)一步使用。它還提供了壓縮的概念。在壓縮中,空閑空間和未分配給進(jìn)程的空間組合在一起,形成一個(gè)大的內(nèi)存空間。
分享保護(hù)
保護(hù):分頁(yè)技術(shù)為進(jìn)程間的內(nèi)存提供保護(hù)和隔離。通過(guò)為每個(gè)進(jìn)程分配一個(gè)獨(dú)立的虛擬地址空間和頁(yè)表,保證了進(jìn)程只能訪問(wèn)自己的存儲(chǔ)空間。每個(gè)邏輯地址訪問(wèn)都通過(guò)硬件地址轉(zhuǎn)換機(jī)制映射到進(jìn)程的物理地址空間。這樣,所有的進(jìn)程活動(dòng)都被限制在它們自己的內(nèi)存空間中。確保一個(gè)進(jìn)程不能訪問(wèn)或修改另一個(gè)進(jìn)程的內(nèi)存。
分享:操作系統(tǒng)中有許多程序和數(shù)據(jù)由多個(gè)作業(yè)共享。內(nèi)存中的每個(gè)進(jìn)程在調(diào)用它們之前,必須將這些共享的程序和數(shù)據(jù)放入自己的地址空間。在共享內(nèi)存中,內(nèi)存的一部分被映射到一個(gè)或多個(gè)進(jìn)程的地址空間,操作系統(tǒng)在這個(gè)內(nèi)存段中讀寫。要實(shí)現(xiàn)信息共享,需要解決共享信息的保護(hù)問(wèn)題,可以通過(guò)在頁(yè)表中增加一個(gè)標(biāo)志位來(lái)表示該頁(yè)的信息只讀/讀寫/可執(zhí)行狀態(tài),并在進(jìn)程訪問(wèn)該頁(yè)時(shí)檢查訪問(wèn)方式來(lái)實(shí)現(xiàn)。重入技術(shù)也是一種實(shí)現(xiàn)共享的技術(shù),支持內(nèi)存的高效使用。共享程序的副本只留在內(nèi)存中,其他共享者用指針連接,幫助系統(tǒng)解決多任務(wù)共享同一個(gè)程序的問(wèn)題。
優(yōu)點(diǎn)缺點(diǎn)
優(yōu)勢(shì):空間利用率高:進(jìn)程不需要占用內(nèi)存中連續(xù)的空間,減少了內(nèi)存碎片,提高了主存的空間利用率。每個(gè)程序最多浪費(fèi)不到一頁(yè)的內(nèi)存空間。
頁(yè)表結(jié)構(gòu)簡(jiǎn)單:與段表相比,頁(yè)表結(jié)構(gòu)更簡(jiǎn)單,字段更少,可以有效節(jié)省頁(yè)表所需的存儲(chǔ)空間。
快速地址轉(zhuǎn)換:地址轉(zhuǎn)換只需要建立虛擬頁(yè)號(hào)和實(shí)際頁(yè)號(hào)的映射關(guān)系,簡(jiǎn)化了用戶程序加載到主存的過(guò)程,加快了地址轉(zhuǎn)換的速度。
輔助存儲(chǔ)管理的簡(jiǎn)化:頁(yè)的大小通常是512字節(jié)的整數(shù)倍,現(xiàn)代存儲(chǔ)系統(tǒng)中常見的頁(yè)的大小范圍是1KB到16KB,簡(jiǎn)化了輔助存儲(chǔ)的管理。
劣勢(shì):程序的模塊化較差:在頁(yè)面存儲(chǔ)管理下,用戶程序被劃分為固定大小的頁(yè)面,程序段的實(shí)際長(zhǎng)度不固定,因此一個(gè)頁(yè)面可能只是一個(gè)程序段的一部分,也可能在一個(gè)頁(yè)面中包含兩個(gè)或兩個(gè)以上的程序段,不能代表一個(gè)完整的程序段功能。內(nèi)存空間占用大:頁(yè)表的長(zhǎng)度也比較長(zhǎng),需要占用很大的存儲(chǔ)空間。通常,虛擬內(nèi)存的每一頁(yè)都在頁(yè)表中占據(jù)一個(gè)存儲(chǔ)字。如果分頁(yè)虛擬內(nèi)存的虛擬空間為4GB,每頁(yè)的大小為1KB,則頁(yè)數(shù)為4M,頁(yè)表的容量為4M存儲(chǔ)字。
性能影響
影響因素:分頁(yè)系統(tǒng)的性能取決于各種因素,包括頁(yè)大小、頁(yè)表大小、頁(yè)替換算法和頁(yè)表組織。
頁(yè)面大小:頁(yè)面大小越大,需要的頁(yè)表就越少,這可能會(huì)導(dǎo)致更快的內(nèi)存訪問(wèn)時(shí)間。但是,較大的頁(yè)面大小也會(huì)導(dǎo)致內(nèi)部碎片,并且會(huì)由于進(jìn)程的實(shí)際大小與頁(yè)面大小之間的差異而浪費(fèi)內(nèi)存。
頁(yè)面替換算法:分頁(yè)的性能取決于所使用的頁(yè)面替換算法,算法的選擇會(huì)影響頁(yè)面出錯(cuò)的次數(shù)和訪問(wèn)頁(yè)面所需的時(shí)間;用于將虛擬地址映射到物理地址的頁(yè)表大小將影響存儲(chǔ)器訪問(wèn)速度。頁(yè)表越大,內(nèi)存訪問(wèn)時(shí)間越慢。
頁(yè)表大小:頁(yè)表的組織也會(huì)影響分頁(yè)的性能。例如,分層頁(yè)表可以減小頁(yè)表的大小,提高內(nèi)存訪問(wèn)速度。
系統(tǒng)顛簸:系統(tǒng)顛簸也會(huì)影響計(jì)算機(jī)系統(tǒng)的性能,是由于頻繁的頁(yè)面調(diào)度活動(dòng)導(dǎo)致系統(tǒng)效率大大降低的現(xiàn)象。Bump在大多數(shù)情況下會(huì)使系統(tǒng)處于等待狀態(tài),進(jìn)程被頻繁訪問(wèn)、調(diào)入和淘汰,會(huì)耗費(fèi)大量的系統(tǒng)開銷,降低系統(tǒng)的性能。
這種現(xiàn)象可以通過(guò)添加性能分析和調(diào)整軟件,持續(xù)監(jiān)控執(zhí)行任務(wù)的缺頁(yè)情況,并動(dòng)態(tài)調(diào)整它們的頁(yè)面分配,增加分配給那些產(chǎn)生大量缺頁(yè)的任務(wù)的可用頁(yè)面來(lái)解決。
應(yīng)付策略
翻譯后備緩沖區(qū)(TLB):為了解決由于進(jìn)程存儲(chǔ)器太大而導(dǎo)致寄存器可能無(wú)法容納所有頁(yè)表?xiàng)l目的問(wèn)題,為頁(yè)表?xiàng)l目設(shè)置了一個(gè)稱為翻譯后備緩沖器(TLB)的高速緩存,以跟蹤最近使用的事務(wù)。當(dāng)進(jìn)行進(jìn)程調(diào)用時(shí),TLB首先檢查該頁(yè)是否已經(jīng)在主存中,如果不在主存中,它發(fā)出一個(gè)頁(yè)錯(cuò)誤,然后更新TLB以包含一個(gè)新的頁(yè)條目。
軟件干預(yù):通過(guò)添加性能分析和調(diào)整軟件,我們可以持續(xù)監(jiān)控執(zhí)行任務(wù)的缺頁(yè)情況,并動(dòng)態(tài)調(diào)整它們的頁(yè)面分配。對(duì)于那些產(chǎn)生大量缺頁(yè)的任務(wù),我們可以增加分配給它們的可用頁(yè)面來(lái)解決系統(tǒng)顛簸現(xiàn)象。