2011-09-07 2 views
0

나는 다음과 같은 이해하려고 노력했다 :Windows 메모리 동작 - 페이지 테이블 및 데이터

  • 그 페이지 테이블이 어떤 점에서 가상 메모리 관리자에 의해 가상 메모리와 실제 메모리 사이의 변환에 내장되어 알고있다. 시스템에서 많은 프로세스가 실행되기 때문에 한 번에 하나의 프로세스 만 활성화할 수 있지만 비활성 프로세스의 페이지 테이블이 언제든지 페이지 파일로 이동되는지 궁금합니다. 사실 2GB 영역이 창을 위해 예약되어 있다는 사실을 감안할 때, 창은 시스템의 모든 프로세스에 대한 페이지 테이블을 유지할 수 있습니다. 현재 프로세스가 바뀌면 페이지 파일로 옮겨가는 것이 합리적일까요?

  • 동일한 내용이 쓰기 가능한 (데이터) 페이지입니다. 창문은 모든 프로세스의 모든 데이터 페이지를 메모리에 보관하거나 어느 시점에서 페이지 파일로 옮길 것입니까? 내 컴퓨터에서 작업 관리자는 1.5GB RAM이 3GB에서 활용되고 1.5는 성능 탭의 시스템 캐시이므로 모든 응용 프로그램의 물리적 메모리에 데이터가 저장됩니다. 그러나 페이징 파일로 이동해야 할 때가 있습니까?

답변

1

나는 비활성 프로세스의 페이지 테이블은 시간의 시점에서 페이지 파일로 이동되어 있는지 궁금 해서요?

예, 페이지 테이블을 페이지 할 수 있습니다.

windows는 모든 프로세스의 모든 데이터 페이지를 메모리에 보관하거나 어느 시점에서 페이지 파일로 이동합니다.

Windows 페이징 정책에 관한 한 두 가지 종류의 메모리가 있습니다 (페이지 가능 및 비 페이징 가능). 어떤 프로세스가 속해 있는지 또는 O/S 자체에 속해 있는지 여부는 문제가되지 않습니다. 페이징 가능하다면 페이지 아웃 될 수 있습니다. 따라서 필요한 경우 Windows에서 프로세스 데이터 페이지를 페이지 아웃합니다.

Windows Internals 서적에서 메모리 관리 장을 읽는 것이 좋습니다.이 모든 것을 다루어야합니다.

-scott

0

실제로 두 가지 질문을하고 있습니다.

  1. 페이지 테이블과 관련된 페이징 정책은 무엇입니까?
  2. "쓰기 가능한 데이터"페이지 (예 : R/W 권한이있는 가상 메모리)의 페이징 정책은 무엇입니까?

먼저 조금씩 교정하겠습니다. 하위 2 기가 바이트 영역은 창을 위해 예약되어 있다는 사실을 감안할 때

, 그것은 창 에 모든 프로세스에 대해

이 될 수있는 시스템 페이지 테이블을 유지한다고 메이크업 감각은 정확한 그것은 상부 의 것 2GB는 Windows에 예약되어 있으며 더 정확하게 - Windows 커널과 드라이버에서만 커널 모드로 액세스 할 수 있습니다.

이제 놀랄 수도 있지만 커널 메모리도 페이지 가능할 수 있습니다!따라서 기술적으로 32 비트 주소 공간의 어느 부분이 사용자/커널 모드에서 볼 수 있는지는 중요하지 않습니다. 페이징과 관련이 없습니다.

다른 수정 : 가상 메모리가 실제 메모리에 이 페이지 파일에 저장되어있을 수 있습니다. OS가 주문형으로 페이지를 페이지 파일에 저장함으로써 물리적 스토리지를 해제한다는 일반적인 믿음이 있습니다. 잘못된.

실제로 Windows는 메모리 페이지를 페이지 파일 에 저장하고 전에 해제해야합니다. 사실, 백그라운드에서 모든 메모리 페이지를 페이지 파일 (맵핑 된 섹션과 같은 다른 파일과 관련된 파일 외)에 덤프합니다.

  • 고부하시 (그들은 이미 저장하고 이후) OS가 페이징이 수 항상없는 커널 모드에서 빠른
  • 를 메모리 페이지를 사용할 수있게됩니다 :이 두 가지 이유가있다. 높은 IRQL에서 실행되는 드라이버 (즉, 가장 긴급한 이벤트를 처리하는 드라이버)는 물리적 스토리지 드라이버에 액세스 할 수 없으므로 페이징이 불가능합니다.
    1. 확실히 몰라,하지만 OS의 구현 세부 사항에 따라 달라집니다 :

그래서, 질문에 대한 답변입니다. 나는 프로세스 당 페이지 테이블이 페이지 아웃되지 않을 이유가 없음을 알았다. 컨텍스트 전환 및 프로세스 가상 메모리 수정 중에 필요합니다. 두 경우 모두 시간이 중요한 이벤트에 속하지 않습니다.

  • 확실히 "쓰기 가능한 데이터"메모리 페이지가 페이지 파일에 저장됩니다. 그것들은 물리적 인 기억에서 제거 되었습니까? 요청이있을 때만, 시스템로드 중에 가장 최근에 사용 된 순서대로.