![Linux는 어떻게 물리적 주소를 (여러 개일 수 있는) 가상 주소로 변환합니까?](https://linux55.com/image/165340/Linux%EB%8A%94%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%AC%BC%EB%A6%AC%EC%A0%81%20%EC%A3%BC%EC%86%8C%EB%A5%BC%20(%EC%97%AC%EB%9F%AC%20%EA%B0%9C%EC%9D%BC%20%EC%88%98%20%EC%9E%88%EB%8A%94)%20%EA%B0%80%EC%83%81%20%EC%A3%BC%EC%86%8C%EB%A1%9C%20%EB%B3%80%ED%99%98%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
내가 이해한 바로는 Linux가 물리적 페이지 프레임을 RAM 안팎으로 교체할 때 해당 물리적 페이지에 매핑된 모든 가상 페이지에 대해 유효한 비트를 설정해야 합니다. 가상 페이지를 물리적 페이지 프레임에 매핑하는 것은 교과서에 잘 설명되어 있는 것 같지만, 커널은 물리적 페이지 프레임에서 모든 가상 페이지를 어떻게 찾습니까? 실제로 리눅스 소스코드로 구현할 수 있다면 감사하겠습니다.
답변1
메모리의 각 물리적 페이지는 다음 명령을 사용하여 커널에서 추적됩니다.구조 페이지. 이를 통해 커널은 특히 익명 및 파일 기반 매핑에 대해 각 페이지가 사용되는 방법을 설명할 수 있습니다.매핑필드는 다음을 가리킨다.address_space
매핑된 개체의 구조를 설명하는 데 사용됩니다.
주어진 물리적 페이지를 사용하여 가상 매핑을 찾아야 하는 코드의 경우 커널은 다음과 같은 세트를 제공합니다.역방향 매핑 기능. 이를 통해 익명 매핑을 탐색하고 파일 기반 매핑의 역 매핑을 허용합니다. 예를 들어,try_to_unmap
매핑을 해제할 수 있도록 지정된 물리적 페이지의 사용을 찾기 위해 맵을 탐색합니다.shrink_page_list
수신 전화try_to_unmap
프로세스에 매핑된 페이지의 매핑을 해제해야 한다고 결정하면