• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    해결됨

공유 메모리 및 프로세스 생성 관련

22.07.18 09:10 작성 조회수 250

3

안녕하세요.

 

프로세스 동기화 부분에서 공유 메모리 관련하여 궁금한 점이 생겨 질문을 남기게 되었습니다.

 

메모리는 커널 영역과 사용자 영역으로 구분되어 커널 영역에는 OS, 사용자 영역에는 일반 프로세스가 적재되는걸로 이해를 했습니다.

 

그렇다면 공유 메모리나 버퍼캐시 같은 메모리는 사용자 영역에 위치해있는지 아니면 OS 영역에 위치해있는지 궁금합니다.

 

그리고 프로세스 생성시 0번 init 프로세스를 fork해서 코드와 데이터 영역의 부분을 exec 된다고 설명해주셨는데 일반 프로세스가 자식 프로세스 생성시에도 init 프로세스를 복사하는지 그냥 자기 자신을 복사해서 exec하는지 궁금합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요 akgkfk3님!

질문에 답변드리겠습니다ㅎㅎ

 

공유메모리는 해당 공유메모리를 생성하는 프로세스의 주소공간에 할당됩니다.
유저영역에 할당됩니다.
따라서 속도도 가장 빠른 방식입니다.

버퍼의 경우 공유메모리 내에 존재하게 되는데 공유메모리가 유저영역에 있으므로 버퍼도 유저영역에 존재합니다.

일반 프로세스는 init 프로세스를 복사하지 않고 자기 자신을 복사합니다!

😀

 

akgkfk3님의 프로필

akgkfk3

질문자

2022.07.18

연달아 질문하게 되서 죄송합니다.

가상메모리 개요 강의에서 가상 메모리의 크기는 CPU의 Bit 수, 메모리의 크기에 의존한다고 말씀해주셨는데 그렇다면 32bit CPU에서는 최대 가상메모리의 크기는 4GB이므로 만약에 실 물리 메모리가 2GB이라면 스왑 영역의 최대 2GB까지 합친 것으로 이해했습니다.

다만, 그 뒤의 부분에서 MMU가 보는 물리 주소 관점으로 물리 메모리와 스왑 영역을 본다고 하셨는데 4GB의 가상메모리로 4GB짜리 프로세스 5개를 실행할 수 있다는 것이 이해가 가질 않습니다 ㅠㅠ

64bit CPU라면 논리 주소 공간이 TB급 이상으로 할당이 가능하므로 실 물리메모리가 4GB이라 하여도 스왑 파티션의 용량을 16GB까지 할당하였다면 MMU 관점에서는 20GB 램을 가지고 있는 것으로 판단하여 Swapping을 통해 실행이 가능하다고 이해하였으나 예로 들어주신 32bit CPU로 이해했을 때는 직관적으로 와닿지가 않네요 ㅠㅠ...

 

충분히 궁금하실 수 있는 점입니다!

맞습니다.
32bit CPU에서 가상메모리의 최대 크기는 4GB입니다.
만약 2GB라면 스왑영역으로 4GB크기를 표현할 수 있죠.
여기서 스왑영역을 나타내는 2GB공간은 스왑영역을 나타내는 공간의 참조를 담는 공간입니다.
실제로는 스왑영역(디스크)에 더 많은 공간을 할당할 수 있고, 이 공간을 스왑영역의 2GB공간에 할당하는 것입니다.

여기에 akgkfk3님과 비슷한 궁금증을 가진 질문이 있는데 답변을 예시를 들어가며 잘 해놓아서 링크도 첨부하겠습니다 ㅎㅎ