896MB 이상의 RAM을 갖춘 32비트 시스템에서는 커널 가상 주소와 비연속 매핑으로 인해 커널 주소 매핑을 변경해야 하는 것은 당연합니다.
그런데 64비트에서는 어떻게 처리되나요? RAM은 항상 주소 공간에 완전히 매핑 가능하므로 기본 커널 페이지 테이블은 초기화 시 한 번 설정되고 매핑이 변경되지 않으므로 변경되지 않아야 합니다. 그렇다면 사용자 페이지 테이블의 이 커널 영역은 업데이트할 필요가 전혀 없습니다.
그런데, 32비트에서 사용자 프로세스 페이지 테이블이 어떻게 업데이트되는지 잘 설명하는 사람이 있나요? 자주 언급되는 것처럼 메인 커널 페이지 테이블은 직접 사용되지 않고 참조용으로만 사용됩니다. 사용자 페이지 테이블의 커널 영역 항목이 각 프로세스에 대해 복사됩니까?
답변1
896MB 이상의 RAM을 갖춘 32비트 시스템에서는 커널 가상 주소와 비연속 매핑으로 인해 커널 주소 매핑을 변경해야 한다는 것이 분명합니다.
응, 이거라고 돼높은 메모리.
그런데 64비트에서는 어떻게 처리되나요? RAM은 항상 주소 공간에 완전히 매핑 가능하므로 기본 커널 페이지 테이블은 초기화 시 한 번 설정되고 매핑이 변경되지 않으므로 변경되지 않아야 합니다. 그렇다면 사용자 페이지 테이블의 이 커널 영역은 업데이트할 필요가 전혀 없습니다.
예.
그런데, 32비트에서 사용자 프로세스 페이지 테이블이 어떻게 업데이트되는지 잘 설명하는 사람이 있나요? 자주 언급되는 것처럼 메인 커널 페이지 테이블은 직접 사용되지 않고 참조용으로만 사용됩니다. 사용자 페이지 테이블의 커널 영역 항목이 각 프로세스에 대해 복사됩니까?
위에 링크된 highmem 문서에서는 highmem 매핑에는 "커널의 페이지 테이블"만 조작하면 된다고 나와 있습니다.
"페이지 테이블"은 실제로 트리 구조입니다. 예를 들어"4단계 페이지 테이블"[LWN.net, 2004]. 최상위 수준은 단일 페이지(4096바이트)입니다. 커널 범위를 매핑하는 항목은 모든 프로세스에서 동일한 값으로 설정되므로 공유됩니다. 임시 매핑은 트리의 하위 수준에서 발생하므로 각 프로세스 페이지 테이블을 개별적으로 수정하는 대신 공유 커널 페이지 테이블 내부만 수정하면 됩니다.
적어도 그것은 나의 일반적인 개요입니다. 나는 모든 단어를 가지고 있지 않습니다.