작업 집합

프로세스의 작업 집합은 현재 실제 메모리에 상주하는 프로세스의 가상 주소 공간에 있는 페이지 집합입니다. 작업 집합에는 페이지 지정 가능한 메모리 할당만 포함됩니다. AWE( Address Windowing Extensions ) 또는 큰 페이지 할당 과 같은 비페이지형 메모리 할당은 작업 집합에 포함되지 않습니다.

프로세스가 현재 작업 집합에 없는 페이지 가능한 메모리를 참조하면 페이지 오류가 발생합니다. 시스템 페이지 오류 처리기는 페이지 오류를 resolve 시도하며, 성공하면 페이지가 작업 집합에 추가됩니다. (AWE 또는 큰 페이지 할당에 액세스하면 페이지 오류가 발생하지 않습니다. 이러한 할당은 페이징할 수 없기 때문입니다.)

하드 페이지 오류는 시스템 페이징 파일 또는 프로세스에서 만든 메모리 매핑된 파일인 페이지의 백업 저장소에서 페이지 콘텐츠를 읽어 해결해야 합니다. 지원 저장소에 액세스하지 않고 소프트 페이지 오류를 해결할 수 있습니다. 일시적 페이지 오류는 다음과 같은 경우에 발생합니다.

  • 페이지는 다른 프로세스의 작업 집합에 있으므로 이미 메모리에 상주합니다.
  • 페이지를 사용 중이던 모든 프로세스의 작업 집합에서 제거되었거나 아직 용도가 변경되지 않았거나 메모리 관리자 프리페치 작업의 결과로 이미 상주하고 있기 때문에 페이지가 전환 중입니다.
  • 프로세스는 할당된 가상 페이지를 처음으로 참조합니다( 수요 0 오류라고도 함).

다음 작업의 결과로 프로세스 작업 집합에서 페이지를 제거할 수 있습니다.

  • 이 프로세스는 SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx 또는 EmptyWorkingSet 함수 호출하여 작업 집합을 줄이거나 비웁니다.
  • 이 프로세스는 잠겨 있지 않은 메모리 범위에서 VirtualUnlock 함수를 호출합니다.
  • 이 프로세스는 UnmapViewOfFile 함수를 사용하여 파일의 매핑된 뷰를 매핑 해제합니다.
  • 메모리 관리자는 작업 집합에서 페이지를 잘라내어 사용 가능한 메모리를 더 많이 만듭니다.
  • 메모리 관리자는 작업 집합에서 페이지를 제거하여 새 페이지의 공간을 확보해야 합니다(예: 작업 집합이 최대 크기이므로).

여러 프로세스가 페이지를 공유하는 경우 한 프로세스의 작업 집합에서 페이지를 제거해도 다른 프로세스에는 영향을 주지 않습니다. 페이지를 사용하던 모든 프로세스의 작업 집합에서 페이지가 제거되면 페이지가 전환 페이지가 됩니다. 전환 페이지는 일부 프로세스에서 페이지를 다시 참조하거나 용도가 변경될 때까지 RAM에 캐시된 상태로 유지됩니다(예: 0으로 채워지고 다른 프로세스에 제공됨). 전환 페이지가 디스크에 마지막으로 기록된 이후 수정된 경우(즉, 페이지가 "더티"인 경우) 페이지를 다시 용도 변경하기 전에 해당 백업 저장소에 기록해야 합니다. 시스템은 해당 페이지를 사용할 수 있게 되는 즉시 더티 전환 페이지를 백업 저장소에 쓰기 시작할 수 있습니다.

각 프로세스에는 프로세스의 가상 메모리 페이징 동작에 영향을 주는 최소 및 최대 작업 집합 크기가 있습니다. 지정된 프로세스의 작업 집합의 현재 크기를 가져오려면 GetProcessMemoryInfo 함수를 사용합니다. 최소 및 최대 작업 집합 크기를 가져오거나 변경하려면 GetProcessWorkingSetSizeExSetProcessWorkingSetSizeEx 함수를 사용합니다.

프로세스 상태 PSAPI(애플리케이션 프로그래밍 인터페이스)는 프로세스의 작업 집합에 대한 자세한 정보를 반환하는 여러 함수를 제공합니다. 자세한 내용은 작업 집합 정보를 참조하세요.