日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
了解linux內(nèi)存分頁(yè)機(jī)制(linux內(nèi)存分頁(yè)機(jī)制)

了解linux內(nèi)存分頁(yè)機(jī)制

創(chuàng)新互聯(lián)專注于撫寧企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城網(wǎng)站開(kāi)發(fā)。撫寧網(wǎng)站建設(shè)公司,為撫寧等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

在操作系統(tǒng)中,內(nèi)存的管理是一個(gè)非常重要的問(wèn)題。在Linux的內(nèi)存管理中,分頁(yè)機(jī)制是非常核心的一部分。了解了Linux內(nèi)存分頁(yè)機(jī)制,可以讓我們更好地理解Linux操作系統(tǒng)的工作原理,并同時(shí)有效地提升我們的系統(tǒng)維護(hù)與管理能力。

為什么需要分頁(yè)機(jī)制?

在早期的操作系統(tǒng)中,內(nèi)存的管理方式是直接映射,即將內(nèi)存直接映射到物理存儲(chǔ)器。但這種方式會(huì)存在一些問(wèn)題。因?yàn)檫M(jìn)程會(huì)調(diào)用大量的指令和數(shù)據(jù),當(dāng)內(nèi)存資源不足時(shí),使用直接映射方式時(shí),就會(huì)出現(xiàn)無(wú)法分配內(nèi)存的情況,而進(jìn)程將無(wú)法正常運(yùn)行。

分頁(yè)機(jī)制則可以有效解決這個(gè)問(wèn)題,它將內(nèi)存劃分成了等大小的數(shù)據(jù)塊,即頁(yè),每一頁(yè)在物理內(nèi)存上也對(duì)應(yīng)著不同的頁(yè)框。當(dāng)進(jìn)程需要內(nèi)存空間時(shí),分頁(yè)機(jī)制會(huì)自動(dòng)調(diào)度物理內(nèi)存上的空閑頁(yè)框,為程序分配內(nèi)存。這樣,無(wú)論進(jìn)程調(diào)用的指令和數(shù)據(jù)大小是多少,都可以只分配所需的空間大小,避免內(nèi)存浪費(fèi)。

什么是頁(yè)表?

分頁(yè)機(jī)制中,頁(yè)和頁(yè)框是一一對(duì)應(yīng)的,每個(gè)頁(yè)都需在物理內(nèi)存上占據(jù)一個(gè)頁(yè)框。為了建立內(nèi)存的邏輯地址空間和物理地址空間之間一一對(duì)應(yīng)關(guān)系,需要建立一個(gè)頁(yè)表,它記錄了每個(gè)頁(yè)的物理地址對(duì)應(yīng)的頁(yè)框地址。頁(yè)表通常是一個(gè)由操作系統(tǒng)維護(hù)的數(shù)據(jù)結(jié)構(gòu),可通過(guò)MMU硬件實(shí)現(xiàn)分頁(yè)機(jī)制,并管理進(jìn)程的內(nèi)存。

頁(yè)表通常由兩個(gè)部分組成:一部分是頁(yè)目錄,另一部分是頁(yè)表。頁(yè)目錄中記錄著頁(yè)表的物理地址,而頁(yè)表中是一個(gè)映射關(guān)系表。通過(guò)頁(yè)表,操作系統(tǒng)可以將進(jìn)程的虛擬地址轉(zhuǎn)換成物理地址,幫助CPU實(shí)現(xiàn)內(nèi)存尋址的過(guò)程。

頁(yè)表還可以實(shí)現(xiàn)內(nèi)存保護(hù)的功能。在頁(yè)表中,可以將某個(gè)頁(yè)設(shè)置為只讀的,防止程序誤寫(xiě)該頁(yè)的內(nèi)容。也可以將某個(gè)頁(yè)設(shè)置為一個(gè)不可訪問(wèn)的頁(yè),以防止程序讀寫(xiě)該頁(yè)的內(nèi)容。

Linux分頁(yè)管理方式

在Linux中,通過(guò)分頁(yè)機(jī)制來(lái)管理進(jìn)程的內(nèi)存。通常情況下,Linux采用的是4KB大小的物理頁(yè)框。對(duì)于每個(gè)進(jìn)程,Linux都為其分配了一組獨(dú)立的頁(yè)表,用于將其虛擬地址空間映射到物理地址空間。

