Windows中頁表定址之奧妙

2021-09-30 08:48:44 字數 461 閱讀 6520

首先,看下面的乙個巨集:

此巨集的含義是,給定乙個pte的虛擬位址,返回該pte所指頁面的虛擬位址。

舉例而言,假設pte的位址(虛擬位址)為0xc0390c84,即1100,0000,00|11,1001,0000,|1100,1000,0100,這裡「|」符號將它分為頁目錄索引、頁表索引、頁內偏移三部分。在windows中,頁目錄(cr3暫存器)的位址是0xc0300000,所以,處理器在訪問該pte的時候,首先從頁目錄頁面中,找到1100,0000,00項,即第0x300項。這一項由系統特別設定好,它指向頁目錄自身(後面進一步解釋為什麼這麼設定)。接下來查詢0xc0390c84的頁表索引,即11,1001,0000,處理器繼續在頁目錄頁面中查詢,找到11,1001,0000,即第0x390項,這一項指向乙個頁表頁面。最後,處理器再根據頁內偏移1100,1000,0100,即0xc84,定位到第0x321項。此pte的定址過程如下圖所示。

本文**:

記憶體定址之段頁儲存機制分析

學習作業系統這門課的時候,曾不止一次的接觸到作業系統的段頁式管理機制,但當是都是淺嘗輒止,不知道作業系統為啥要有這個機制。如今時間過去很久,關於這個機制的背後的原理和實現機制,早已忘記很久了。最近在看作業系統方面的知識,藉此把自己的理解記錄一下。要理解段頁式管理機制的發展歷程,還得從早期的處理器的定...

頁表項和頁表的關係 Linux中的頁表實現

頁表是軟體實現的,但是頁表的查詢是mmu完成的,所以硬體定義了頁表的實現規則,軟體可以做的只有選擇頁表的級數,是否使用huge page以及填充對應的許可權標誌位。前面的文章主要介紹了頁表的實現規則,本文將討論linux系統中頁表的具體實現。相關資料結構 還是那個 頁表,但增加了很多內容。頁表pgd...

資料結構系列之線性表(間接定址)

ifndef indirectlist h define indirectlist h include using namespace std template class indirectiterator template class indirectlist int length const b...