Linux 커널 스왑 시스템에 대해 자세히 알아보려고 합니다.
메모리 내 ar/o 또는 바이너리의 코드 부분에 스왑이 필요한 경우 이미 디스크의 파일로 지원되므로 스왑 파일/파티션으로 이동해서는 안 된다는 것을 발견했습니다.
이것이 실제로 작동하는 방식입니까? 파일 지원 r/o 또는 rx 할당 페이지가 전용 파일로 교환됩니까? 그렇다면 누군가 이 문제를 처리하는 코드를 알려줄 수 있습니까? 못찾는거같아
답변1
그래 그거야. 디스크에서 콘텐츠를 사용할 수 있는 페이지는 삭제되며 "개인 파일"로 교체할 필요도 없습니다. 스왑되지 않은 백업 저장소가 있는 더티 페이지(예를 들어, 메모리 매핑된 파일)이 이 백업 저장소에 기록됩니다. 스와핑은 백업 저장소가 없는 제거 가능한 페이지에만 사용됩니다.
대부분의 경우 이는 다음과 kswapd
같은 작업을 수행하여 처리됩니다.재활용:
비동기식으로 메모리 페이지를 스캔하여 다른 곳에서 사용할 수 있는 데이터가 포함된 경우 해당 페이지를 해제하거나 백업 저장 장치로 제거합니다(더티 페이지 기억하시나요?).
바라보다mm/vmscan.c
구현을 위해.