0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分頁方式中可以每個(gè)進(jìn)程分配一個(gè)頁表嗎

麥辣雞腿堡 ? 來源:程序猿阿星 ? 作者:程序猿阿星 ? 2023-10-09 17:06 ? 次閱讀

在分頁方式下,每個(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é)簡稱“兆”)=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)境了。

為了解決空間上的問題,在對分頁方式的基礎(chǔ)上,進(jìn)行優(yōu)化,出現(xiàn)了多級頁表方式

多級頁表

在前面我們知道了,分頁方式在32位環(huán)境下,以每頁4KB來計(jì)算,一共有100萬頁,「頁表項(xiàng)」需要 4
個(gè)字節(jié)大小來存儲(chǔ),一個(gè)頁表包含100萬個(gè)「頁表項(xiàng)」,那么每個(gè)進(jìn)程的頁表需要占用4MB大小,多級頁表要如何解決這種問題呢?

在頁表的基礎(chǔ)上做一次二級分頁,把100萬「頁表項(xiàng)」分為一級頁表「1024個(gè)頁表項(xiàng)」,「一級頁表項(xiàng)」下又關(guān)聯(lián)二級頁表「1024個(gè)頁表項(xiàng)」,這樣一級頁表的1024個(gè)頁表項(xiàng)就覆蓋到了4GB的空間范圍映射,并且二級頁表按需加載,這樣頁表占用的空間就大大降低。

做個(gè)簡單的計(jì)算,假設(shè)只有 20% 的一級頁表項(xiàng)被用到了,那么頁表占用的內(nèi)存空間就只有 4KB(一級頁表) + 20% * 4MB(二級頁表)=0.804MB,這對比單級頁表的 4MB 是不是一個(gè)巨大的節(jié)約?

圖片

接著思考,在二級的基礎(chǔ)上是不是又可以繼續(xù)分級呢,能分二級,必然也能分三級、四級,在64位操作系統(tǒng)是做了四級分頁,分為了四個(gè)目錄,分別是

全局頁目錄項(xiàng)

上層頁目錄項(xiàng)

中間頁目錄項(xiàng)

頁表項(xiàng)

圖片

TBL

