스왑하지 않고 페이징을 관리하는 방법. 이런 경우 페이지 오류를 어떻게 관리해야 할까요?
사용 가능한 스왑이 없으면 페이징을 관리하는 방법을 의미합니다. free_pages 목록과 할당된_pages 목록이라는 두 개의 페이지 목록이 있다는 것을 알고 있습니다. free_pages 목록의 페이지가 낮아지면 할당_페이지 목록의 LRU 페이지를 스왑 파티션으로 이동합니다. 스왑 파티션이 없으면 어떻게 되는지 알고 싶습니다.
답변1
귀하의 문제를 이해하는 한, 일반적으로 다음과 같은 방식으로 발생합니다.
메모리가 할당된 경우:
- 메모리를 할당된 것으로 표시하지만 실제 메모리를 할당하지는 않습니다(따라서 액세스 시 페이지 오류가 발생함). Linux에서는 이 단계에서 중지되지만 시스템은 물리적 공간을 즉시 할당할 수 있습니다. 그런 다음 OOM이 발생하지 않는다는 점을 제외하면 마지막에 페이지 오류와 유사한 알고리즘을 수행합니다.
페이지 폴트가 있는 경우(매핑되지 않은 페이지에 액세스함)
- 메모리가 할당되었는지 확인하고 그렇지 않은 경우 오류를 반환합니다.
- 무료 실제 페이지가 있는지 확인하세요. 있다면 5로 가세요
- 디스크에 다시 쓸 수 있는 부분(캐시에 있는 파일 등)이 있는지, 스왑 영역에 여유 공간이 있는지(스왑 영역이 없으면 해당 크기의 스왑 영역으로 간주) 확인 0). 디스크에 다시 쓰여진 파일/블록이나 디스크에 쓰여진 페이지가 있는 경우 매핑을 해제하고 5로 이동합니다. 둘 다 사용 가능한 경우 둘 중 하나를 선택하십시오.
- OOM 조건을 반환합니다. 이는 커널에서 발생하는 상황에 따라 다릅니다. 사용자에게 오류, 커널 패닉/블루 스크린, 종료할 프로세스 찾기 등이 표시될 수 있습니다.
- 문제를 일으키는 페이지를 해제된 페이지에 매핑합니다. 페이지가 스왑되면 스왑에서 페이지를 읽어서 페이지에 넣습니다. 페이지가 파일로 뒷받침되는 경우 파일을 읽고 콘텐츠가 파일에 배치됩니다.
일반적으로 스왑이 없는 것은 전체 스왑과 동일하다고 말할 수 있습니다.
답변2
교환하여 사용하지 않는 항목의 이동을 허용합니다.페이지메모리에서 검색하여 디스크에 기록합니다. 다만, 실제 상황에 따라 반드시 그럴 필요는 없다.페이징스왑하지 않아도 작업이 발생합니다.
답변3
귀하의 질문을 올바르게 이해하면 스왑 공간이 정의되지 않은 경우 페이징이 어떻게 발생하는지 묻는 것입니다.
전통적인 Unix 접근 방식을 사용하는 운영 체제의 경우 가상 메모리는 항상 물리적 RAM에 의해 지원되므로 메모리 매핑 파일이나 가짜 포인터와 같은 관련 없는 경우를 제외하고는 스왑 영역 누락으로 인해 페이지 오류가 발생할 수 없습니다.
Linux와 같이 과도하게 사용되는 운영 체제에서는 엄격한 보존이 발생하지 않으므로 사용 가능한 RAM이 더 없는 상태에서 매핑되지 않은 페이지에 처음 액세스하면 OOM 킬러 또는 기타 파괴/오류 이벤트가 트리거됩니다.