문제
PAE 비활성화 된 X86 시스템의 PTE에 해당하는 구조/통합에 대한 Linux 소스 코드를 둘러 보려고 노력했습니다. 지금까지 나는 아치/x86/include/asm/page_32.h에서 다음을 발견했습니다.
typedef union {
pteval_t pte;
pteval_t pte_low;
} pte_t;
나는 내 앞에 Intel Reference Manual Vol 3A가 열리기 때문에 지금 약간 혼란스러워하며, 그 노조의 어떤 것도 매뉴얼이 설명하는 것처럼 PTE에 존재하는 12 개의 홀수 필드에 해당하지 않습니다.
이것은 사소한 질문 일지 모르지만 Linux 커널의 메모리 관리를 이해하는 과정에서 더욱 강화 된 블록이되었습니다.
편집 : 나와 함께 2.6.29 소스가 있습니다
해결책
PTEVAL_T는 페이지 테이블 항목을 불투명 한 블로브로 취급합니다 - 당신이보고있는 아키텍처에서는 단지 32 비트 서명되지 않은 값입니다.
PTE 내의 필드는 비트 타이어 연산자 및 마스크를 사용하여 액세스합니다. 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 /* 4 MB (or 2MB) page, Pentium+, if present.. */
#define _PAGE_GLOBAL 0x100 /* Global TLB entry PPro+ */
#define _PAGE_UNUSED1 0x200 /* available for programmer */
#define _PAGE_UNUSED2 0x400
#define _PAGE_UNUSED3 0x800
다른 팁
나는 구매를 추천 할 것이다 Linux 커널 이해 오라일리에서뿐만 아니라 리눅스 장치 드라이버. 그리고 구독 lwn.net; 당신은 그들의 좋은 출발을 얻을 수 있지만 커널 색인 구독 없이도 페이지.
메모리 관리의 경우 "메모리 관리"섹션의 색인 페이지 및 "대형 메모리 시스템"섹션을 참조하십시오. 후자는 코드 의이 영역을 이해하는 데 도움이 될 4 레벨 페이지 테이블로의 이동에 대해 이야기하는 몇 가지 기사가 있습니다.