Linux中,頁(yè)表的建立、更新、銷毀都是由內(nèi)核來(lái)完成的。當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),內(nèi)核會(huì)根據(jù)頁(yè)表為其分配物理頁(yè)框并建立映射關(guān)系,如果內(nèi)存不足,則會(huì)將一些物理頁(yè)框交換到磁盤(pán)上進(jìn)行緩存,從而為新進(jìn)程騰出一些物理內(nèi)存空間。同時(shí),Linux內(nèi)核還支持多種內(nèi)存管理策略,如伙伴系統(tǒng)和slab分配器等。

在Linux中,分頁(yè)機(jī)制是實(shí)現(xiàn)內(nèi)存管理的核心技術(shù)之一。掌握Linux的內(nèi)存分頁(yè)機(jī)制,可以更加深入地理解Linux的內(nèi)存管理原理,并通過(guò)編寫(xiě)程序和接受故障來(lái)維護(hù)和優(yōu)化Linux系統(tǒng)。分頁(yè)機(jī)制也是內(nèi)存管理的基礎(chǔ),可以幫助我們更清晰地認(rèn)識(shí)計(jì)算機(jī)硬件和操作系統(tǒng)內(nèi)部的工作方式,對(duì)于開(kāi)發(fā)者和系統(tǒng)管理員來(lái)說(shuō),了解分頁(yè)機(jī)制是非常重要的。

相關(guān)問(wèn)題拓展閱讀:

  • Linux存儲(chǔ)管理方式
  • 《操作系統(tǒng)概念精要》之內(nèi)存篇(三)-分頁(yè)的頁(yè)表結(jié)構(gòu)

Linux存儲(chǔ)管理方式

這種方式中,將用戶程序的地址空間,注意,是

用戶程序的地址空間

分為若干個(gè)固定大小的區(qū)域,成為“頁(yè)”或“頁(yè)面”。我們可以知道,這也頁(yè)其實(shí)是不存在的,只是一種劃分內(nèi)存空間的方法。也就是說(shuō),這種方式將用戶的程序

“肢解”

了,分成很多個(gè)小的部分,每個(gè)部分稱為一個(gè)“頁(yè)”。

將邏輯地址的前n位作為頁(yè)號(hào),后面32-n位作為頁(yè)內(nèi)偏移量。

由于進(jìn)程的最后一頁(yè)經(jīng)常裝不滿一個(gè)塊,從而形成了不可利指洞用的碎片,稱之為

“頁(yè)內(nèi)碎片”

。

作用:實(shí)現(xiàn)頁(yè)號(hào)到物理號(hào)的地址映射。

頁(yè)表是記錄邏輯空間(虛擬內(nèi)存)中每一頁(yè)在內(nèi)存中對(duì)應(yīng)的物理塊號(hào)。但并非每一頁(yè)邏輯空間都會(huì)實(shí)際對(duì)應(yīng)著一個(gè)物理塊,只有實(shí)際駐留在物理內(nèi)存空間中的頁(yè)才會(huì)對(duì)應(yīng)著物理塊。

系統(tǒng)會(huì)為每一個(gè)進(jìn)程建立一張頁(yè)表,頁(yè)表是需要一直駐留在物理內(nèi)存中的(多級(jí)頁(yè)表除外),另外頁(yè)表的起址和長(zhǎng)度存放在 PCB(Process Control Block)進(jìn)程控制結(jié)構(gòu)體中。

可以在頁(yè)表的表項(xiàng)中設(shè)置相關(guān)的權(quán)限控制字段,例如設(shè)置存取控制字段,用于保護(hù)該存儲(chǔ)塊的讀寫(xiě);若存取控制字段為2位,則可以設(shè)置讀/寫(xiě)、只讀和只執(zhí)行等存取方式。

物理塊唯念枯是實(shí)實(shí)在在存在于內(nèi)存中的:

由于執(zhí)行頻率高,要求效率比較高,需要使用硬件實(shí)現(xiàn)。

在系統(tǒng)中設(shè)置一個(gè)

頁(yè)表寄存器(PTR)

,其中存放頁(yè)表在內(nèi)存的起始地址和頁(yè)表的長(zhǎng)度。平時(shí)進(jìn)程未執(zhí)行的時(shí)候,頁(yè)表的起始地址和頁(yè)表長(zhǎng)度放在本進(jìn)程的PCB中。當(dāng)調(diào)度程序調(diào)度到某個(gè)進(jìn)程的時(shí)候,才將這兩個(gè)數(shù)據(jù)裝入

