2013-11-29 2 views
0

x86이라고 가정 할 때, 0x0에서 0x7FFFFFFF까지의 주소가 프로세스에 있다는 것을 알기 시작했습니다. 반면에 더 높은 것은 커널 용으로 예약되어 있습니다.Windows -이 메모리 주소 지정은 어떻게 작동합니까?

나는이 세 가지 호기심 :

1) 프로세스가 이제까지 0x7FFFFFFF보다 주소 높은 전화를합니까? 나는 항상 어떤 종류의 접근이 거부 될 것이라고 생각한다. 액세스가 어떻게 거부됩니까?

2) 두 개의 프로세스 가상 주소를 동일한 실제 주소 범위에 매핑하여 "공유 메모리"IPC가 작동합니까?

3) 사용중인 컴퓨터의 RAM 용량이 다를 수 있습니다. 2GB가 있거나 16GB와 훨씬 더 비슷할 수 있습니다. 이것은 RAM의 주소 지정에 어떤 영향을 줍니까? 커널은 자체적으로 예약 되었기 때문에 사용하지 않는 RAM을 남겨 둡니까? 이걸 어떻게 볼 수 있니?

답변

1

나는 매우 확실하지 오전하지만 당신은 어떻게 작동하는지에 대한이 MSDN doc 최대를 찾을 수 : -

과정 사용할 수 있습니다 가상 주소의 범위는 가의 가상 주소 공간이라고합니다 방법. 각 사용자 모드 프로세스에는 고유 한 가상 주소 공간이 있습니다. 32 비트 프로세스의 경우 가상 주소 공간은 보통 2 기가 바이트 범위 인 0x00000000에서 0x7FFFFFFF입니다. 64 비트 프로세스의 경우 가상 주소 공간 인 은 8 테라 바이트 0x000'00000000에서 0x7FF'FFFFFFFF 범위입니다. 가상 주소의 범위는 때때로 가상 메모리 범위라고합니다. Notepad.exe를 MyApp.exe의과 :

enter image description here

다이어그램

두 개의 64 비트 프로세스의 가상 어드레스 공간을 나타낸다. 각 프로세스는 고유 한 가상 주소 을 가지며 0x000'0000000에서 0x7FF'FFFFFFFF까지의 공간을 갖습니다. 음영 처리 된 블록은 가상 또는 실제 메모리의 한 페이지 (4 킬로바이트 크기)를 나타냅니다. 메모장 프로세스는 가상 주소의 세 연속 페이지를 사용하며 0x7F7'93950000부터 시작합니다. 그러나 이들 3 개의 연속적인 가상 주소 페이지는 실제 메모리의 인접하지 않은 페이지에 매핑됩니다. 또한 두 프로세스 모두 0x7F7'93950000에서 시작하는 가상 메모리의 페이지를 사용하지만 이러한 가상 페이지 은 다른 물리적 메모리 페이지에 매핑됩니다.

관련 문제