비활성 RAM 페이지가 실제로 활성화되었을 때 스와핑이 발생했습니다.
( 업데이트 : 의견에서 명확하게 지적 되었 듯이, 이것은 귀하의 경우가 아닙니다. 따라서 동일한 문제를 가진 사람들 은 수평 규칙으로 건너 뛸 수 있습니다 .)
즉, 많은 프로그램이 실행 중이고 커널이 일부 페이지를 교체했습니다. 그런 다음 일부 프로그램을 종료했습니다. 커널은 RAM 페이지를 비활성으로 표시합니다. 그러나 이러한 페이지가 필요할 때까지 페이지를 RAM으로 다시 스왑하지 않습니다. 이로 인해 비활성 페이지와 스왑 아웃 페이지가 모두 생깁니다.
왜 사전에 페이지를 교환하지 않습니까? 그것이 배당률에 베팅 할 것이기 때문에 장기적으로 당신은집니다. 간단한 예를 생각해 봅시다 : 동시에 RAM에 맞지 않는 두 개의 프로그램 A와 B. 프로그램 A가 여전히 실행 중이고 교체 된 모든 페이지가 A에 속합니다. 프로그램 B가 종료되었고 모든 비활성 페이지가 B에 속합니다.
커널이 A의 페이지를 사전에 스왑 인하 고 즉시 다음과 같은 경우 :
- 프로그램 A는 페이지에 액세스해야합니다-> 당신이이기십시오-페이지는 이미 RAM에 있습니다.
- 당신은 B를 다시 시작한다-> 당신은 잃어버린다-당신은 페이지를 RAM으로 가져 오는 데 드는 비용을 "지불"했다.
- 다른 프로그램을 시작합니다. C-> A와 C가 동시에 RAM에 맞지 않으면집니다. 그들이 맞다면, 당신은 짝수입니다.
또한 스왑 아웃 (디스크에 쓰기)이 스왑 인 (디스크에서 읽기)보다 비용이 많이 든다는 점도 고려하십시오. 이 "베팅"을 더욱 어렵게 만듭니다.
한마디로 : 커널을 신뢰하고 현명하게하려고하지 마십시오.
업데이트 : 활동 모니터를 사용하여 시스템 메모리 읽기 기사를 통해 많은 사람들이 메모리 가 작동한다고 믿기 때문에
비활성 메모리가 작동하지 않는 것으로 나타났습니다 . 비활성 메모리에 대한 기사에 제공된 정의가 정확합니다.
이 정보는 RAM에 있지만 활발하게 사용되고 있지 않으며 최근에 사용되었습니다.
그러나 다음 예제는 완전히 오도되고 지나치게 단순화되었습니다 (내 예제가 솔직한 것처럼).
예를 들어, Mail을 사용한 후 종료 한 경우 Mail에서 사용중인 RAM이 비활성 메모리로 표시됩니다. 비활성 메모리는 사용 가능한 메모리와 마찬가지로 다른 응용 프로그램에서 사용할 수 있습니다. 그러나 다른 응용 프로그램에서 비활성 메모리를 사용하기 전에 Mail을 열면 비활성 메모리가 느린 드라이브에서로드되지 않고 활성 메모리로 변환되므로 Mail이 더 빨리 열립니다.
더 많은 온라인 리소스를 검색 하여 다윈 커널 메일 링리스트 에서이 스레드 를 찾았습니다 . 짐 매기 인용 (다윈 팀의 생각-)
간단히 말해 커널 VM 시스템은 사용중인 페이지를 통한 메모리 압력 스캔을 처리 할 때 활성 및 비활성 표시 사이의 균형을 유지하려고합니다. 비활성 페이지는 비활성으로 표시되어있는 동안 재사용을 위해 스캔됩니다. 재사용 된 페이지는 활성으로 표시되며 일부 다른 페이지는 활성 상태에서 비활성 상태로 이동하여 활성 상태인지 감지해야합니다. 따라서 비활성은 잘못된 이름입니다. "비활성 상태 일 수 있습니다.이를 확인하십시오."
아시다시피, 현재 (현재) 노력하는 내부 잔액은 약 2/3 활성 대 1/3 비활성입니다 ...
관찰 한 동작에 대해 설명합니다. 즉, 비활성 페이지는 최근에 사용되지 않은 실행중인 프로그램에 속합니다. 따라서 새 프로그램을 시작하면 비활성 페이지가 교체됩니다. 동시에 다른 프로그램의 페이지는 비활성 대 비활성의 2/1 비율을 유지하기 위해 비활성으로 표시됩니다.
스레드는 또한 다윈의 내부에 대한 자세한 내용은 몇 가지 제안이 포함되어 있습니다. 비치 볼 문제 (일반적으로 메모리 관련이 거의 없음)로 인해 메모리 사용량 조사를 시작한 경우에도 몇 가지 제안 사항이 있습니다.
결론은 동일합니다. 커널을 신뢰하고 현명하게 시도하지 마십시오. :-)