頁(yè)表寄存器

變換過(guò)程:

快表的變換機(jī)構(gòu)

為了提高地址變換速度,可在地址變換機(jī)構(gòu)中增設(shè)一個(gè)具有并行查詢能力的特殊高速緩沖寄存器,又稱為”聯(lián)想寄存器”或者“快表”。俗稱TLB。

快表與頁(yè)表的功能類似,其實(shí)就是將一部分頁(yè)表存到 CPU 內(nèi)部的高速緩沖存儲(chǔ)器 Cache。CPU 尋址時(shí)先到快表查詢相應(yīng)的頁(yè)表項(xiàng)形成物理地址,如果查詢不到,則到內(nèi)存中查詢,并將對(duì)應(yīng)頁(yè)表項(xiàng)調(diào)入到快表中。但,如果快表的存儲(chǔ)空間已滿,則需要通過(guò)算法找到一個(gè)暫時(shí)不再需要的頁(yè)表項(xiàng),將它換出內(nèi)存。

由于成本的關(guān)系,快表不可能做得很大,通常只存放 16~512 個(gè)頁(yè)表項(xiàng),這對(duì)中、高亮小型作業(yè)來(lái)說(shuō),已有可能把全部頁(yè)表項(xiàng)放在快表中;但對(duì)于大型作業(yè)而言,則只能將其一部分頁(yè)表項(xiàng)放入其中。由于對(duì)程序和數(shù)據(jù)的訪問(wèn)往往帶有局限性,因此,據(jù)統(tǒng)計(jì),從快表中能找到所需頁(yè)表項(xiàng)的概率可達(dá) 90% 以上。這樣,由于增加了地址變換機(jī)構(gòu)而造成的速度損失可減少到 10% 以下,達(dá)到了可接受的程度。

我們可以采用這樣兩個(gè)方法來(lái)解決這一問(wèn)題:

① 對(duì)于頁(yè)表所需的內(nèi)存空間,可采用離散分配方式,以解決難以找到一塊連續(xù)的大內(nèi)存空間的問(wèn)題;

只將當(dāng)前需要的部分頁(yè)表項(xiàng)調(diào)入內(nèi)存,其余的頁(yè)表項(xiàng)仍駐留在磁盤(pán)上,需要時(shí)再調(diào)入。

二級(jí)頁(yè)表的頁(yè)表項(xiàng):

過(guò)程:

在采用兩級(jí)頁(yè)表結(jié)構(gòu)的情況下,對(duì)于正在運(yùn)行的進(jìn)程,必須將其外層頁(yè)表調(diào)入內(nèi)存,而對(duì)于內(nèi)頁(yè)表則只需調(diào)入一頁(yè)或幾頁(yè)。為了表征某頁(yè)的頁(yè)表是否已經(jīng)調(diào)入內(nèi)存,還應(yīng)在外層頁(yè)表項(xiàng)中增設(shè)一個(gè)狀態(tài)位 S,其值若為 0,表示該頁(yè)表分頁(yè)不在內(nèi)存中,否則說(shuō)明其分頁(yè)已調(diào)入內(nèi)存。進(jìn)程運(yùn)行時(shí),地址變換機(jī)構(gòu)根據(jù)邏輯地址中的 P1去查找外層頁(yè)表;若所找到的頁(yè)表項(xiàng)中的狀態(tài)位為 0,則產(chǎn)生一個(gè)中斷信號(hào),請(qǐng)求 OS 將該頁(yè)表分頁(yè)調(diào)入內(nèi)存。

多級(jí)頁(yè)表和二級(jí)頁(yè)表類似。多級(jí)頁(yè)表和二級(jí)頁(yè)表是為了節(jié)省物理內(nèi)存空間。使得頁(yè)表可以在內(nèi)存中離散存儲(chǔ)。(單級(jí)頁(yè)表為了隨機(jī)訪問(wèn)必須連續(xù)存儲(chǔ),如果虛擬內(nèi)存空間很大,就需要很多頁(yè)表項(xiàng),就需要很大的連續(xù)內(nèi)存空間,但是多級(jí)頁(yè)表不需要。)

為什么引入分段存儲(chǔ)管理?

引入效果:

它將用戶程序的地址空間分為若干個(gè)大小不同的的段,每個(gè)段可以定義一組完整的信息。

