내가 이해한 바로는 Linux가 물리적 페이지 프레임을 RAM 안팎으로 교체할 때 해당 물리적 페이지에 매핑된 모든 가상 페이지에 대해 유효한 비트를 설정해야 합니다. 가상 페이지를 물리적 페이지 프레임에 매핑하는 것은 교과서에 잘 설명되어 있는 것 같지만, 커널은 물리적 페이지 프레임에서 모든 가상 페이지를 어떻게 찾습니까? 실제로 리눅스 소스코드로 구현할 수 있다면 감사하겠습니다.
답변1
메모리의 각 물리적 페이지는 다음 명령을 사용하여 커널에서 추적됩니다.구조 페이지. 이를 통해 커널은 특히 익명 및 파일 기반 매핑에 대해 각 페이지가 사용되는 방법을 설명할 수 있습니다.매핑필드는 다음을 가리킨다.address_space
매핑된 개체의 구조를 설명하는 데 사용됩니다.
주어진 물리적 페이지를 사용하여 가상 매핑을 찾아야 하는 코드의 경우 커널은 다음과 같은 세트를 제공합니다.역방향 매핑 기능. 이를 통해 익명 매핑을 탐색하고 파일 기반 매핑의 역 매핑을 허용합니다. 예를 들어,try_to_unmap
매핑을 해제할 수 있도록 지정된 물리적 페이지의 사용을 찾기 위해 맵을 탐색합니다.shrink_page_list
수신 전화try_to_unmap
프로세스에 매핑된 페이지의 매핑을 해제해야 한다고 결정하면