좀 오래된 기사를 읽고 있어요커널 관리 메모리그리고 페이지 테이블 항목(PTE)이 어디로 갈 것인지에 대한 질문이 있습니다.
이 예에서 저자는 메모리가 4GB이고 PAE가 없는 32비트 시스템을 사용한다고 가정합니다. 이 문서에서는 3GB를 가상 메모리로 지정할 수 있다고 가정합니다(4KB 페이지의 3GB == 786,432 페이지). 그러나 각 페이지에 4바이트 PTE가 있는 경우 자체적으로 약 3.1MB의 메모리를 차지하며 이는 커널에 의해 예약되어야 합니다. 이것이 커널 메모리의 일부입니까? 즉. 커널이 사용자 주소 지정이 가능한 3GB 이상의 메모리를 예약합니까?
그렇다면 커널은 먼저 얼마나 많은 커널(시스템) 메모리가 필요한지, 그리고 부팅 시 사용자가 주소 지정할 수 있는 것으로 표시할 수 있는 메모리 양은 얼마나 되는지 계산하고 파악합니까?
커널/시스템 예약 메모리에는 또 무엇이 있습니까?
답변1
일반적으로 PAE가 없는 x86에서 사용자/커널 분할은 3Gb/1Gb입니다. 즉, 상위 1GB의 메모리는 커널용으로 예약되어 있고 사용자 공간은 하위 3GB의 메모리에 액세스한다는 의미입니다. 이는 페이지 테이블(CR3)을 가리키는 레지스터를 업데이트하고 컨텍스트 전환이 발생할 때마다 TLB를 플러시하는 것을 피하기 위해 수행됩니다. 이 최적화를 통해 CR3이 업데이트되고 다른 프로세스가 예약된 경우에만 TLB가 플러시됩니다.
가상 주소를 해석하는 방법에 대한 정보는 다음 세 위치에 저장됩니다.
- 가상 메모리 영역(일명 VMA, 일명 맵): 이 영역은 인접한 메모리 영역을 백업 저장소(익명 맵의 파일 또는 스왑 영역)와 연결합니다.
- 페이지 테이블 항목: 이 항목은 가상 주소의 전체 페이지를 해당 실제 주소와 연결하고 권한 및 기타 플래그를 포함합니다. PTE 로드됨게으른VMA에서: PTE가 반드시 인스턴스화될 필요는 없습니다(액세스가 시도되기 전에 해당 페이지가 페이징됩니다. 이는 요구 페이징입니다). 3GB 메모리에 액세스하는 프로세스에만 3Mb 페이지 테이블이 필요합니다.
- TLB: 페이지 테이블의 하드웨어 캐시입니다.