段號(hào)表示段名,每個(gè)段都從0開(kāi)始編址,并且采用一段連續(xù)的地址空間。

在該地址結(jié)構(gòu)中,允許一個(gè)作業(yè)最長(zhǎng)有64K個(gè)段,每個(gè)段的更大長(zhǎng)度為64KB。

在分段式存儲(chǔ)管理系統(tǒng)中,為每一個(gè)分段分配一個(gè)連續(xù)的分區(qū)。進(jìn)程的各個(gè)段,可以離散地裝入內(nèi)存中不同的分區(qū)中。

作用:實(shí)現(xiàn)從邏輯地址到物理內(nèi)存區(qū)的映射。

為了保證程序能夠正常運(yùn)行,就必須能夠從物理內(nèi)存中找出每個(gè)邏輯段所對(duì)應(yīng)的位置。為此在系統(tǒng)中會(huì)為每一個(gè)進(jìn)程建立一張

段表

。每個(gè)段在表中有一個(gè)表項(xiàng),其中記錄了該段在內(nèi)存中的起始地址和段的長(zhǎng)度。一般將段表保存在內(nèi)存中。

在配置了段表之后,執(zhí)行的過(guò)程可以通過(guò)查找段表,找到每一個(gè)段所對(duì)應(yīng)的內(nèi)存區(qū)。

為了實(shí)現(xiàn)進(jìn)程從邏輯地址到物理地址的變換功能,在系統(tǒng)設(shè)置了段表寄存器,用于存放段表的起始地址和段表長(zhǎng)度TL。

在進(jìn)行地址變換時(shí),系統(tǒng)將邏輯地址中的段號(hào)與段表長(zhǎng)度TL 進(jìn)行比較。若 S > TL,表示段號(hào)太大,是訪問(wèn)越界,于是產(chǎn)生越界中斷信號(hào)。若未越界,則根據(jù)段表的始址和該段的段號(hào),計(jì)算出該段對(duì)應(yīng)段表項(xiàng)的位置,從中讀出該段在內(nèi)存的起始地址。然后,再檢查段內(nèi)地址 d 是否超過(guò)該段的段長(zhǎng) SL。若超過(guò),即 d>SL,同樣發(fā)出越界中斷信號(hào)。若未越界,則將該段的基址 d 與段內(nèi)地址相加,即可得到要訪問(wèn)的內(nèi)存。

分頁(yè)和分段系統(tǒng)相似之處:兩者都采用離散分配方式,且都是通過(guò)地址映射機(jī)構(gòu)實(shí)現(xiàn)地址變換。

但在概念上兩者完全不同,主要表現(xiàn)在下述三個(gè)方面:

分頁(yè)系統(tǒng)以頁(yè)面作為內(nèi)存分配的基本單位,能有效地提高內(nèi)存利用率,而分段系統(tǒng)以段作為內(nèi)存分配的基本單位,它能夠更好地滿足用戶多方面的需要。

段頁(yè)式地址結(jié)構(gòu)由段號(hào)、段內(nèi)頁(yè)號(hào)及頁(yè)內(nèi)地址三部分所組成

段頁(yè)式系統(tǒng)的基本原理是分段和分頁(yè)原理的結(jié)合,即先將用戶程序分成若干個(gè)段,再把每個(gè)段分成若干個(gè)頁(yè),并為每一個(gè)段賦予一個(gè)段名。如下圖展示了一個(gè)作業(yè)地址空間的結(jié)構(gòu)。該作業(yè)有三個(gè)段:主程序段、子程序段和數(shù)據(jù)段;頁(yè)面大小為 4 KB:

在段頁(yè)式系統(tǒng)中,為了實(shí)現(xiàn)從邏輯地址到物理地址的變換,系統(tǒng)中需要同時(shí)配置段表和頁(yè)表。段表的內(nèi)容與分段系統(tǒng)略有不同,它不再是內(nèi)存始址和段長(zhǎng),而是頁(yè)表始址和頁(yè)表長(zhǎng)度。下圖展示出了利用段表和頁(yè)表進(jìn)行從用戶地址空間到物理(內(nèi)存)空間的映射。

在段頁(yè)式系統(tǒng)中,為了便于實(shí)現(xiàn)地址變換,須配置一個(gè)段表寄存器,其中存放段表始址和段長(zhǎng) TL。進(jìn)行地址變換時(shí),首先利用段號(hào) S,將它與段長(zhǎng) TL 進(jìn)行比較。若 S

