문제

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 레벨 페이지 테이블로의 이동에 대해 이야기하는 몇 가지 기사가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top