多級頁表雖然解決了空間上的問題,但是我們發(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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2942

    瀏覽量

    73728
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6603

    瀏覽量

    123021
收藏 人收藏

    評論

    相關(guān)推薦

    初學(xué)者Linux操作系統(tǒng)的基本結(jié)構(gòu)

    的段后與偏移值進(jìn)行求和.這個(gè)地址(在分頁機(jī)制開啟的前提下),會(huì)表示個(gè)頁面,通過尋找到的
    發(fā)表于 10-01 19:16

    嵌入式Linux內(nèi)存管理的些知識點(diǎn)總結(jié)

    到硬盤,從硬盤上加載被請求的內(nèi)存, 然后再重新啟動(dòng)您的進(jìn)程。這樣,每個(gè)進(jìn)程都獲得了自己可以使用的地址空間,
    發(fā)表于 11-20 14:46

    嵌入式Linux內(nèi)存管理的些知識點(diǎn)總結(jié)

    轉(zhuǎn)存到硬盤,從硬盤上加載被請求的內(nèi)存, 然后再重新啟動(dòng)您的進(jìn)程。這樣,每個(gè)進(jìn)程都獲得了自己可以使用的地址空間,
    發(fā)表于 03-24 09:31

    頁面與地址變換結(jié)構(gòu)

    進(jìn)行標(biāo)號,從0#開始。在為進(jìn)程分配內(nèi)存空間時(shí),以為單位,每個(gè)內(nèi)存的塊存放一頁用戶作業(yè)。只要內(nèi)
    發(fā)表于 08-02 06:14

    Pads Logic 分頁符號圖編號顯示問題

    請教各位大師個(gè)Pads Logic VX2.6的問題,分頁符號如果打開圖編號,有時(shí)候就疊在起了,如圖所示,很難看,這個(gè)能設(shè)置嗎? 謝謝
    發(fā)表于 07-08 11:08

    淺談對計(jì)算機(jī)系統(tǒng)內(nèi)存尋址的理解

    轉(zhuǎn)換前地址的話,那么線性地址則對應(yīng)了硬件式內(nèi)存的轉(zhuǎn)換前地址。用分頁方法來分配和管理實(shí)存。即把整個(gè)主存分成大小相等的存儲(chǔ)塊,可裝入作業(yè)的任何一頁。這樣
    發(fā)表于 08-22 08:00

    Linux內(nèi)存系統(tǒng): Linux 內(nèi)存分配算法

    分配出去(不屬于任何進(jìn)程),但由于太小了無法分配給申請內(nèi)存空間的新進(jìn)程的內(nèi)存空閑區(qū)域3) 組織結(jié)構(gòu)· 把所有的空閑分組為 11
    發(fā)表于 08-24 07:44

    Linux內(nèi)存系統(tǒng)---走進(jìn)Linux 內(nèi)存

    每個(gè)進(jìn)程都有完全屬于自己的,獨(dú)立的,不***擾的內(nèi)存空間;用戶態(tài)的程序就不能隨意操作內(nèi)核地址空間,具有定的安全保護(hù)作用;內(nèi)核態(tài)線程共享內(nèi)核地址空間; 3、內(nèi)存地址——MMU 地址轉(zhuǎn)換· MMU
    發(fā)表于 08-26 08:05

    鴻蒙內(nèi)核源碼分析(內(nèi)存分配篇):內(nèi)存的分配方式有哪些

    解決物理內(nèi)存滿足不了多進(jìn)程對內(nèi)存的需要。虛擬內(nèi)存可以遠(yuǎn)大于物理內(nèi)存。虛擬空間是進(jìn)程層面的概念,每個(gè)進(jìn)程都有
    發(fā)表于 11-20 10:07

    鴻蒙內(nèi)核源碼分析(內(nèi)存分配篇):內(nèi)存的分配方式有哪些

    (); } else {return NULL; }}代碼可以看出初始化對物理內(nèi)存做了幾個(gè)動(dòng)作:1.對整個(gè)物理內(nèi)存進(jìn)行了分頁,每頁框4K,存放在大
    發(fā)表于 11-20 17:34

    WCDMA系統(tǒng)物理信道的功率分配方式

    WCDMA系統(tǒng)物理信道的功率分配方式 如下圖所述,每個(gè)信道在調(diào)制前都有個(gè)系數(shù)對它進(jìn)行功率大小控制。
    發(fā)表于 06-15 12:35 ?2089次閱讀

    操作系統(tǒng)的分頁存儲(chǔ)基本概念

    非連續(xù)分配允許個(gè)程序分散地裝入到不相鄰的內(nèi)存分區(qū),根據(jù)分區(qū)的大小是否固定分為分頁存儲(chǔ)管理方式
    的頭像 發(fā)表于 03-15 16:36 ?4549次閱讀

    個(gè)由于MySQL分頁導(dǎo)致的線上事故

    其實(shí)對于我們的 MySQL 查詢語句來說,整體效率還是可以的,該有的聯(lián)查詢優(yōu)化都有,該簡略的查詢內(nèi)容也有,關(guān)鍵條件字段和排序字段該有的索引也都在,問題在于他一頁一頁
    的頭像 發(fā)表于 05-10 15:31 ?748次閱讀

    MMU多級映射過程

    物理頁面大小級地址總線寬度不同,的級數(shù)也不同。以AArch64運(yùn)行狀態(tài),4KB大小物理頁面,48位地址寬度為例,映射的查詢過程如圖
    的頭像 發(fā)表于 11-26 16:28 ?873次閱讀
    MMU多級<b class='flag-5'>頁</b><b class='flag-5'>表</b>映射過程

    mybatis邏輯分頁和物理分頁的區(qū)別

    MyBatis是個(gè)開源的Java持久層框架,它與其他ORM(對象關(guān)系映射)框架相比,具有更加靈活和高性能的特點(diǎn)。MyBatis提供了兩種分頁方式,即邏輯
    的頭像 發(fā)表于 12-03 14:54 ?777次閱讀