在段頁(yè)式系統(tǒng)中,為了獲得一條指令或數(shù)據(jù),須三次訪問(wèn)內(nèi)存。之一次訪問(wèn)是訪問(wèn)內(nèi)存中的段表,從中取得頁(yè)表始址;第二次訪問(wèn)是訪問(wèn)內(nèi)存中的頁(yè)表,從中取出該頁(yè)所在的物理塊號(hào),并將該塊號(hào)與頁(yè)內(nèi)地址一起形成指令或數(shù)據(jù)的物理地址;第三次訪問(wèn)才是真正從第二次訪問(wèn)所得的地址中取出指令或數(shù)據(jù)。

顯然,這使訪問(wèn)內(nèi)存的次數(shù)增加了近兩倍。為了提高執(zhí)行速度,在地址變換機(jī)構(gòu)中增設(shè)一個(gè)高速緩沖寄存器。每次訪問(wèn)它時(shí),都須同時(shí)利用段號(hào)和頁(yè)號(hào)去檢索高速緩存,若找到匹配的表項(xiàng),便可從中得到相應(yīng)頁(yè)的物理塊號(hào),用來(lái)與頁(yè)內(nèi)地址一起形成物理

參考鏈接:

《操作系統(tǒng)概念精要》之內(nèi)存篇(三)-分頁(yè)的頁(yè)表結(jié)構(gòu)

之前討論了分段和分頁(yè),現(xiàn)在看下頁(yè)表的主要涉及的頁(yè)表結(jié)構(gòu)。

大多數(shù)現(xiàn)代計(jì)算機(jī)系統(tǒng)支持大邏輯地址空間(2^32 ~ 2^64)。這種情況下,頁(yè)表本身可以非常大。

例如:假如具有32位邏輯地址空間的一個(gè)計(jì)算機(jī)系統(tǒng)。如果系統(tǒng)的頁(yè)大小為4KB(2^12)。那么頁(yè)表可以多達(dá)100萬(wàn)的條目 (2^32/ 2^12)。假設(shè)某個(gè)項(xiàng)目有4字節(jié)。那么每個(gè)進(jìn)程需要4MB的地址物理地址來(lái)存儲(chǔ)頁(yè)表本身。顯然,我們并不想在內(nèi)存中連續(xù)分配這么多頁(yè)表。

這個(gè)問(wèn)題的一個(gè)簡(jiǎn)單的解決方法就是講頁(yè)表劃分為更小的塊。完成這種劃分方法有很多種。

最簡(jiǎn)單的方法就是使用兩層分頁(yè)算法,就是將頁(yè)表再分頁(yè),例如,再次假設(shè)一個(gè)系統(tǒng),具有32位邏輯地址空間和4K大小的頁(yè)。一個(gè)邏輯地址被分為20位的頁(yè)碼和12位的頁(yè)偏移。

因此要對(duì)20位的頁(yè)表進(jìn)行再分頁(yè),所以該頁(yè)碼可以分10位的頁(yè)碼和10位的偏移。這樣一個(gè)邏輯地址就會(huì)分為如下表示。

其中p1表示的用來(lái)訪問(wèn)外部頁(yè)表的索引,而p2是內(nèi)部頁(yè)表的頁(yè)偏移。采用這種結(jié)構(gòu)的地址轉(zhuǎn)換方法。由于地址轉(zhuǎn)換有外向內(nèi),所以這種也稱為

向前映射頁(yè)表

。

在這種分頁(yè)結(jié)構(gòu)的方案中,假設(shè),系統(tǒng)是64位系統(tǒng),那么當(dāng)它的地址空間就有2^64, 當(dāng)再以4KB作為地址的話,那么頁(yè)表就會(huì)2^52個(gè)條目,那么就把頁(yè)表進(jìn)行細(xì)分,從而形成三級(jí)分層分頁(yè),四級(jí)分層分頁(yè)等等。

為了裝換每個(gè)邏輯地址,74位的系統(tǒng)需要7個(gè)級(jí)別的分頁(yè)型敗明,如此多的內(nèi)存訪問(wèn)時(shí)不可取的,從而分層分頁(yè)在64位的系統(tǒng)并不是更優(yōu)的。

處理大于32位的地址空間的常用方法是

哈希頁(yè)表

