MMU는 변환해야 하는 주소를 어떻게 찾나요?

MMU는 변환해야 하는 주소를 어떻게 찾나요?

특정 주소에서 일부 데이터를 읽고 쓰려고 할 때 디렉토리의 첫 번째 페이지가 어디에 저장되어 있는지와 변환하려는 주소를 알아야 합니다.

첫 번째 페이지 디렉토리(내가 아는 한 Linux는 4레벨 페이징을 사용하므로 첫 번째 디렉토리는 PGD)이고 Intel의 경우 CR3레지스터에는 PGD의 주소가 포함되지만 가상 주소는 어디에 저장됩니까? MMU는 이 주소나 저 주소를 정확하게 번역해야 한다는 것을 어떻게 이해합니까?

UPD: 나는 내 질문을 명확히 하고 내 의견에 대해 몇 가지 세부 사항을 제공해야 한다고 생각했습니다.

제가 이해한 바에 따르면, 일부 가상 주소를 변환하려면 다음 단계를 거쳐야 합니다.

  1. TLB를 확인하세요.
  2. TLB가 도달하면 물리적 주소(PA)를 갖게 됩니다.
  3. 그렇지 않다면 우리가 처리해야 할 일번역 오류
  4. 번역 오류가 발생하는 동안 우리는 이를 거쳐야 합니다.소프트웨어 페이지 테이블PA를 찾아보세요.
  5. 여기서 커널 모드로 전환해야 합니다.(그런데, 일반적으로 커널 페이지 테이블과 사용자 페이지 테이블은 동일하고 차이점은 권한에만 있다는 것을 알고 있는데 커널 모드로 전환하지 않는 방법이 있습니까?)
  6. 그럼 우리는 설정해야CR3PGD ​​주소(또는 다른 최상위 페이지 디렉터리)에 등록하세요.
  7. 이제 이 테이블을 반복하는 것이 우리의 임무인가요? 소프트웨어가 스스로 이를 수행해야 한다면 일부 var의 VA(가상 주소)를 알고 페이지 테이블에서 PA를 조회할 수 있습니까? ? ? 아니면 MMU(또는 이와 유사한 것)에서 작동하고 이러한 테이블을 반복할 것입니다. CR3의 경우 PGD가 어디에 있는지 알지만 변환되는 주소를 어떻게 이해할 수 있습니까? 그것은 어떤 레지스터에 있습니까, 아니면 어딘가에 메모리에 로드되어 있습니까?

시간 내 주셔서 감사합니다!

답변1

귀하가 나열한 단계는 정확하지 않습니다. 이 문제를 해결하면 무슨 일이 일어나고 있는지 알 수 있기를 바랍니다.

  1. CPU가 메모리에 액세스하려고 시도합니다(예를 들어인출 명령어 또는 현재 명령어가 메모리에 액세스하기 때문에) - 가상 주소가 나오는 곳입니다.

  2. TLB를 확인하세요.

  3. TLB에 가상 주소에 대한 항목이 있으면 해당 실제 주소를 얻습니다.

  4. 그렇지 않으면 MMU가 TLB 누락을 처리해야 합니다(이것은 x86의 결함이 아니며 계산되지만 커널에는 알려지지 않습니다).

  5. MMU는 .NET에 저장된 값부터 시작하여 페이지 테이블을 탐색합니다 CR3. 0단계부터 시작하여 해결해야 할 가상 주소를 알고 있습니다.

  6. 커널 모드로의 전환은 없으며 이는 모두 MMU(x86)에 의해 처리됩니다.

  7. CR3그리고 메모리 액세스 전에 페이지 테이블을 설정해야 하며 여기서는 아무것도 변경되지 않습니다. (바라보다페이지 워킹 일관성에 대한 심층 분석.)

일부 아키텍처(MIPS인 것 같아요)하다TLB 미스를 처리할 때 커널이 관련됩니다. 이 경우 처리해야 하는 가상 주소가 오류 메시지에 제공됩니다.

관련 정보