天天看點

linux 核心參數 pte,linux核心中的PTE結構

我一直試圖在linux源代碼中檢視一個結構/聯合,它與禁用PAE的x86系統上的PTE相對應.到目前為止,我在arch / x86 / include / asm / page_32.h中隻找到了以下内容

typedef union {

pteval_t pte;

pteval_t pte_low;

} pte_t;

我現在有點困惑,因為我在我面前打開了英特爾參考手冊第3A卷,并且該聯合中的任何内容都與手冊中解釋的PTE中存在的十幾個奇數字段相對應.

這可能是一個微不足道的問題,但對我而言,它更像是了解Linux核心中記憶體管理過程中的絆腳石.

編輯:我有2.6.29源代碼

解決方法:

pteval_t隻是将頁表條目視為不透明的blob – 在您正在檢視的體系結構上,它隻是一個32位無符号值.

使用按位運算符和掩碼通路PTE中的字段 – 在源代碼中我很友善(Linux 2.6.24),這些字段在include / asm-x86 / pgtable_32.h中定義.您在“英特爾參考手冊”中看到的字段(大多數是機關标志)在此處定義 – 例如:

#define _PAGE_PRESENT 0x001

#define _PAGE_RW 0x002

#define _PAGE_USER 0x004

#define _PAGE_PWT 0x008

#define _PAGE_PCD 0x010

#define _PAGE_ACCESSED 0x020

#define _PAGE_DIRTY 0x040

#define _PAGE_PSE 0x080

#define _PAGE_GLOBAL 0x100

#define _PAGE_UNUSED1 0x200

#define _PAGE_UNUSED2 0x400

#define _PAGE_UNUSED3 0x800

标簽:linux,paging,linux-kernel

來源: https://codeday.me/bug/20190724/1519714.html