캐시되지 않은 페이지의 페이지 테이블 주소 필드

캐시되지 않은 페이지의 페이지 테이블 주소 필드

Linux 계열 시스템에 대한 Bryant와 O'Hallaron의 (다소 추상적인) 페이지 테이블 모델에 따르면 각 페이지 테이블 항목(PTE)에는 세 가지 값 중 하나를 보유하는 주소 필드가 있습니다. (1) 물리적 주소(실제로 페이지 번호는 (2) 페이지를 찾을 수 있는 장기 저장 장치의 해당 위치 식별자 또는 (3) 할당되지 않은 페이지를 나타내는 0입니다. 페이지가 장기 저장소에서 주 메모리로 교체되었다고 가정합니다. 이 계정에서 커널은 장기 저장 주소(2)를 물리적 주소(1)로 바꿉니다. 이제 다른 페이지를 교체할 수 있는 공간을 확보하기 위해 실제 메모리의 동일한 페이지를 제거해야 한다고 가정합니다. 실제 주소로 덮어쓴 경우 원래 장기 저장 주소를 PTE로 복원하는 방법은 무엇입니까? 감사해요.

답변1

PTE 대표가상페이지. 말했듯이, 가상 페이지가 메인 메모리에 존재할 때 PTE의 주소 필드는 물리적 페이지 프레임 번호(PFN)를 보유합니다.

물리적해당 페이지는 struct page다음과 같습니다.

다음 flags은:

struct address_space *mapping;

페이지 캐시에 있는 페이지(대부분의 시스템에서 대부분의 페이지)의 경우 mapping페이지를 백업하는 파일에 액세스하는 데 필요한 정보를 가리킵니다. 그러나 페이지가 익명 페이지(스왑으로 지원되는 사용자 공간 메모리)인 경우 구조를 mapping가리킵니다 anon_vma[...]

--구조화된 페이지에 더 많은 콘텐츠를 집어넣기,LWN.net

그런 다음 이 page→index필드는 swp_entry_t익명 페이지의 구조를 저장하는 데 사용됩니다. (페이지 캐시에 있는 페이지의 경우 파일 오프셋을 저장합니다.)

swp_entry_t스왑 장치의 인덱스와 스왑 장치 내 위치를 저장합니다.

2004년에 이것이 어떻게 작동하는지에 대한 구체적인 세부 사항은 다음에서 찾을 수 있습니다.Linux 가상 메모리 관리자 이해 - 스왑 관리, Mel Gorman이 작성했습니다.

답변2

페이지 캐시의 ped 파일, 스왑 또는 패시브 매핑 파일 에 대해 묻는 것인지 귀하의 질문에서 완전히 명확하지 않으므로 mmap()모두 답변하겠습니다.

mmap이 아닌 경우 제거는 제거입니다. 페이지가 깨끗해지면 간단히 삭제할 수 있습니다. 파일 백업이 없는 페이지가 주 메모리에서 제거되면 일반적으로 주소를 복원할 필요가 없습니다. 다음 번에 파일에 액세스할 때 페이지 오류를 새 캐시 항목으로 전송하기 때문입니다. 스왑의 경우에도 비슷한 일이 발생합니다. 스왑의 페이지에 오류가 발생하고 동일한 페이지가 나중에 제거되어야 하는 경우 다음에 새 스왑 주소를 제공하고 이를 설정할 수 있습니다. 페이지가 PTE에 존재하고 깨끗합니다. (또는 다음과 같은 경우에는 스왑 캐시를 사용합니다). *

mmap의 경우 수명주기는 시스템 호출에 의해 제어됩니다 mmap(). 범위는 명시적으로 가상 메모리의 연속 부분에 매핑되며 mmap()이 매핑에 대한 메타데이터(예: 참조 카운트 지원 ​​FD, 오프셋, 크기 등이 있음)는 관련 가상 메모리 영역(음악 관리 협회)에 저장됩니다. 페이지가 제거되더라도 VMA는 매핑 정보를 유지하므로 다음에 액세스할 때 커널이 어디에서 잘못되었는지 알 수 있습니다.

* 실제로 스와핑 및 일반 페이징 활동은 일반적으로 페이지 수준에서 발생하지 않지만 클러스터 스와핑 또는 미리 읽기 배치와 같은 일부 낮은 세분성에서 발생하는 경우가 많습니다.

관련 정보