• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    해결됨

가상 주소, 절대 주소 부분이 헷갈립니다.

23.09.27 20:54 작성 23.09.27 23:46 수정 조회수 181

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번지로 초기화 하는 것이며 운영체제가 사용하는 영역이므로 접근 시 무조건 오류가 발생하기 때문입니다. 참고하시기 바랍니다. :)

11 1님의 프로필

11 1

질문자

2023.09.29

감사합니다.

1

네, 프로세스 마다 나뉩니다. 32비트 응용 프로그램의 경우 뒤쪽 2GB 영역이 운영체제 영역이며 해당 영역은 프로그램이 접근을 시도 할 수도 없으며 모두 같은 곳을 가리키고 있습니다. 본인은 말이 안 되는 잘못 이해한 것으로 생각하고 있지만 그것이 맞습니다. 오해가 아니며 제대로 이해한 것입니다. 참고하시기 바랍니다. :)

11 1님의 프로필

11 1

질문자

2023.09.29

그러면 32비트 응용 프로그램 프로세스 A, 프로세스 B, 프로세스 C가 있다고 할 때,

각자 VMS를 가지고 있으면

운영체제 영역 2GB + 사용자 영역 2GB 이렇게 구분되어 있는 것이고,

 

이 중 운영체제 영역은 모든 프로세스가 공유하고(물리 메모리 상에서 같은 곳 가리킴),

사용자 영역은 각각의 프로세스가 개인적으로 소유하고 다른 프로세스가 침범할 수 없다.

이렇게 이해하면 될까요?

 

 

그런데 A 프로세스의 가상 주소 10번지는 사용자 영역이자 실제 물리 주소로 370(운영체제 영역이 360까지이므로 +10)이고, B 프로세스의 가상 주소 10번지도 사용자 영역이자 실제 물리 주소로 370이 되는 거 아닌가요? 그렇게 되면 어떤 프로세스가 가진 물리 메모리 공간을 다른 프로세스가 침범하여 같은 곳을 가리키고 있는 게 아닌가 싶은데

 

저는 아직도 제가 제대로 이해한 건지 뭔가를 오해하고 있는 건지 모르겠네요.. 제가 다시 쓴 이 답글에 쓴 내용 중에도 오류가 없나요?

아니면 책에 써진 설명 중 정확하지 않은 내용이 있는 건지..

헷갈리네요