掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
了解linux內(nèi)存分頁機(jī)制

創(chuàng)新互聯(lián)專注于撫寧企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站開發(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è)非常重要的問題。在Linux的內(nèi)存管理中,分頁機(jī)制是非常核心的一部分。了解了Linux內(nèi)存分頁機(jī)制,可以讓我們更好地理解Linux操作系統(tǒng)的工作原理,并同時(shí)有效地提升我們的系統(tǒng)維護(hù)與管理能力。
為什么需要分頁機(jī)制?
在早期的操作系統(tǒng)中,內(nèi)存的管理方式是直接映射,即將內(nèi)存直接映射到物理存儲(chǔ)器。但這種方式會(huì)存在一些問題。因?yàn)檫M(jìn)程會(huì)調(diào)用大量的指令和數(shù)據(jù),當(dāng)內(nèi)存資源不足時(shí),使用直接映射方式時(shí),就會(huì)出現(xiàn)無法分配內(nèi)存的情況,而進(jìn)程將無法正常運(yùn)行。
分頁機(jī)制則可以有效解決這個(gè)問題,它將內(nèi)存劃分成了等大小的數(shù)據(jù)塊,即頁,每一頁在物理內(nèi)存上也對(duì)應(yīng)著不同的頁框。當(dāng)進(jìn)程需要內(nèi)存空間時(shí),分頁機(jī)制會(huì)自動(dòng)調(diào)度物理內(nèi)存上的空閑頁框,為程序分配內(nèi)存。這樣,無論進(jìn)程調(diào)用的指令和數(shù)據(jù)大小是多少,都可以只分配所需的空間大小,避免內(nèi)存浪費(fèi)。
什么是頁表?
分頁機(jī)制中,頁和頁框是一一對(duì)應(yīng)的,每個(gè)頁都需在物理內(nèi)存上占據(jù)一個(gè)頁框。為了建立內(nèi)存的邏輯地址空間和物理地址空間之間一一對(duì)應(yīng)關(guān)系,需要建立一個(gè)頁表,它記錄了每個(gè)頁的物理地址對(duì)應(yīng)的頁框地址。頁表通常是一個(gè)由操作系統(tǒng)維護(hù)的數(shù)據(jù)結(jié)構(gòu),可通過MMU硬件實(shí)現(xiàn)分頁機(jī)制,并管理進(jìn)程的內(nèi)存。
頁表通常由兩個(gè)部分組成:一部分是頁目錄,另一部分是頁表。頁目錄中記錄著頁表的物理地址,而頁表中是一個(gè)映射關(guān)系表。通過頁表,操作系統(tǒng)可以將進(jìn)程的虛擬地址轉(zhuǎn)換成物理地址,幫助CPU實(shí)現(xiàn)內(nèi)存尋址的過程。
頁表還可以實(shí)現(xiàn)內(nèi)存保護(hù)的功能。在頁表中,可以將某個(gè)頁設(shè)置為只讀的,防止程序誤寫該頁的內(nèi)容。也可以將某個(gè)頁設(shè)置為一個(gè)不可訪問的頁,以防止程序讀寫該頁的內(nèi)容。
Linux分頁管理方式
在Linux中,通過分頁機(jī)制來管理進(jìn)程的內(nèi)存。通常情況下,Linux采用的是4KB大小的物理頁框。對(duì)于每個(gè)進(jìn)程,Linux都為其分配了一組獨(dú)立的頁表,用于將其虛擬地址空間映射到物理地址空間。
Linux中,頁表的建立、更新、銷毀都是由內(nèi)核來完成的。當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),內(nèi)核會(huì)根據(jù)頁表為其分配物理頁框并建立映射關(guān)系,如果內(nèi)存不足,則會(huì)將一些物理頁框交換到磁盤上進(jìn)行緩存,從而為新進(jìn)程騰出一些物理內(nèi)存空間。同時(shí),Linux內(nèi)核還支持多種內(nèi)存管理策略,如伙伴系統(tǒng)和slab分配器等。
在Linux中,分頁機(jī)制是實(shí)現(xiàn)內(nèi)存管理的核心技術(shù)之一。掌握Linux的內(nèi)存分頁機(jī)制,可以更加深入地理解Linux的內(nèi)存管理原理,并通過編寫程序和接受故障來維護(hù)和優(yōu)化Linux系統(tǒng)。分頁機(jī)制也是內(nèi)存管理的基礎(chǔ),可以幫助我們更清晰地認(rèn)識(shí)計(jì)算機(jī)硬件和操作系統(tǒng)內(nèi)部的工作方式,對(duì)于開發(fā)者和系統(tǒng)管理員來說,了解分頁機(jī)制是非常重要的。
相關(guān)問題拓展閱讀:
這種方式中,將用戶程序的地址空間,注意,是
用戶程序的地址空間
分為若干個(gè)固定大小的區(qū)域,成為“頁”或“頁面”。我們可以知道,這也頁其實(shí)是不存在的,只是一種劃分內(nèi)存空間的方法。也就是說,這種方式將用戶的程序
“肢解”
了,分成很多個(gè)小的部分,每個(gè)部分稱為一個(gè)“頁”。
將邏輯地址的前n位作為頁號(hào),后面32-n位作為頁內(nèi)偏移量。
由于進(jìn)程的最后一頁經(jīng)常裝不滿一個(gè)塊,從而形成了不可利指洞用的碎片,稱之為
“頁內(nèi)碎片”
。
作用:實(shí)現(xiàn)頁號(hào)到物理號(hào)的地址映射。
頁表是記錄邏輯空間(虛擬內(nèi)存)中每一頁在內(nèi)存中對(duì)應(yīng)的物理塊號(hào)。但并非每一頁邏輯空間都會(huì)實(shí)際對(duì)應(yīng)著一個(gè)物理塊,只有實(shí)際駐留在物理內(nèi)存空間中的頁才會(huì)對(duì)應(yīng)著物理塊。
系統(tǒng)會(huì)為每一個(gè)進(jìn)程建立一張頁表,頁表是需要一直駐留在物理內(nèi)存中的(多級(jí)頁表除外),另外頁表的起址和長(zhǎng)度存放在 PCB(Process Control Block)進(jìn)程控制結(jié)構(gòu)體中。
可以在頁表的表項(xiàng)中設(shè)置相關(guān)的權(quán)限控制字段,例如設(shè)置存取控制字段,用于保護(hù)該存儲(chǔ)塊的讀寫;若存取控制字段為2位,則可以設(shè)置讀/寫、只讀和只執(zhí)行等存取方式。
物理塊唯念枯是實(shí)實(shí)在在存在于內(nèi)存中的:
由于執(zhí)行頻率高,要求效率比較高,需要使用硬件實(shí)現(xiàn)。
在系統(tǒng)中設(shè)置一個(gè)
頁表寄存器(PTR)
,其中存放頁表在內(nèi)存的起始地址和頁表的長(zhǎng)度。平時(shí)進(jìn)程未執(zhí)行的時(shí)候,頁表的起始地址和頁表長(zhǎng)度放在本進(jìn)程的PCB中。當(dāng)調(diào)度程序調(diào)度到某個(gè)進(jìn)程的時(shí)候,才將這兩個(gè)數(shù)據(jù)裝入
頁表寄存器
。
變換過程:
快表的變換機(jī)構(gòu)
為了提高地址變換速度,可在地址變換機(jī)構(gòu)中增設(shè)一個(gè)具有并行查詢能力的特殊高速緩沖寄存器,又稱為”聯(lián)想寄存器”或者“快表”。俗稱TLB。
快表與頁表的功能類似,其實(shí)就是將一部分頁表存到 CPU 內(nèi)部的高速緩沖存儲(chǔ)器 Cache。CPU 尋址時(shí)先到快表查詢相應(yīng)的頁表項(xiàng)形成物理地址,如果查詢不到,則到內(nèi)存中查詢,并將對(duì)應(yīng)頁表項(xiàng)調(diào)入到快表中。但,如果快表的存儲(chǔ)空間已滿,則需要通過算法找到一個(gè)暫時(shí)不再需要的頁表項(xiàng),將它換出內(nèi)存。
由于成本的關(guān)系,快表不可能做得很大,通常只存放 16~512 個(gè)頁表項(xiàng),這對(duì)中、高亮小型作業(yè)來說,已有可能把全部頁表項(xiàng)放在快表中;但對(duì)于大型作業(yè)而言,則只能將其一部分頁表項(xiàng)放入其中。由于對(duì)程序和數(shù)據(jù)的訪問往往帶有局限性,因此,據(jù)統(tǒng)計(jì),從快表中能找到所需頁表項(xiàng)的概率可達(dá) 90% 以上。這樣,由于增加了地址變換機(jī)構(gòu)而造成的速度損失可減少到 10% 以下,達(dá)到了可接受的程度。
我們可以采用這樣兩個(gè)方法來解決這一問題:
① 對(duì)于頁表所需的內(nèi)存空間,可采用離散分配方式,以解決難以找到一塊連續(xù)的大內(nèi)存空間的問題;
②
只將當(dāng)前需要的部分頁表項(xiàng)調(diào)入內(nèi)存,其余的頁表項(xiàng)仍駐留在磁盤上,需要時(shí)再調(diào)入。
二級(jí)頁表的頁表項(xiàng):
過程:
在采用兩級(jí)頁表結(jié)構(gòu)的情況下,對(duì)于正在運(yùn)行的進(jìn)程,必須將其外層頁表調(diào)入內(nèi)存,而對(duì)于內(nèi)頁表則只需調(diào)入一頁或幾頁。為了表征某頁的頁表是否已經(jīng)調(diào)入內(nèi)存,還應(yīng)在外層頁表項(xiàng)中增設(shè)一個(gè)狀態(tài)位 S,其值若為 0,表示該頁表分頁不在內(nèi)存中,否則說明其分頁已調(diào)入內(nèi)存。進(jìn)程運(yùn)行時(shí),地址變換機(jī)構(gòu)根據(jù)邏輯地址中的 P1去查找外層頁表;若所找到的頁表項(xiàng)中的狀態(tài)位為 0,則產(chǎn)生一個(gè)中斷信號(hào),請(qǐng)求 OS 將該頁表分頁調(diào)入內(nèi)存。
多級(jí)頁表和二級(jí)頁表類似。多級(jí)頁表和二級(jí)頁表是為了節(jié)省物理內(nèi)存空間。使得頁表可以在內(nèi)存中離散存儲(chǔ)。(單級(jí)頁表為了隨機(jī)訪問必須連續(xù)存儲(chǔ),如果虛擬內(nèi)存空間很大,就需要很多頁表項(xiàng),就需要很大的連續(xù)內(nèi)存空間,但是多級(jí)頁表不需要。)
為什么引入分段存儲(chǔ)管理?
引入效果:
它將用戶程序的地址空間分為若干個(gè)大小不同的的段,每個(gè)段可以定義一組完整的信息。
段號(hào)表示段名,每個(gè)段都從0開始編址,并且采用一段連續(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í)行的過程可以通過查找段表,找到每一個(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)太大,是訪問越界,于是產(chǎn)生越界中斷信號(hào)。若未越界,則根據(jù)段表的始址和該段的段號(hào),計(jì)算出該段對(duì)應(yīng)段表項(xiàng)的位置,從中讀出該段在內(nèi)存的起始地址。然后,再檢查段內(nèi)地址 d 是否超過該段的段長(zhǎng) SL。若超過,即 d>SL,同樣發(fā)出越界中斷信號(hào)。若未越界,則將該段的基址 d 與段內(nèi)地址相加,即可得到要訪問的內(nèi)存。
分頁和分段系統(tǒng)相似之處:兩者都采用離散分配方式,且都是通過地址映射機(jī)構(gòu)實(shí)現(xiàn)地址變換。
但在概念上兩者完全不同,主要表現(xiàn)在下述三個(gè)方面:
分頁系統(tǒng)以頁面作為內(nèi)存分配的基本單位,能有效地提高內(nèi)存利用率,而分段系統(tǒng)以段作為內(nèi)存分配的基本單位,它能夠更好地滿足用戶多方面的需要。
段頁式地址結(jié)構(gòu)由段號(hào)、段內(nèi)頁號(hào)及頁內(nèi)地址三部分所組成
段頁式系統(tǒng)的基本原理是分段和分頁原理的結(jié)合,即先將用戶程序分成若干個(gè)段,再把每個(gè)段分成若干個(gè)頁,并為每一個(gè)段賦予一個(gè)段名。如下圖展示了一個(gè)作業(yè)地址空間的結(jié)構(gòu)。該作業(yè)有三個(gè)段:主程序段、子程序段和數(shù)據(jù)段;頁面大小為 4 KB:
在段頁式系統(tǒng)中,為了實(shí)現(xiàn)從邏輯地址到物理地址的變換,系統(tǒng)中需要同時(shí)配置段表和頁表。段表的內(nèi)容與分段系統(tǒng)略有不同,它不再是內(nèi)存始址和段長(zhǎng),而是頁表始址和頁表長(zhǎng)度。下圖展示出了利用段表和頁表進(jìn)行從用戶地址空間到物理(內(nèi)存)空間的映射。
在段頁式系統(tǒng)中,為了便于實(shí)現(xiàn)地址變換,須配置一個(gè)段表寄存器,其中存放段表始址和段長(zhǎng) TL。進(jìn)行地址變換時(shí),首先利用段號(hào) S,將它與段長(zhǎng) TL 進(jìn)行比較。若 S
在段頁式系統(tǒng)中,為了獲得一條指令或數(shù)據(jù),須三次訪問內(nèi)存。之一次訪問是訪問內(nèi)存中的段表,從中取得頁表始址;第二次訪問是訪問內(nèi)存中的頁表,從中取出該頁所在的物理塊號(hào),并將該塊號(hào)與頁內(nèi)地址一起形成指令或數(shù)據(jù)的物理地址;第三次訪問才是真正從第二次訪問所得的地址中取出指令或數(shù)據(jù)。
顯然,這使訪問內(nèi)存的次數(shù)增加了近兩倍。為了提高執(zhí)行速度,在地址變換機(jī)構(gòu)中增設(shè)一個(gè)高速緩沖寄存器。每次訪問它時(shí),都須同時(shí)利用段號(hào)和頁號(hào)去檢索高速緩存,若找到匹配的表項(xiàng),便可從中得到相應(yīng)頁的物理塊號(hào),用來與頁內(nèi)地址一起形成物理
參考鏈接:
之前討論了分段和分頁,現(xiàn)在看下頁表的主要涉及的頁表結(jié)構(gòu)。
大多數(shù)現(xiàn)代計(jì)算機(jī)系統(tǒng)支持大邏輯地址空間(2^32 ~ 2^64)。這種情況下,頁表本身可以非常大。
例如:假如具有32位邏輯地址空間的一個(gè)計(jì)算機(jī)系統(tǒng)。如果系統(tǒng)的頁大小為4KB(2^12)。那么頁表可以多達(dá)100萬的條目 (2^32/ 2^12)。假設(shè)某個(gè)項(xiàng)目有4字節(jié)。那么每個(gè)進(jìn)程需要4MB的地址物理地址來存儲(chǔ)頁表本身。顯然,我們并不想在內(nèi)存中連續(xù)分配這么多頁表。
這個(gè)問題的一個(gè)簡(jiǎn)單的解決方法就是講頁表劃分為更小的塊。完成這種劃分方法有很多種。
最簡(jiǎn)單的方法就是使用兩層分頁算法,就是將頁表再分頁,例如,再次假設(shè)一個(gè)系統(tǒng),具有32位邏輯地址空間和4K大小的頁。一個(gè)邏輯地址被分為20位的頁碼和12位的頁偏移。
因此要對(duì)20位的頁表進(jìn)行再分頁,所以該頁碼可以分10位的頁碼和10位的偏移。這樣一個(gè)邏輯地址就會(huì)分為如下表示。
其中p1表示的用來訪問外部頁表的索引,而p2是內(nèi)部頁表的頁偏移。采用這種結(jié)構(gòu)的地址轉(zhuǎn)換方法。由于地址轉(zhuǎn)換有外向內(nèi),所以這種也稱為
向前映射頁表
。
在這種分頁結(jié)構(gòu)的方案中,假設(shè),系統(tǒng)是64位系統(tǒng),那么當(dāng)它的地址空間就有2^64, 當(dāng)再以4KB作為地址的話,那么頁表就會(huì)2^52個(gè)條目,那么就把頁表進(jìn)行細(xì)分,從而形成三級(jí)分層分頁,四級(jí)分層分頁等等。
為了裝換每個(gè)邏輯地址,74位的系統(tǒng)需要7個(gè)級(jí)別的分頁型敗明,如此多的內(nèi)存訪問時(shí)不可取的,從而分層分頁在64位的系統(tǒng)并不是更優(yōu)的。
處理大于32位的地址空間的常用方法是
哈希頁表
,采用虛擬頁碼作為哈希表值。哈希頁表的每一個(gè)條目都包括一個(gè)鏈表,該鏈表的元素哈希到同意位置(這表示它們有了哈希沖突)。每個(gè)元素由三個(gè)字段組成:虛擬頁碼,映射的幀碼,指向鏈表內(nèi)下一個(gè)元素的指針。
該算法的工作如下:虛擬地址的虛擬頁碼哈希到哈希表。用虛擬頁碼與鏈表內(nèi)的之一個(gè)元素的之一個(gè)字段相比較。如果匹配,那么相應(yīng)的幀碼(第二個(gè)字段)就用來形成物理地址。如果不匹配,那么與鏈表內(nèi)的后續(xù)節(jié)點(diǎn)的之一個(gè)字段進(jìn)行比較。以查找匹配的頁碼。該方案如圖:
這里書上提到的虛擬頁碼可以只看作是頁碼。(之所以叫虛擬頁碼,是因?yàn)楦鶕?jù)虛擬內(nèi)存的概念,邏輯地址空間可以比物理地址大,所以多出來的部分被稱為虛擬的,具體介紹會(huì)在下一章提到)。
已提出用于64位地址空間的這個(gè)方案的一個(gè)變體。
此變體采用
聚簇頁表
類似于哈希頁表。不過哈希表內(nèi)的每個(gè)條目引用多個(gè)頁而不是單個(gè)頁。單個(gè)頁表的條目可以映射到多個(gè)物理幀。聚簇頁表對(duì)于
稀疏
地址空間特別有用。這里引用的是不連續(xù)的并且散布在整個(gè)地址空間。
通常,每個(gè)進(jìn)程都有一個(gè)關(guān)聯(lián)的頁表。該進(jìn)程所使用的每個(gè)頁都在也表中有一項(xiàng)(或者每個(gè)虛擬頁都有一項(xiàng))。這種表示方法比較自然,因?yàn)檫M(jìn)程是通過虛擬地址來引用頁的。然后是操作系統(tǒng)將這些地址轉(zhuǎn)換為物理內(nèi)存地址。
由于頁表是按照虛擬地址排序的,操作系統(tǒng)可計(jì)算所對(duì)應(yīng)條目在頁表的位置,可以直接使用該值。這種方法缺點(diǎn)就是:當(dāng)每個(gè)頁表包含百萬級(jí)的數(shù)目時(shí)。會(huì)有性能問題,而且需要大量的內(nèi)存來保存頁表信息。
解決的方法處理上面的兩種方法外,還有一種就是
倒置頁表
。
這里先介紹一個(gè)IBM RT 的倒置頁表的表示方法:
對(duì)于每個(gè)真正的內(nèi)存頁或者幀,倒置頁表只有一個(gè)條目。每個(gè)條目包含
保存在真正內(nèi)存位置上的頁的虛擬地址
,以及擁有
該頁的進(jìn)程信息
。具體的過程如圖:
這里的進(jìn)程的信息就是以前提到的 空間地址標(biāo)識(shí)符(ASID)。主要原因是由于一個(gè)倒置頁表通常包含了多個(gè)不同的映射物理內(nèi)存的地址空間。具體進(jìn)程的每個(gè)邏輯頁可映射相應(yīng)的物理幀。
采用卜告倒置頁表的系統(tǒng)在實(shí)現(xiàn)共享內(nèi)存的時(shí)候會(huì)有問題,因?yàn)楣蚕韮?nèi)存的實(shí)枯肆現(xiàn)為:將多個(gè)地址空間映射到同一個(gè)物理地址。這種方法,不能用于倒置頁表,因?yàn)槊總€(gè)物理頁只有一個(gè)虛擬的頁條目,一個(gè)物理頁不能有多個(gè)共享的虛擬地址。
IA-32 系統(tǒng)的內(nèi)存管理可以分為分段和分頁兩個(gè)部分,工作如下:CPU 生成邏輯地址,并交給分段單元,分段單元為每個(gè)邏輯地址生成 一個(gè)線性地址。 然后線性地址交給分頁單元,以生成內(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ù)信息。
段的尋址過程為:
IA-32架構(gòu)的頁可分為4K,或者4M 。采用4K的頁,IA-32采用二級(jí)分頁方法。其中的32位的尋址和表示請(qǐng)參照二級(jí)分頁算法。
為了提高物理內(nèi)存的使用率,IA-32 的頁表可以被交換存在磁盤。因此,頁目錄的條目通過一個(gè)
有效位
,以表示該條目所指的頁表實(shí)在內(nèi)存還是在磁盤上。如果頁表再磁盤上,則操作系統(tǒng)可通過其他31位來表示頁表的磁盤位置。之后根據(jù)需要調(diào)入內(nèi)存。
隨著軟件開發(fā)人員的逐步發(fā)現(xiàn),32位架構(gòu)的4GB內(nèi)存限制,Inter通過
頁地址擴(kuò)展
,以便允許訪問大于4GB的物理地址空間。
引入頁地址擴(kuò)展,主要是將兩級(jí)的分頁方案擴(kuò)展到了三級(jí)方案, 后者的最后兩位用于指向頁目錄指針表。
頁地址擴(kuò)展使得地址地址空間從32位增加到了36位。Linux和Mac OS X 都支持了這項(xiàng)技術(shù)。
X86-64 支持更大的邏輯和物理地址空間。支持64位的地址空間意味著可尋址的內(nèi)存達(dá)到驚人的2^64字節(jié)。64位系統(tǒng)有能力訪問那么多的內(nèi)存,但是實(shí)際上,目前設(shè)計(jì)的地址遠(yuǎn)沒有那么多。
目前提供的x86-64 架構(gòu)的機(jī)器最多采用四級(jí)分頁,支持48位的虛擬地址。它的頁面大小可以4KB,2MB,或者1G。
雖然Intel的芯片占了大部分的市場(chǎng),但是移動(dòng)設(shè)備的架構(gòu)一直采用的是32位ARM的架構(gòu)。現(xiàn)在的iPhone 和iPad 都或得了ARM的授權(quán)。Android的智能手機(jī)也都是ARM的處理器。
ARM支持的頁面大?。?/p>
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í)開始。如果沒有找到,那么再檢查主TLB。如果還沒找到,再通過頁表進(jìn)行硬件查找。
關(guān)于linux內(nèi)存分頁機(jī)制的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流