[ CS / OS ] 공유 메모리 (Shared Memory)

황승환·2022년 2월 9일
1
post-thumbnail

공유 메모리 (Shared Memory)

공유 메모리란 여러 장치(주로 CPU)나 여러 프로세스가 공동으로 사용하는 메모리를 의미한다.

위의 그림처럼 일반적인 프로세스는 각자의 독립된 메모리를 가지고 사용하게 된다. 하지만 공유 메모리의 경우에는 여러 개의 프로세스가 하나의 메모리 영역을 사용하게 된다.

Software에서의 공유 메모리

소프트웨어에서의 공유 메모리는 보통 2가지 용도로 사용된다.

  • 프로세스 간의 메모리 공유를 하기 위한 용도(IPC)
  • 메모리를 아끼기 위한 보존 관리의 용도

프로세스 간의 메모리 공유를 하기 위한 용도 (IPC)

장점

  • IPC 기법 중 공유 메모리는 처리 속도가 가장 빠르다.
    - 공유 메모리는 다른 IPC 기법과 달리 메모리 자체를 공유하여 데이터 복사와 같은 불필요한 overhead가 발생하지 않기 때문

단점

  • 반드시 같은 기계에서만 사용 가능하다.
    - 같은 장치 위에 존재하는 프로세스들 간에만 공유 메모리 사용이 가능
  • 다른 IPC 기법보다는 덜 강력하다.
    - 네트워크 사용이 불가하기 때문
  • 데이터 불일치 문제를 해결해야 한다.
    - 여러 개의 프로세스가 같은 메모리를 사용하기 때문

메모리를 아끼기 위한 보존 관리의 용도

과거의 프로그래머들은 프로세스가 자주 사용하는 명령어가 특정한 Code에 집중되어 있다는 사실을 깨닫게 되었고, 그 해당 Code 부분을 따로 분리하여 사용하면 메모리를 절약할 수 있겠다는 생각을 하게 되었다. 이렇게 해서 탄생한 것이 라이브러리(Library)이다.

라이브러리를 공유 메모리 부분에 적재시켜 메모리 공간을 절약할 수 있게 되었다. 자신의 독립된 메모리에만 접근이 가능한 프로세스가 공유 메모리에 적재된 사용하고자 하는 라이브러리의 주소를 찾기 위해서는 OS의 도움이 필요하다. OS는 프로세스의 메모리 영역에 공유 메모리의 해당 라이브러리 부분을 매핑(Mapping) 해준다.

위의 그림과 같이 프로세스가 동적 라이브러리 함수를 호출하게 되면 OS가 공유 메모리의 존재하는 printf의 실제 주소를 페이지 테이블로 관리하여 매핑해준다. 이렇게 라이브러리를 공유 메모리에서 관리함으로써 메모리를 아낄 수도 있다.

정리

공유 메모리의 목적 2가지

프로세스 간의 메모리 공유 (통신)을 위한 목적

  • 프로세스 간의 통신을 위한 IPC 기법에 공유 메모리가 포함됨
  • 공유 메모리는 실제로 여러 프로세스가 같은 메모리 영역을 사용하기 때문에 데이터의 복사와 같은 오버헤드가 발생하지 않아 빠름.
  • 여러 프로세스가 같은 메모리 영역을 사용하므로 반드시 같은 장치 위에 존재하는 프로세스들 간에만 공유가 가능.
  • 네트워크 사용이 불가하기 때문에 다른 IPC보다는 덜 강력. -> 같은 장치 위에 존재해야 하는 이유이기도 함.
  • 같은 메모리 영역을 사용하므로 데이터 불일치 문제를 고려해야함.

메모리를 아끼기 위한 목적

  • 프로세스가 가장 많이 사용하는 명령어가 모여 있는 코드 영역(라이브러리)을 공유 메모리에 관리하여 메모리를 아낄 수 있음. -> 각자 프로세스가 같은 데이터를 각자의 메모리에 보관하는 것 보다 한 곳에 한번만 저장하여 보관
  • 프로세스는 자기 자신의 메모리만 볼 수 있기 때문에 라이브러리의 주소를 알 수 없음 -> OS가 이를 위해 mapping을 해줌 -> mapping된 정보를 통해 프로세스가 라이브러리에 접근
profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글