Linux 커널에서 페이징을 활성화하는 방법을 연구 중이지만 커널이 8MB에서 1GB의 가상 메모리를 어떻게 처리하는지 이해하지 못합니다. 내 말은 부팅 단계에서 커널이 매우 작은 페이지 테이블을 이미지에 인코딩한다는 것입니다. swapper_pg_dir이 가리키는 이 페이지 테이블을 사용하면 페이지 테이블의 처음 두 항목만 쓸 수 있습니다. 각 항목은 4MB 페이지를 가리킵니다. 따라서 커널은 총 8MB의 가상 메모리만 주소 지정할 수 있습니다. 그런 다음 커널은 1GB의 가상 메모리를 모두 구동하기 위해 두 번째 수준 페이지 테이블을 저장해야 합니다. 이 문제를 해결하려면 두 번째 수준 페이지 테이블 항목이 배치된 버퍼를 검색할 수 있는 일부 메모리 할당자, 즉 bootmem 할당자에 의존해야 합니다.
그래서 내 질문은: 커널이 가상 메모리를 8MB에서 1GB까지 어떻게 처리합니까?
답변1
문제가 정확히 무엇인지 잘 모르겠습니다. 페이징 단위를 사용하여 수행되었습니다. 여기를 참조하세요.https://stackoverflow.com/questions/18431261/how-does-x86-paging-work
896MB 미만의 페이지 디렉터리는 여전히 디렉터리에 저장되며 swapper_pg_dir
처음 8MB가 초기화된 후에 다시 초기화됩니다. 896MB 이상, 4096MB 미만에서는 상황이 더 복잡해지고, 4096MB 이상에서는 상황이 더욱 복잡해집니다.