스왑 공간에 실제 메모리보다 더 큰 데이터가 있을 가능성이 있습니다.

스왑 공간에 실제 메모리보다 더 큰 데이터가 있을 가능성이 있습니다.

인용하면centos.org의 배포 가이드그건,

스왑 공간Linux에서는 물리적 메모리(RAM)가 가득 찼을 때 사용됩니다.

그리고 그위키피디아또 이렇게 말했다.

"스왑"이라는 용어는 RAM과 디스크 사이에서 메모리 페이지를 이동하는 행위와 페이지가 저장되는 디스크 영역을 모두 설명하는 데 사용됩니다.

이제 특정 경우에 스왑 공간에 실제 메모리보다 더 큰 데이터가 있는 이유는 무엇입니까? 나는 시스템이 물리적으로 사용 가능한 것보다 더 많은 메모리를 요구할 때 커널이 덜 사용된 페이지를 교체하고 메모리가 즉시 필요한 현재 응용 프로그램(프로세스)에 메모리를 제공한다고 믿습니다. 따라서 스왑 공간에는 RAM보다 큰 데이터가 저장되어서는 안 됩니다.

제가 여기에서 왔습니다. 아래 제공된 스크린샷을 참조하세요.

여기에 이미지 설명을 입력하세요

답변1

가상 메모리를 오해하고 계십니다. 프로그램과 운영 체제는 항상 가상 메모리에서 작동합니다. 10바이트, 천만, 100억을 malloc하면 가상 메모리가 할당됩니다. 코드, 스택 공간(자동 저장소, 할당 등), 전역 저장소(있는 경우)도 모두 가상 메모리에 있습니다. 에서처럼 어떤 것의 주소를 취하면 &myVariable결과는 가상 주소입니다. 가상 메모리 OS에서는 물리적 메모리 주소를 '절대' 사용하지 않습니다.

OS와 실행 중인 모든 프로그램에 필요한 가상 주소 공간의 합계는일상적으로오늘날의 시스템에서도 RAM 크기를 초과합니다. 이는 단일 프로그램에도 해당될 수 있습니다. 따라서 단일 프로세스의 RAM 사용량 + "스왑 공간"이 RAM을 쉽게 초과할 수 있습니다.

도대체 가상 메모리의 요점은(음, 중요한 점 중 하나) RAM보다 더 많은 "메모리"(코드, 데이터 등 무엇이든)가 필요한 코드를 작성할 수 있다는 것입니다.

다른 사람들이 의견에서 말했듯이 총 가상 주소 공간(OS + 모든 프로세스용) 중 RAM에 보관되는 부분과 디스크에 있는 부분("스왑" 공간)을 결정하는 것은 운영 체제에 달려 있습니다. RAM에 없는 가상 주소 공간의 일부 페이지(일반적으로 x86/x64 시스템에서 4KB)를 참조하는 경우 OS는 이를 "스왑 인"합니다(또한 "페이지 인" 또는 "폴트 인"이라고도 함). ", 이는 "페이지 오류"에 의해 자극되기 때문입니다). 얼마 후 OS는 RAM이 부족하다고 판단하여 가장 오래 참조되거나 가장 적게 참조되는 항목 중 일부를 RAM에서 제거할 수 있습니다. 해당 항목이 마지막으로 RAM에 가져온 이후 수정된 경우 수정된 버전은 디스크에 저장되어야 합니다. 이것이 바로 항목이 "스왑 공간"(또는 Windows 용어로 페이지 파일)에 저장되는 이유입니다.

그런데 페이지 파일/스왑 파일/스왑 공간은 RAM에 없는 경우 가상 메모리 내용이 보관되는 유일한 장소는 아닙니다. 일반적으로 모든 코드 파일을 포함하는 매핑된 파일은 또 다른 장소입니다. RAM에 있는 동안 코드는 거의 수정되지 않으므로 일반적으로 교체가 아닌 교체만 이루어집니다. RAM에서 손실되어야 하는 경우에는 삭제하고 다시 필요한 경우 원래 있던 동일한 파일에서 다시 교체할 수 있습니다.

관련 정보