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

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

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). 페이지가 제거되더라도 VMA는 매핑 정보를 유지하므로 다음에 액세스할 때 커널이 오류가 발생한 위치를 알 수 있습니다.

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

관련 정보