
프로세스 모니터에서 특정 프로세스를 선택한 다음 해당 속성을 선택하면 이벤트 속성 아래에서 프로세스 탭에 각 개별 라이브러리 파일의 주소가 표시되며 이 주소는 무엇을 참조합니까? 또한 스택 아래의 주소는 가상 또는 실제 메모리 위치를 가리킵니까?
답변1
표시된 주소는 모두 가상 주소입니다. 이는 프로세스의 가상 주소 공간에 있는 DLL 또는 기타 매핑된 파일의 시작 주소입니다. 스택 탭에 표시된 주소도 가상 주소입니다.
프로세스 탐색기에서 유사한 분석을 볼 수 있습니다. 아래쪽 창에서 "DLL 보기"를 활성화합니다. VMmap에도 있지만 더 자세한 내용이 있습니다. VMmap에는 각 실행 파일 내의 "섹션" 주소가 포함되어 있습니다. 코드 섹션, 읽기 전용 데이터 섹션, "리소스" 섹션 등이 있으며 일부 제어 정보도 포함됩니다.
실제로 x86/x64의 가상 메모리 OS가 물리적 주소를 직접 사용, 즉 참조하는 것은 매우 어렵습니다. 시스템이 "가상으로 전환"되면, 즉 부팅 초기에 CR0에 "페이징 활성화" 비트가 설정되면 실행 코드(커널 모드이든 사용자 모드이든)에서 주장하는 모든 주소는 CPU에 의해 가상 주소로 해석됩니다. 메모리 컨트롤러에 제공되기 전에 (페이지 테이블의 정보를 사용하여) 물리적으로 변환되어야 합니다.
OS의 커널 코드는 물론 물리적 메모리를 '관리'하고(예: 필요한 프로세스에 할당) 페이지 테이블 항목과 물리적 페이지 번호를 조작하지만 다음을 통해 메모리를 직접 '참조'할 수는 없습니다. 메모리의 물리적 주소.