공유 메모리 (Shared Memory) 이해하기

Lee·2024년 6월 20일
0

공부 일지

목록 보기
1/1
post-thumbnail

1) IPC(Inter-Process Communication)란?

  • 프로세스들 사이에서 서로 데이터를 주고받는 행위 또는 그 방법을 의미한다.
  • 각 프로세스는 독립적인 메모리 공간을 가지고 있어 별도의 메커니즘을 사용해야만 서로 통신이 가능하다.


사진 출처: https://jwprogramming.tistory.com/54

원래 프로세스는 위 그림과 같이 독립적으로 동작하는 실행 객체이다. 이 독립성은 다른 프로세스의 영향을 받지 않는 장점을 가지지만, 동시에 별도의 설비 없이는 다른 프로세스와의 통신이 어렵다는 단점도 있다. 이러한 상황에서 IPC(Inter-Process Communication) 모델을 사용하면 프로세스 간 데이터 교환과 통신을 효율적으로 수행할 수 있다.

오늘은 IPC 모델 중 Shared Memory에 자세히 살펴볼 예정이다!!


2) Shared Memory(공유 메모리)

  • 하나의 컴퓨터 시스템 내에서 다수의 프로세스가 데이터를 공유할 수 있는 메커니즘
  • 여러 장치(CPU)나 여러 프로세스가 공동으로 사용하는 메모리

2-2) 사용 이유

  • 비교적 간단한 통신: 메모리에 접근하는 것만으로 데이터를 주고받을 수 있기 때문에 다른 IPC 기법들에 비해 비교적 구현이 간단하다.
  • 효율적인 데이터 공유 가능: 데이터를 복사하지 않고 프로세스간에 직접 접근할 수 있기 때문에 데이터 공유가 빠르고 효율적이다.
  • 적은 오버헤드: 다른 IPC 기법들은 데이터를 전송하기 위한 추가적인 오버헤드가 발생할 수 있지만, Shared Memory는 하나의 메모리를 공유해서 접근하기 때문에 불필요한 오버헤드가 발생할 확률이 적다.

이렇게 Shared Memory를 정리해봤는데 그럼 이 공유 메모리는 도대체 어떤 상황에서 사용되는걸까??

2-3) 사용 분야

멀티 프로세스 환경에서의 데이터 공유

  • 여러 프로세스가 동시에 접근해야 하는 데이터가 있을 때 사용된다. ex) DB 서버에서 여러 클라이언트가 동시에 데이터를 읽고 쓰는 경우, 데이터의 메모리 캐시를 공유 메모리로 구현하여 성능 향상

프로세스 간 데이터 전송의 오버헤드 감소

  • 다른 IPC 기법들에 비해 데이터 전송 시 발생하는 오버헤드를 최소화하고 싶을 때 사용된다. ex) 대규모 데이터 전송이 필요한 경우 데이터를 복사하는 것보다 공유 메모리를 사용하여 데이터를 직접 전송하는 것이 더 효율적임

이처럼 공유 메모리는 데이터 접근 속도가 빠르고 구현이 간단하여 다양한 멀티 프로세스 환경에서 유용하게 사용된다.

하지만 여기서 주의할 점은 공유 메모리를 사용하면 데이터를 공유하는 것이기 때문에 동기화 이슈가 발생한다. 이를 해결하기 위해 데이터 접근의 동기화가 필요한데, 이 때 세마포어(Semaphore) 등의 동기화 메커니즘을 함께 사용할 수 있다.

2-4) 세마포어(Semaphore)

  • 프로세스 간 메시지 전송이나 공유 메모리를 통해 특정 데이터를 공유하는 경우 발생할 수 있는 문제를 해결하는 도구
  • 여러 프로세스가 동시에 공유 자원에 접근하면 안 되고, 오직 한 번에 하나의 프로세스만이 접근할 수 있도록 제어할 때 사용

공유 메모리 내의 데이터 접근을 동기화하여 데이터 일관성을 유지하기 위해 세마포어가 사용된다. 임계 영역을 설정하고, 프로세스가 이 영역에 들어갈 수 있도록 허용하는 방식으로 동작하는데, 이렇게 함으로써 여러 프로세스가 동시에 공유 메모리에 접근할 때 발생할 수 있는 경쟁 상태나 데이터 불일치 문제를 방지할 수 있다.


✅✅ 지금까지의 내용을 정리해보자면!

공유 메모리와 세마포어는 IPC 기법으로 중요한 역할을 한다. 공유 메모리는 여러 프로세스 간에 데이터를 신속하게 교환하고 공유할 수 있는 장점을 가지고 있다. 그러나 이러한 장점을 활용하기 위해서는 데이터 접근의 동기화가 필수적인데, 이를 위해 세마포어와 같은 동기화 메커니즘이 사용되어야 한다.

세마포어는 공유 자원에 대한 접근을 제어함으로써 데이터 일관성을 유지하고 경쟁 상태를 방지하기 때문에 공유 메모리를 사용할 때는 반드시 이러한 동기화 메커니즘이 함께 고려되어야 한다.

0개의 댓글