,采用虛擬頁(yè)碼作為哈希表值。哈希頁(yè)表的每一個(gè)條目都包括一個(gè)鏈表,該鏈表的元素哈希到同意位置(這表示它們有了哈希沖突)。每個(gè)元素由三個(gè)字段組成:虛擬頁(yè)碼,映射的幀碼,指向鏈表內(nèi)下一個(gè)元素的指針。

該算法的工作如下:虛擬地址的虛擬頁(yè)碼哈希到哈希表。用虛擬頁(yè)碼與鏈表內(nèi)的之一個(gè)元素的之一個(gè)字段相比較。如果匹配,那么相應(yīng)的幀碼(第二個(gè)字段)就用來(lái)形成物理地址。如果不匹配,那么與鏈表內(nèi)的后續(xù)節(jié)點(diǎn)的之一個(gè)字段進(jìn)行比較。以查找匹配的頁(yè)碼。該方案如圖:

這里書(shū)上提到的虛擬頁(yè)碼可以只看作是頁(yè)碼。(之所以叫虛擬頁(yè)碼,是因?yàn)楦鶕?jù)虛擬內(nèi)存的概念,邏輯地址空間可以比物理地址大,所以多出來(lái)的部分被稱為虛擬的,具體介紹會(huì)在下一章提到)。

已提出用于64位地址空間的這個(gè)方案的一個(gè)變體。

此變體采用

聚簇頁(yè)表

類似于哈希頁(yè)表。不過(guò)哈希表內(nèi)的每個(gè)條目引用多個(gè)頁(yè)而不是單個(gè)頁(yè)。單個(gè)頁(yè)表的條目可以映射到多個(gè)物理幀。聚簇頁(yè)表對(duì)于

稀疏

地址空間特別有用。這里引用的是不連續(xù)的并且散布在整個(gè)地址空間。

通常,每個(gè)進(jìn)程都有一個(gè)關(guān)聯(lián)的頁(yè)表。該進(jìn)程所使用的每個(gè)頁(yè)都在也表中有一項(xiàng)(或者每個(gè)虛擬頁(yè)都有一項(xiàng))。這種表示方法比較自然,因?yàn)檫M(jìn)程是通過(guò)虛擬地址來(lái)引用頁(yè)的。然后是操作系統(tǒng)將這些地址轉(zhuǎn)換為物理內(nèi)存地址。

由于頁(yè)表是按照虛擬地址排序的,操作系統(tǒng)可計(jì)算所對(duì)應(yīng)條目在頁(yè)表的位置,可以直接使用該值。這種方法缺點(diǎn)就是:當(dāng)每個(gè)頁(yè)表包含百萬(wàn)級(jí)的數(shù)目時(shí)。會(huì)有性能問(wèn)題,而且需要大量的內(nèi)存來(lái)保存頁(yè)表信息。

解決的方法處理上面的兩種方法外,還有一種就是

倒置頁(yè)表

。

這里先介紹一個(gè)IBM RT 的倒置頁(yè)表的表示方法:

對(duì)于每個(gè)真正的內(nèi)存頁(yè)或者幀,倒置頁(yè)表只有一個(gè)條目。每個(gè)條目包含

保存在真正內(nèi)存位置上的頁(yè)的虛擬地址

,以及擁有

該頁(yè)的進(jìn)程信息

。具體的過(guò)程如圖:

這里的進(jìn)程的信息就是以前提到的 空間地址標(biāo)識(shí)符(ASID)。主要原因是由于一個(gè)倒置頁(yè)表通常包含了多個(gè)不同的映射物理內(nèi)存的地址空間。具體進(jìn)程的每個(gè)邏輯頁(yè)可映射相應(yīng)的物理幀。

采用卜告倒置頁(yè)表的系統(tǒng)在實(shí)現(xiàn)共享內(nèi)存的時(shí)候會(huì)有問(wèn)題,因?yàn)楣蚕韮?nèi)存的實(shí)枯肆現(xiàn)為:將多個(gè)地址空間映射到同一個(gè)物理地址。這種方法,不能用于倒置頁(yè)表,因?yàn)槊總€(gè)物理頁(yè)只有一個(gè)虛擬的頁(yè)條目,一個(gè)物理頁(yè)不能有多個(gè)共享的虛擬地址。

