레벨 4 페이지 테이블에서 VA에서 PA로의 변환에는 4개의 메모리 액세스만 필요한 방법

레벨 4 페이지 테이블에서 VA에서 PA로의 변환에는 4개의 메모리 액세스만 필요한 방법

페이지 테이블 관리에 대해 배우고 있는데 VA to PA translation4개의 메모리 액세스가 필요하다는 것을 배웠습니다 4-level page table(TLB 누락 및 페이지 워크 캐시의 누락을 고려).

그러나 Linux에서는 follow_pagePTW 함수를 사용하고 해당 함수는 내부적으로 호출되므로 , 등을 follow_page_mask추가로 호출합니다 .p4d_offsetpud_offsetpgd_offset

그래서 내 질문은 예를 들어 호출되면 디렉토리의 가상 주소를 pud_offset반환하고 (제 생각에는) 디렉토리의 실제 주소를 얻으려면 다시 PTW를 수행해야 한다는 것입니다.PMDPMD

그렇다면 memory accesses4의 주소 변환은 어떻게 이루어지나요? 4개 이상 아닌가요?

답변1

사람들이 x86에서 4단계 페이지 테이블을 사용하는 가상-물리적 주소 변환에는 최대 4개의 메모리 액세스가 필요하다고 말하는 것은 선형을 디코딩하기 위해 CPU(엄격히 말하면 MMU)가 수행해야 하는 작업을 의미하는 것입니다. 메모리. 주소를 물리적 주소로 변환합니다.

이 프로세스는 볼륨 3A에 자세히 설명되어 있습니다.인텔® 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼, 섹션 4.5. 4KiB 페이지가 있는 4레벨 모드(최악의 경우)에서 선형 주소는 다음과 같이 구성됩니다.

47-39 38-30 29~21일 20~12일 11-0
PML4 디렉토리 포인터 목차 테이블 오프셋

이러한 주소가 주어지면 전체 주소 디코딩이 필요한 경우 CPU는 다음을 수행해야 합니다.

  • CR3관련 PML4 항목을 찾기 위해 기본과 PML4 값을 사용합니다 (1개의 메모리 액세스).
  • PML4 항목에 해당하는 페이지 디렉터리 포인터 테이블에서 디렉터리 포인터에 대한 항목을 읽습니다(1개의 메모리 액세스).
  • 페이지 디렉토리에서 해당 디렉토리에 대한 항목을 읽습니다(1개의 메모리 액세스).
  • 페이지 테이블에서 테이블의 항목을 읽습니다(한 번의 메모리 액세스).

마지막 읽기 결과는 선형 주소의 오프셋 부분과 결합되어 총 4번의 메모리 액세스 후 물리적 주소를 제공합니다.

커널은 페이지 오류가 발생할 때만 관여합니다. 이를 처리하기 위해 CPU가 이상적으로 수행하는 것보다 더 많은 작업을 수행해야 합니다.

답변2

페이지 디렉토리와 페이지 테이블 항목에는 페이지 테이블과 페이지 디렉토리의 시작 부분에 대한 물리적 주소가 포함됩니다. 따라서 이러한 위치를 찾기 위해 페이지 테이블 탐색을 수행할 필요가 없습니다.

메모리 액세스는 메모리 관리 장치의 하드웨어에 의해 수행되므로 잘못된 주소나 매핑되지 않은 페이지에 액세스하려고 시도하는 등 일부 오류가 발생하지 않는 한 액세스는 소프트웨어에 투명합니다.

관련 정보