운영체제, 컴퓨터 구조

[OS] 페이징 시스템의 "공유 메모리(Shared Memory)" 개념

개발공주 2022. 1. 31. 12:32
728x90

페이징 시스템은 물리 메모리를 효율적으로 활용하는 데 있어서 여러 역할을 한다. 그 중에 '공유 메모리'라는 개념이 있다. 

 

공유 데이터는 물리 메모리 공간을 공유한다는 개념이다.

 

Process A와 Process B가 별도로 있는 상황에서, A, B의 특정 공간이 공유된다고 가정해 본다. 

물리 메모리엔 두 공간이 아닌 하나의 공간만 확보해 놓고, 페이지 테이블에서 프로세스의 각 주소를 변환할 때 해당 물리 주소를 동일하게 가리키게 해 놓으면 그 메모리 공간을 함께 공유할 수 있다.

 

1. 각 프로세스의 커널 메모리 공간은 물리 메모리 공간을 공유

공유 메모리의 개념을 프로세스의 4GB~3GB 영역의 커널 공간에 적용해 보면, 각 프로세스의 커널 공간에 대한 페이지 테이블에서 동일한 메모리 공간을 가리키게 하면 된다. 즉 프로세스마다 커널 영역을 다 갖고 있는 것처럼 표시된다 해도, 물리 메모리에 추가 공간이 필요한 것은 아니다.

 

2. 새로운 프로세스 생성 시간 단축

실행 중인 프로세스로부터 새로운 프로세스를 복사하기 위해서는 fork() 시스템 호출을 해서 똑같은 Child Process를 하나 더 만든다. 그런데 이게 실제로 4GB를 통째로 복사하는 게 아니고, 페이지 테이블에서 부모 프로세스의 일부가 들어 있는 물리 메모리 공간을 자식 프로세스도 가리키게 하는 것이다. 물리메모리 주소만 업뎃해놓으면 굳이 시간 들여 4GB를 복사할 필요가 없다. 이렇게 복사하면 예를 들어 처음 웹 브라우저를 실행하는 속도보다 훨씬 빠르게 동일한 브라우저를 새로 띄울 수 있다.

 

3. 물리 주소에 데이터 수정 시만 비로소 물리 메모리 공간이 복사됨

프로세스 A가 물리 메모리 공간의 어떤 값을 변경한다고 해서, 프로세스 B도 변형된 메모리의 데이터를 가지게 되면 안된다. 프로세스 간은 독립적이기 때문이다. 따라서 이 경우에는 물리 메모리의 기존 공간을 복사해서 다른 공간에 두고, 프로세스 B의 페이지 테이블에 그 공간의 물리주소 값을 가리키도록 바꿔주면 된다. 

728x90