IA-32 系統(tǒng)的內(nèi)存管理可以分為分段和分頁(yè)兩個(gè)部分,工作如下:CPU 生成邏輯地址,并交給分段單元,分段單元為每個(gè)邏輯地址生成 一個(gè)線性地址。 然后線性地址交給分頁(yè)單元,以生成內(nèi)存的物理地址。

IA-32 架構(gòu)允許一個(gè)段的大小最多可以達(dá)到4G, 每個(gè)進(jìn)程最多有16K個(gè)段。進(jìn)程的邏輯地址空間分為兩部分。

之一部分最多由8K段組成,這部分是單個(gè)進(jìn)程私有;

第二部分也是最多由8K段組成,這部分是所有進(jìn)程共享。

之一部分保存在

局部描述符表(LTD)

中,第二部分保存在

全局描述符表(GDT)

中,他們的每個(gè) 條目都是8個(gè)字節(jié),包括一個(gè)段的詳細(xì)信息。比如段基地址和段界限。

邏輯地址一般為二元數(shù)組(選擇器,偏移),選擇器是一個(gè)16位的數(shù):

其中s表示段號(hào),g表示實(shí)在LTD中還是在GDT中, p表示保護(hù)信息。

段的尋址過(guò)程為:

IA-32架構(gòu)的頁(yè)可分為4K,或者4M 。采用4K的頁(yè),IA-32采用二級(jí)分頁(yè)方法。其中的32位的尋址和表示請(qǐng)參照二級(jí)分頁(yè)算法。

為了提高物理內(nèi)存的使用率,IA-32 的頁(yè)表可以被交換存在磁盤(pán)。因此,頁(yè)目錄的條目通過(guò)一個(gè)

有效位

,以表示該條目所指的頁(yè)表實(shí)在內(nèi)存還是在磁盤(pán)上。如果頁(yè)表再磁盤(pán)上,則操作系統(tǒng)可通過(guò)其他31位來(lái)表示頁(yè)表的磁盤(pán)位置。之后根據(jù)需要調(diào)入內(nèi)存。

隨著軟件開(kāi)發(fā)人員的逐步發(fā)現(xiàn),32位架構(gòu)的4GB內(nèi)存限制,Inter通過(guò)

頁(yè)地址擴(kuò)展

,以便允許訪問(wèn)大于4GB的物理地址空間。

引入頁(yè)地址擴(kuò)展,主要是將兩級(jí)的分頁(yè)方案擴(kuò)展到了三級(jí)方案, 后者的最后兩位用于指向頁(yè)目錄指針表。

頁(yè)地址擴(kuò)展使得地址地址空間從32位增加到了36位。Linux和Mac OS X 都支持了這項(xiàng)技術(shù)。

X86-64 支持更大的邏輯和物理地址空間。支持64位的地址空間意味著可尋址的內(nèi)存達(dá)到驚人的2^64字節(jié)。64位系統(tǒng)有能力訪問(wèn)那么多的內(nèi)存,但是實(shí)際上,目前設(shè)計(jì)的地址遠(yuǎn)沒(méi)有那么多。

目前提供的x86-64 架構(gòu)的機(jī)器最多采用四級(jí)分頁(yè),支持48位的虛擬地址。它的頁(yè)面大小可以4KB,2MB,或者1G。

雖然Intel的芯片占了大部分的市場(chǎng),但是移動(dòng)設(shè)備的架構(gòu)一直采用的是32位ARM的架構(gòu)?,F(xiàn)在的iPhone 和iPad 都或得了ARM的授權(quán)。Android的智能手機(jī)也都是ARM的處理器。

ARM支持的頁(yè)面大小:

ARM架構(gòu)還支持兩級(jí)TLB(高速緩存)。在外部,有兩個(gè)微TLB: 一個(gè)用于數(shù)據(jù),另一個(gè)用于指令。微TLB也支持 (ASID)進(jìn)程地址空間標(biāo)識(shí)符。 在內(nèi)部 有一個(gè)主 TLB。 地址轉(zhuǎn)換從微TLB級(jí)開(kāi)始。如果沒(méi)有找到,那么再檢查主TLB。如果還沒(méi)找到,再通過(guò)頁(yè)表進(jìn)行硬件查找。

關(guān)于linux內(nèi)存分頁(yè)機(jī)制的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


網(wǎng)站題目:了解linux內(nèi)存分頁(yè)機(jī)制(linux內(nèi)存分頁(yè)機(jī)制)
轉(zhuǎn)載源于:http://www.5511xx.com/article/dhohhjg.html