[운영체제] 프로세스 관리 - 프로세스간 통신과 자원공유의 문제점

프로세스 간의 협력, 분산 처리를 위해 멀티 프로세싱을 이용한다. 하지만 각각의 프로세스가 자신만의 메모리 공간을 가지고 있기 때문에 직접적으로 데이터를 공유할 수 없다. 따라서 자원을 공유하고 통신하기 위한 방법이 필요하다. 이러한 프로세스간 통신을 위한 방법을 IPC(Inter-Process Communication)이라고 부른다.

🤔 언제 멀티 프로세스를 사용할까?
각 프로세스마다 데이터 영역이 나누어져 있기 때문에 하나의 프로세스에 문제가 생겨도 다른 프로세스는 문제없이 동작가능하다. 즉, 안정성이 뛰어나기 때문에 규모가 큰 데이터의 병렬 처리, 분산 처리에 용이하다. 하지만 각 프로세스간 데이터 공유 및 통신이 필요하기 때문에 해당 부분에 IPC 기법을 사용한다.


프로세스간 통신(IPC)

  1. pipe
    • 같은 컴퓨터 내 프로세스간 단방향 통신 기법
    • 부모, 자식 프로세스간 통신만 가능
    • 양방향 통신을 위해서 2개의 pipe가 필요함
  2. named pipe
    • 같은 컴퓨터 내 프로세스간 단방향 통신 기법
    • 이름을 가지며 특수파일 형식으로 디스크에 저장됨
    • 따라서, 독립된 프로세스간 통신 가능
    • FIFO(First-In-First_Out) 형태로 동작
  3. Socket
    • 프로세스 간 양방향 통신을 위해 사용함
    • UNIX 도메인 소켓
      -한 컴퓨터 내에서만 양방향 소통
      -통신을 위해 소켓 파일 사용
    • BSD 소켓
      -TCP/IP 모델을 이용함
      -IP와 Port 번호를 사용하여 소통
      -현재의 소켓 프로그래밍에서 사용되는 모델
      -한 컴퓨터 내, 다른 컴퓨터간 모두 가능, 호스트 IP 주소의 프로세스 포트 번호 사용
  4. Message Queue
    • FIFO 형태로 동작
    • named pipe의 스트림방식이 아닌 메세지 단위로 처리하고 메세지들을 담는 메모리 공간이 있음
    • 따라서, 여러 프로세스가 Message Queue의 데이터 접근가능
  5. Shared Memory
    • 프로세스간 메모리 영역을 공유해서 사용
    • 곧바로 메모리에 접근할 수 있으므로 가장 빠름


경쟁상태(Race Condition)

멀티 프로세스/쓰레드 환경에서 데이터에 동시접근 시 문제가 생길 가능성이 있다. 쓰는 도중 읽는 작업이 발생하면 얻고자 하는 결과값을 제대로 얻지 못할 가능성이 존재한다. 이렇듯 공유자원에 동시 접근하여 읽고 쓰면서 생기는 문제를 경쟁상태라고 부른다.

💡 공유자원

💡 임계영역
경쟁상태가 발생하게 되는 코드 영역

경쟁상태 해결조건

아래 3가지의 조건을 모두 보장해야한다.

  • 상호 배제
  • 한정 대기
  • 진행 융통성


경쟁상태(임계영역 접근) 해결방법

프로세스 동기화(상호 배제)

한 번에 하나의 프로세스, 스레드만 가능하도록 하는 상호배제와 실행 순서를 지정하여 동기화하는 방법이 존재한다.

  • 뮤택스(Mutex)
  • 세마포어(Semaphore)
    • Counting Semaphore
    • Binary Semaphore
  • 락? 언락?


교착상태(DeadLock)

멀티 프로세스/쓰레드 환경에서 문제점 -> 둘 이상의 프로세스가 서로가 원하는 공유자원을 상대가 점유하고 있을때 발생


교착상태의 예시 - 식사하는 철학자 문제


교착상태의 원인

다음의 4가지 조건을 모두 만족할 시

  • 상호배제
  • 점유대기
  • 비선점
  • 환형대기


교착상태 해결방법

  • 예방
  • 회피
  • 탐지 & 회복
    • 발생시 감지
    • 은행원 알고리즘

카테고리:

업데이트:

댓글남기기