《深入理解LINUX記憶體管理》學習筆記 (四)

來源:互聯網
上載者:User
鄭重聲明:未經本人允許,不得用於商業或非商業的轉載和使用,如有需要請聯絡: yrj1978@hotmail.com 頁表條目的操作

X86體繫結構的情況下,在include/asm-x86/pgtable.h檔案中,定義了“析出”或者“檢查”頁表條目中的值的幾個宏(在2.6.24版本的核心中,由於體繫結構的關係,這幾個宏可能分布在幾個相關的標頭檔中)。

通過 4 個宏,把一個線性地址從第一級頁目錄表 (Page directories) 追巡最後一級頁目錄表。

pgd_offset: 通過線性地址 ( 其中的一部分指出了需要訪問的記憶體位址在的 PGD 中的索引 ) 和進程的 mm_struct 資料結構對象,返回一個指向 PGD 條目的地址,內容是某個 PUD 頁面的首地址。

pud_offset: 通過線性地址(也是索引)和指向 PGD 條目的地址,返回一個指向 PUD 條目的地址,內容是某個 PMD 頁面的首地址。如果硬體系統並不支援 PUD , 則直接返回指向 PGD 條目的地址。也就是通過巧妙的直接返回 PGD 的方式,使得不同體繫結構下,統一的軟體架構。

pmd_offset: 通過線性地址(也是索引)和指向 PUD 條目的地址,返回一個指向 PMD 條目的地址,內容是某個 PTE 頁面的首地址。如果硬體系統並不支援 PMD , 則直接返回指向 PUD 條目的地址。也就是通過巧妙的直接返回 PUD 的方式,使得不同體繫結構下,統一的軟體架構。

pte_offset: 通過線性地址(也是索引)和指向 PMD 條目的地址(內容是 PMD 頁面的首地址),返回一個指向 PTE 條目的地址,內容是某個需要訪問的資料記憶體頁面的首地址(物理地址),這個地址和線性地址的低位部分的資料在記憶體頁面中的位移相加,就獲得了資料真正所在的物理地址了。

 

第二組宏,用於檢測頁表條目是否存在或者是否可用的資訊。 pte_none(), pmd_none(), pud_none(),pgd_none() ,如果對應的條目不存在,則返回 1 。宏的定義只是檢測條目的內容是否全 0. pte_present(), pmd_present(), pud_present(),pgd_present(), 如果條目中的 PRESENT 位被設定,則返回 1. pte_clear(), pmd_clear(), pud_clean(),pgd_clear(), 對相應條目清零。 pmd_bad(), pud_bad(),pgd_bad(),

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.