[운영체제] IPC

Narcoker·2023년 6월 12일
0

운영체제

목록 보기
2/13

IPC

서로 다른 프로세스 간에 데이터를 주고 받는 메커니즘을 의미한다.

한 프로세스의 출력이 다른 프로세스의 입력으로 사용될 수 있도록 한다.

종류

파일

데이터를 파일에 저장해서 공유하는 방식

장점

  • 구현이 간단
  • 디버깅 용이
  • 모든 운영체제에서 지원
  • 데이터가 영구적으로 저장되어서 프로세스가 종료되어도 데이터를 유지할 수 있다.

단점

  • 동시에 여러 프로세스가 파일을 변경하려고 하면 충돌이 발생할 수 있다.
    • 동기화 메커니즘 필요

파이프와 소켓

파이프는 같은 시스템에서 실행 중인 프레스 간의 데이터를 전송하는데 사용되는 방식

소켓을 네트워크를 통해 실행 중인 프로세스 간에 데이터를 전송하는데 사용되는 방식

장점

  • 실시간 데이터 전송이 가능하다.
  • 파이프의 경우 부모-자식 프로세스 간의 통신에 이상적
  • 소켓의 경우 네트워크를 통한 프로세스 간 통신에 이상적

단점

  • 파이프는 같은 시스템에서만 사용할 수 있다.
  • 소켓은 구현이 복잡하다.

메세지 큐(Message Queue)

프로세스 간에 데이터를 전송하는데 사용하는 방식
메세지는 큐에 저장되고 수신 프로세스가 준비되면 메세지를 수신한다.

장점

  • 프로세스 간 데이터를 안정적으로 전송한다.
  • 큐에 저장된 메세지는 프로세스가 준비될 때까지 기다리므로 별도의 동기화가 필요없다.

단점

  • 구현 시 시스템 자원을 많이 소비한다.
  • 큐가 가득 차면 메세지를 더이상 추가할 수 없다.

공유 메모리(Shared Memory)

시스템 상의 공유 메모리를 통해 통신한다.

일정한 크기의 메모릴르 프로세스 간에 공유한다.
공유메모리는 커널에서 관리한다.
장점

  • 데이터가 메모리 내부에서 직접 이동하기 때문에 통신 오버헤드가 상대적으로 적다.
  • 데이터를 복사할 필요가 없어서 대용량 데이터 전송에서 효율적이다.

단점

  • 동기화 문제
    • 동시에 여러 프로세스가 접근할 수 있으므로 동기화 메커니즘(세마포어, 뮤텍스 등) 이 필요하다.
  • 공유 메모리 영역은 모든 프로세스가 접근할 수 있으므로 보안적인 메커니즘이 필요하다.
  • 운영체제와 밀접하게 관련이 있어서 이식에 제한적이다.

세마포어(Semaphore)

공유 리소스를 제어하는 방법

여러 프로세스가 동일한 리소스를 공유하도록 하되,
한번에 하나의 프로세스만 해당 리소스에 접근할 수 있도록하는 메커니즘

장점

  • 여러 프로세스 또는 스레드 간의 동기화를 제공
  • 공유 자원에 대한 동시 접근을 허용하는 수를 제한한다.
    • 동시 업데이트와 같은 문제를 방지
    • 데이터 일관성 유지
  • 데드락 방지
    • 데드락 : 두개 이상의 프로세스나 스레드가 서로를 대기하면서 발생하는 현상)
  • 스핀락에 대한 해결책
    • 스핀락 : 공유 자원에 대한 동시 접근을 제어하는 락(lock)의 한 형태, 락이 해제될 때까지 능동적으로 대기("스핀"), 락이 필요할때 스레드는 락을 획득하려고 시도한다. 만약 다른 스레드가 락을 가지고 있는 경우 해당 스레드는 락이 해제될때까지 무한히 기다린다. 이를 스핀이라고 한다.
      • 스핀락이 효과적인 상황
        1. 락이 금방 해제될 것이 예상되는 경우
        2. 스레드가 락을 기다리는 동안 다른 일을 할 수 없는 경우
      • 고려 사항
        • 스핀락은 CPU 자원을 많이 사용하므로 스핀 시간이 길어지면 성능 하락
          • 스핀 시간이 긴 경우 다른 유형의 락(세마포어 등)을 고려하는 것이 좋다.

단점

  • 복잡하다.
  • 프로세스가 세마모퍼를 잠그고 종료하는 경우 다른 프로세스들이 영원히 기다리게될 수 있음
    • 이를 locked semaphore 라고 한다.
  • 우선 순위의 역전
    • 높은 우선 순위의 프로세스가 낮은 우선순위의 프로세스의 잠금 해제를 기다리는 상황이 발생
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글