내 이해에 따르면, CPU가 특정 메모리 위치에 액세스할 때(예를 들어 주소가 있는 메모리 위치가 4
값으로 설정된 경우 100
) 해당 주소를 가상 주소로 처리 4
하고 현재 Loaded를 사용하여 가상 주소가 가리키는 물리적 주소를 찾습니다. 프로세스 페이지 테이블.
다음은 프로세스 페이지 테이블의 예입니다.
따라서 이 예에서 CPU는 물리적 주소가 있는 메모리 위치를 12346
값으로 설정합니다 100
.
그러나 매핑된 물리적 주소가 없는 가상 주소에 액세스하고 있는지 CPU가 어떻게 알 수 있습니까? 프로세스 페이지 테이블에 이 사실을 나타내는 플래그가 있습니까? 예를 들어 프로세스 페이지 테이블에 "할당된 플래그"가 있습니까?
답변1
x86에 대해 구체적으로 질문하셨기 때문에 해당 아키텍처를 사용하겠습니다. 하지만 이는 메모리 페이징을 지원하는 아키텍처 전체는 아니더라도 대부분에 적용됩니다.
x86 페이지 테이블에는 페이지가 메모리에 존재하는지 여부를 나타내는 "현재" 비트가 있습니다. 만약 그렇다면, 권한 등이 이를 허용한다면, CPU는 (MMU의 도움으로) 메모리 접근을 직접 처리합니다. 그렇지 않으면 예외가 발생하고 커널은 페이지 테이블 항목의 정보와 자체 데이터 구조를 사용하여 무엇을 할지 결정할 수 있습니다. 즉, 물리적 페이지 할당, 디스크에서 데이터 읽기, 물리적 페이지 복사(복사를 위해) 쓰는 중) 잠깐