技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務(wù)器類 >

詳解Linux系統(tǒng)內(nèi)存尋址的分頁機制

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-02-06 18:14┆點擊:

  分頁機制在段機制之后進行,以完成線性—物理地址的轉(zhuǎn)換過程。段機制把邏輯地址轉(zhuǎn)換為線性地址,分頁機制進一步把該線性地址再轉(zhuǎn)換為物理地址。

  硬件中的分頁

  分頁機制由CR0中的PG位啟用。如PG=1,啟用分頁機制,并使用本節(jié)要描述的機制,把線性地址轉(zhuǎn)換為物理地址。如PG=0,禁用分頁機制,直接把段機制產(chǎn)生的線性地址當作物理地址使用。分頁機制管理的對象是固定大小的存儲塊,稱之為頁 (page)。分頁機制把整個線性地址空間及整個物理地址空間都看成由頁組成,在線性地址空間中的任何一頁,可以映射為物理地址空間中的任何一頁(我們把物理空間中的一頁叫做一個頁面或頁框(page frame))。

20151025115501341.jpg (202×355)

  80386 使用4K字節(jié)大小的頁。每一頁都有4K字節(jié)長,并在4K字節(jié)的邊界上對齊,即每一頁的起始地址都能被4K整除。因此,80386把4G字節(jié)的線性地址空間,劃分為1G個頁面,每頁有4K字節(jié)大小。分頁機制通過把線性地址空間中的頁,重新定位到物理地址空間來進行管理,因為每個頁面的整個4K字節(jié)作為一個單位進行映射,并且每個頁面都對齊4K字節(jié)的邊界,因此,線性地址的低12位經(jīng)過分頁機制直接地作為物理地址的低12位使用。

  為什么使用兩級頁表

  假設(shè)每個進程都占用了4G的線性地址空間,頁表共含1M個表項,每個表項占4個字節(jié),那么每個進程的頁表要占據(jù)4M的內(nèi)存空間。為了節(jié)省頁表占用的空間,我們使用兩級頁表。每個進程都會被分配一個頁目錄,但是只有被實際使用頁表才會被分配到內(nèi)存里面。一級頁表需要一次分配所有頁表空間,兩級頁表則可以在需要的時候再分配頁表空間。

  兩級頁表結(jié)構(gòu)

  兩級表結(jié)構(gòu)的第一級稱為頁目錄,存儲在一個4K字節(jié)的頁面中。頁目錄表共有1K個表項,每個表項為4個字節(jié),并指向第二級表。線性地址的最高10位(即位31~位32)用來產(chǎn)生第一級的索引,由索引得到的表項中,指定并選擇了1K個二級表中的一個表。

  兩級表結(jié)構(gòu)的第二級稱為頁表,也剛好存儲在一個4K字節(jié)的頁面中,包含1K個字節(jié)的表項,每個表項包含一個頁的物理基地址。第二級頁表由線性地址的中間10 位(即位21~位12)進行索引,以獲得包含頁的物理地址的頁表項,這個物理地址的高20位與線性地址的低12位形成了最后的物理地址,也就是頁轉(zhuǎn)化過程輸出的物理地址。

20151025115616229.jpg (429×280)

  頁目錄項

20151025115634707.jpg (407×151)

  第31~12位是20位頁表地址,由于頁表地址的低12位總為0,所以用高20位指出32位頁表地址就可以了。因此,一個頁目錄最多包含1024個頁表地址。

  第0位是存在位,如果P=1,表示頁表地址指向的該頁在內(nèi)存中,如果P=0,表示不在內(nèi)存中。

  第1位是讀/寫位,第2位是用戶/管理員位,這兩位為頁目錄項提供硬件保護。當特權(quán)級為3的進程要想訪問頁面時,需要通過頁保護檢查,而特權(quán)級為0的進程就可以繞過頁保護。

  第3位是PWT(Page Write-Through)位,表示是否采用寫透方式,寫透方式就是既寫內(nèi)存(RAM)也寫高速緩存,該位為1表示采用寫透方式

  第4位是PCD(Page Cache Disable)位,表示是否啟用高速緩存,該位為1表示啟用高速緩存。

  第5位是訪問位,當對頁目錄項進行訪問時,A位=1。

  第7位是Page Size標志,只適用于頁目錄項。如果置為1,頁目錄項指的是4MB的頁面,請看后面的擴展分頁。

  第9~11位由操作系統(tǒng)專用,Linux也沒有做特殊之用。

  頁面項

20151025115654176.jpg (418×160)

  80386的每個頁目錄項指向一個頁表,頁表最多含有1024個頁面項,每項4個字節(jié),包含頁面的起始地址和有關(guān)該頁面的信息。頁面的起始地址也是4K的整數(shù)倍,所以頁面的低12位也留作它用。

  第31~12位是20位物理頁面地址,除第6位外第0~5位及9~11位的用途和頁目錄項一樣,第6位是頁面項獨有的,當對涉及的頁面進行寫操作時,D位被置1。

  4GB的內(nèi)存只有一個頁目錄,它最多有1024個頁目錄項,每個頁目錄項又含有1024個頁面項,因此,內(nèi)存一共可以分成1024×1024=1M個頁面。由于每個頁面為4K個字節(jié),所以,存儲器的大小正好最多為4GB。