在分頁方式下,每個(gè)進(jìn)程分配一個(gè)頁表會(huì)有什么問題?
不賣關(guān)子了,每個(gè)進(jìn)程分配一個(gè)頁表會(huì)有空間上的缺陷,因?yàn)?a target="_blank">操作系統(tǒng)上可以運(yùn)行非常多的進(jìn)程,那不就意味著頁表數(shù)量非常多!
1B(Byte 字節(jié))=8bit, 1KB (Kilobyte 千字節(jié))=1024B, 1MB (Megabyte 兆字節(jié)簡(jiǎn)稱“兆”)=1024KB, 1GB (Gigabyte 吉字節(jié) 又稱“千兆”)=1024MB
以32 位的環(huán)境為例,虛擬地址空間范圍共有 4GB,假設(shè)一個(gè)頁的大小是 4KB(2^12),那么就需要大約 100 萬 (2^20)個(gè)頁,每個(gè)「頁表項(xiàng)」需要 4 個(gè)字節(jié)大小來存儲(chǔ),那么整個(gè) 4GB 空間范圍的映射就要有 4MB 的內(nèi)存來存儲(chǔ)頁表。
4MB看起來不大,但是數(shù)量上來了就很恐怖了,假設(shè) 100 個(gè)進(jìn)程的話,就需要 400MB 的內(nèi)存來存儲(chǔ)頁表,這是非常大的內(nèi)存了,更別說 64位的環(huán)境了。
為了解決空間上的問題,在對(duì)分頁方式的基礎(chǔ)上,進(jìn)行優(yōu)化,出現(xiàn)了多級(jí)頁表方式
多級(jí)頁表
在前面我們知道了,分頁方式在32位環(huán)境下,以每頁4KB來計(jì)算,一共有100萬頁,「頁表項(xiàng)」需要 4
個(gè)字節(jié)大小來存儲(chǔ),一個(gè)頁表包含100萬個(gè)「頁表項(xiàng)」,那么每個(gè)進(jìn)程的頁表需要占用4MB大小,多級(jí)頁表要如何解決這種問題呢?
在頁表的基礎(chǔ)上做一次二級(jí)分頁,把100萬「頁表項(xiàng)」分為一級(jí)頁表「1024個(gè)頁表項(xiàng)」,「一級(jí)頁表項(xiàng)」下又關(guān)聯(lián)二級(jí)頁表「1024個(gè)頁表項(xiàng)」,這樣一級(jí)頁表的1024個(gè)頁表項(xiàng)就覆蓋到了4GB的空間范圍映射,并且二級(jí)頁表按需加載,這樣頁表占用的空間就大大降低。
做個(gè)簡(jiǎn)單的計(jì)算,假設(shè)只有 20% 的一級(jí)頁表項(xiàng)被用到了,那么頁表占用的內(nèi)存空間就只有 4KB(一級(jí)頁表) + 20% * 4MB(二級(jí)頁表)=0.804MB,這對(duì)比單級(jí)頁表的 4MB 是不是一個(gè)巨大的節(jié)約?
接著思考,在二級(jí)的基礎(chǔ)上是不是又可以繼續(xù)分級(jí)呢,能分二級(jí),必然也能分三級(jí)、四級(jí),在64位操作系統(tǒng)是做了四級(jí)分頁,分為了四個(gè)目錄,分別是
全局頁目錄項(xiàng)
上層頁目錄項(xiàng)
中間頁目錄項(xiàng)
頁表項(xiàng)
TBL
多級(jí)頁表雖然解決了空間上的問題,但是我們發(fā)現(xiàn)這種方式需要走多道轉(zhuǎn)換才能找到映射的物理內(nèi)存地址,經(jīng)過的多道轉(zhuǎn)換造成了時(shí)間上的開銷。
程序是局部性的,即在一段時(shí)間內(nèi),整個(gè)程序的執(zhí)行僅限于程序的某一部分。相應(yīng)的,執(zhí)行所訪問的存儲(chǔ)空間也局限于某個(gè)內(nèi)存區(qū)域。
操作系統(tǒng)就利用這一特性,把最多使用的幾個(gè)頁表項(xiàng)放到TBL緩存, CPU 在尋址時(shí),會(huì)先查 TLB,如果沒找到,才會(huì)繼續(xù)查常規(guī)的頁表,TLB的命中率其實(shí)很高的,因?yàn)槌绦蜃畛TL問的頁就那么幾個(gè)。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3123瀏覽量
75251 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7147瀏覽量
125571
發(fā)布評(píng)論請(qǐng)先 登錄
初學(xué)者Linux操作系統(tǒng)的基本結(jié)構(gòu)
嵌入式Linux內(nèi)存管理的一些知識(shí)點(diǎn)總結(jié)
嵌入式Linux內(nèi)存管理的一些知識(shí)點(diǎn)總結(jié)
頁面與地址變換結(jié)構(gòu)
Pads Logic 分頁符號(hào)圖頁編號(hào)顯示問題
淺談對(duì)計(jì)算機(jī)系統(tǒng)內(nèi)存尋址的理解
Linux內(nèi)存系統(tǒng): Linux 內(nèi)存分配算法
Linux內(nèi)存系統(tǒng)---走進(jìn)Linux 內(nèi)存
鴻蒙內(nèi)核源碼分析(內(nèi)存分配篇):內(nèi)存的分配方式有哪些
鴻蒙內(nèi)核源碼分析(內(nèi)存分配篇):內(nèi)存的分配方式有哪些
WCDMA系統(tǒng)中物理信道的功率分配方式
操作系統(tǒng)的分頁存儲(chǔ)基本概念
一個(gè)由于MySQL分頁導(dǎo)致的線上事故
MMU多級(jí)頁表映射過程

評(píng)論