Linux 커널이 x86 시스템에서 가상 메모리를 8MB에서 1GB로 처리하는 방법

Linux 커널이 x86 시스템에서 가상 메모리를 8MB에서 1GB로 처리하는 방법

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 이상에서는 상황이 더욱 복잡해집니다.

관련 정보