프로세스의 페이지 테이블은 어떤 페이지가 교체되었는지 어떻게 알 수 있나요?

프로세스의 페이지 테이블은 어떤 페이지가 교체되었는지 어떻게 알 수 있나요?

나는 다음 링크를 언급하고 있습니다 :

우리가 찾고 있는 물리적 페이지가 스왑 영역에 있을 때의 페이지 테이블 내용

Linux에서 컨텍스트 전환 후 페이지 테이블을 업데이트하는 방법

커널은 스왑 파티션\파일의 스왑 메모리 페이지를 어떻게 처리합니까?

난 아직도 혼란스러워어떻게프로세스는 해당 페이지 중 하나가 보조 메모리로 스왑되었는지 여부를 알고 있습니다.

예:

프로세스 A1은 1프레임의 물리적 메모리를 할당하고 여기에 씁니다. PTE의 사전 설정, 수정 및 최신 비트는 1로 설정됩니다.

이제 프로세스 A2의 차례입니다. 더 많은 메모리가 필요하고 MMU 커널은 수정 비트가 설정되었기 때문에 프로세스 A1의 페이지를 보조 메모리에 쓰기로 결정합니다.

프로세스 A1이 다시 돌아옵니다. 컨텍스트와 PT를 복원했으며 이제 페이지를 읽고 쓸 준비가 되었으며(현재 비트가 여전히 1로 설정되어 있다고 가정) 프로세스 A2의 페이지에 액세스합니다. (?)

내가 이해한 바로는 그 과정이 간단하지 않다.알다MMU는 특정 페이지가 보조 메모리에 있다는 것을 알고 있지만 프로세스 A1의 PTE를 수정해야 하는 위치에 어떤 페이지가 있습니까? MMU 또는 PT에는 페이지가 이제 교체되었으며 페이지에서 복원되어야 함을 나타내는 일부 정보가 있어야 합니다. 편집: PT/PTE가 스택에 있어도 현재 비트가 0으로 변경됩니까?

답변1

프로세스는 모르지만 커널은 알고 있습니다.

MMU는 프로세스 A1의 페이지를 보조 메모리에 쓰기로 결정합니다.

MMU는 이를 결정하지 않고 커널이 결정합니다. A2에 더 많은 메모리가 필요하면 커널에 알리고 A2에 제공할 페이지를 찾습니다. 여유 공간이 없으면 페이지 교정을 실행합니다. 페이지가 백업 저장소로 제거되더라도 페이지가 "속해 있는" 프로세스(있는 경우)에 관계없이 "현재" 비트가 지워집니다. 커널은 이러한 정보를 추적합니다.

A1에 제어권이 반환되면 커널은 A1의 PTE를 복원하기 위해 커널이 가지고 있는 정보를 사용합니다. 따라서 제거된 페이지의 PTE 현재 비트가 지워집니다. A1이 이러한 페이지 중 하나에 액세스하면 MMU가 실패하고 커널이 상황을 해결하기 위해 다시 개입합니다.

관련 정보