해결된 질문
작성
·
248
·
수정됨
0
강의 2:00에 나온 오른쪽 그림 7-12(책 343p)에 나온 그림에 대해 질문이 있습니다.
이 그림은 운영체제 영역과 사용자 영역이 나뉘어 있는데
프로세스별로 할당하는 가상 메모리마다 운영체제 영역과 사용자 영역으로 나뉜다고 보면 되는 건가요?
조금 헷갈리는데, 이 그림을 가지고 예를 들어서 프로세스가 2개 있다고 하면 2개의 프로세스 모두 각자가 가진 가상 메모리의 운영체제 영역이 0~360까지이고, A 프로세스의 가상 주소 10번지는 실제 물리 주소로 370이고, B 프로세스의 가상 주소 10번지도 실제 물리 주소로 370이 되는 건가요? 물리 메모리는 하나이니까요.
그럼 물리 메모리의 370번지를 두 프로세스 모두 사용하는 거라 말이 안 되는 것 같은데
제가 뭔가를 잘못 이해한 것 같은데 어디서 오해를 하고 있는지 모르겠습니다.. 혹시 잘못 이해하고 있는 부분을 바로잡아 주실 수 있나요?
답변 2
1
네, 맞습니다. 정확히 그렇습니다.
한 가지 바로 잡을 부분은 사용자 모드 메모리 중 0번지를 포함 앞 1MB가량 입니다. 이 영역도 운영체제의 영역입니다. 뒷 부분 2GB와 같은 구조로 작동합니다. 그 영역을 빼고 상대적으로 0번지가 존재하는 것이 아닙니다. 우리가 C언어에서 포인터 변수를 NULL (\0)로 초기화 하는 이유는 0번지로 초기화 하는 것이며 운영체제가 사용하는 영역이므로 접근 시 무조건 오류가 발생하기 때문입니다. 참고하시기 바랍니다. :)
1
네, 프로세스 마다 나뉩니다. 32비트 응용 프로그램의 경우 뒤쪽 2GB 영역이 운영체제 영역이며 해당 영역은 프로그램이 접근을 시도 할 수도 없으며 모두 같은 곳을 가리키고 있습니다. 본인은 말이 안 되는 잘못 이해한 것으로 생각하고 있지만 그것이 맞습니다. 오해가 아니며 제대로 이해한 것입니다. 참고하시기 바랍니다. :)
그러면 32비트 응용 프로그램 프로세스 A, 프로세스 B, 프로세스 C가 있다고 할 때,
각자 VMS를 가지고 있으면
운영체제 영역 2GB + 사용자 영역 2GB 이렇게 구분되어 있는 것이고,
이 중 운영체제 영역은 모든 프로세스가 공유하고(물리 메모리 상에서 같은 곳 가리킴),
사용자 영역은 각각의 프로세스가 개인적으로 소유하고 다른 프로세스가 침범할 수 없다.
이렇게 이해하면 될까요?
그런데 A 프로세스의 가상 주소 10번지는 사용자 영역이자 실제 물리 주소로 370(운영체제 영역이 360까지이므로 +10)이고, B 프로세스의 가상 주소 10번지도 사용자 영역이자 실제 물리 주소로 370이 되는 거 아닌가요? 그렇게 되면 어떤 프로세스가 가진 물리 메모리 공간을 다른 프로세스가 침범하여 같은 곳을 가리키고 있는 게 아닌가 싶은데
저는 아직도 제가 제대로 이해한 건지 뭔가를 오해하고 있는 건지 모르겠네요.. 제가 다시 쓴 이 답글에 쓴 내용 중에도 오류가 없나요?
아니면 책에 써진 설명 중 정확하지 않은 내용이 있는 건지..
헷갈리네요
감사합니다.