지금까지 답변에 몇 가지 올바른 점이 있지만 중요한 점을 놓쳤습니다.
다른 사람들이 언급했듯이 페이지 파일을 비활성화해도 가상 메모리가 꺼지지 않습니다. 주소 변환 (페이지 테이블을 통한) 및 그로부터 얻은 모든 작업 (별도의 프로세스 주소 공간, 페이지 당 읽기 / 쓰기 및 커널 / 사용자 메모리 보호, "실행되지 않은"비트 등)은 계속 발생합니다. .
아무도 제기하지 않은 것은 페이지 파일을 비활성화해도 페이징 IO가 꺼지지 않는다는 것입니다. 페이지 파일이 없어도 디스크에서 페이징 및 페이징이 계속 발생합니다. 이것은 적어도 Windows에서는 시연하기 쉽지 않습니다. 페이지 파일을 비활성화하고, 재부팅하고, 성능 모니터 (perfmon.exe)를 시작하고, 메모리 개체 아래에서 페이징 IO 카운터를보고, 일부 프로그램을 실행하십시오.
어떻게 그렇게 될수 있니? 페이지 파일이 페이징 또는 페이징 IO에 관련된 유일한 파일이 아니기 때문에!
페이징 IO와 관련된 다른 파일은 무엇입니까? 매핑 된 파일. 그리고 "매핑 된 파일"에는 모든 코드 파일 (Windows의 경우 주로 exe 및 dll)이 포함됩니다.
프로그램 실행을 시작하거나 dll을 기존 프로세스에로드하면 코드 전체가 RAM에 복사되지 않습니다. (Windows API 이름 "LoadLibary"에도 불구하고) 코드 파일은 단순히 주소 공간에 매핑 됩니다. 판독을 수행하는 것은 호출기이며 페이지 결함에 대한 응답입니다. 페이지 결함은 명령어가 아직 페이징되지 않은 코드 페이지에서 페치 될 때 발생합니다. 즉, 코드는 가상 메모리의 다른 모든 요소와 같이 RAM으로 페이징 됩니다 (예 : 실제로 실행되지 않는 코드의 대부분은 가져 오지 않았습니다).
(여기에서 프리 페처에 대한 언급은 생략했지만 설명 된 원칙을 실제로 변경하지는 않습니다. 코드는 여전히 수요 페이징되어 있으며 프리 페처는 프로세스 수명 내에 더 빨리 발생하도록 시도합니다.)
그리고 일부 코드가 페이징되어 있고 나중에 RAM이 부족하고 새로운 페이징을위한 공간을 만들기 위해 RAM에서 이미 페이징 된 일부를 제거해야하는 경우 코드가 포함 된 페이지는 데이터 페이지처럼 페이징 될 수 있습니다 .
유일한 차이점은 코드가 포함 된 페이지는 종종 RAM에서 한 번 변경되지 않으며, 변경되지 않은 경우 다른 용도로 사용하기 전에 다른 곳에서 작성할 필요가 없다는 것입니다. 메모리 관리자에 의해 회수 된 후 나중에 다시 필요한 경우, 원래의 exe 또는 dll 파일에서 다시 페이징 될 수 있습니다.
데이터 파일, 특히 큰 파일은 종종 파일 매핑을 통해 액세스됩니다. 관련된 * nix 호출은 mmap ()이며 Windows에서는 CreateFileMapping 또는 OpenFileMapping 및 MapViewOfFile입니다. 이러한 매핑 은 종종 읽기 / 쓰기입니다. RAM에있는 동안 이러한 매핑의 페이지가 수정 된 경우 페이지를 RAM에서 제거해야 할 경우 원래 파일로 다시 기록됩니다. 페이지 파일이 관련되지 않았습니다.
쓰기시 복사 로 맵핑되지 않은 경우 . 페이지 파일이있는 경우를 제외하고는 여기에서 자세히 설명하지 않습니다.
주어진 작업량과 주어진 양의 RAM에 대해 일정한 양의 페이징이 있습니다. 페이지 파일을 끄면 일부는 매핑 된 파일이 아닌 일부는 페이지 파일이 아닌 매핑 된 파일에 해당됩니다. 그러나 여전히 일어날 것입니다. 따라서 페이지 파일이없는 페이징 IO가 거의 있습니다.
따라서 페이지 파일을 끄는 것이 성능에 큰 영향을 미치지 않습니다.
실제로 상황을 악화시킬 수 있습니다. 페이지 파일이 없으면 디스크로의 페이징이 발생할 때 매핑 된 파일이 발생해야합니다. 결과 : 모든 프로세스가 수정 한 모든 비공유 페이지는 수정 된 프로세스가 종료 될 때까지 RAM에 보관해야합니다. 스택 하단에 오래된 오래된 물건을 포함하여 다시는 참조하지 않을 것입니다. 페이저는 컨텐츠를 저장할 다른 장소가 없기 때문에 (선택이 아무리 좋더라도) 제거를 위해 해당 페이지를 고려할 수 없습니다.
btw, 페이지 작성 은 일반적으로 병목 현상이별로 없습니다. 페이지 파일 또는 매핑 된 파일에 쓰는 것은 실제로 무료입니다 (앱 코드는 발생하는 동안 차단 할 필요가 없습니다. 별도의 스레드에서 실행됩니다). 실제 작업 속도를 늦추는 것은 호출기가 디스크를 읽어야 할 때, 즉 하드 페이지 오류 를 해결해야 할 때 입니다. 물론 이것은 페이지 파일과 매핑 된 파일 (코드 파일 포함) 모두에서 발생할 수 있습니다 . 결함이있는 페이지 의 백업 저장소가 무엇이든간에 .
다시 : Windows의 페이징 IO 카운터는 페이징 IO가 얼마나 발생하는지 알려줍니다. 그리고 페이지 파일이 없으면 0이 아닙니다.
주소 변환의 오버 헤드를 피하고 페이지 테이블 항목 등을 읽는 것과 관련된 OP의 질문 측면에서 오버 헤드는 매우 작습니다. 2 % 미만으로 측정되었습니다. 그 이유는 TLB (Translation Buffer) 캐시가 예상대로 작동하기 때문입니다.