본문 바로가기
computing

20250401_OS5

by greentworkshop 2025. 4. 1.

IPC(Inter-Process Communication) 의 개념과 예시에 대해 다뤄보겠습니다.

IPC 개념과 기법

IPC는 여러 프로세스들이 서로 데이터를 공유하거나 서로 협력할 수 있게 해주는 다양한 메커니즘을 제공합니다. 이 기법들을 통해 프로세스는 데이터나 정보를 주고받거나 동기화할 수 있게 됩니다.


IPC 기법의 주요 종류

  1. 시그널 (Signal)
    • 프로세스가 특정 이벤트나 조건을 알리기 위해 사용하는 메커니즘입니다.
    • 예시: 프로세스 A가 프로세스 B에게 종료하라는 신호를 보낼 때 사용.
    • 특징: 비동기적, 수신한 프로세스는 해당 시그널에 맞는 처리를 합니다.
  2. 인터럽트 (Interrupt)
    • 프로세스의 실행 중에 외부 혹은 내부 이벤트가 발생하여 프로세스의 흐름을 일시적으로 중단시키는 방식입니다.
    • 예시: 하드웨어 장치에서 입력이 들어오면 이를 처리하기 위해 프로세스를 일시 중단시킬 수 있습니다.
  3. 공유파일 (Shared File)
    • 여러 프로세스가 동일한 파일을 공유하여 데이터를 주고받는 방법입니다.
    • 시스템 호출: open(), read(), write(), close() 등을 사용하여 파일을 열고, 데이터를 읽고, 쓰고, 닫습니다.
    • 심화: 순차 파일을 사용하는 경우, 파일 디스크립터(fd)와 관련된 관리가 필요합니다.
  4. 파이프 (Pipe)
    • 데이터를 한 프로세스에서 다른 프로세스로 전달하는 방식입니다.
    • 특징:
      • 하나의 파이프를 사용할 경우 읽기/쓰기 오류가 발생할 수 있으므로 읽기용과 쓰기용 파이프를 구분해야 합니다.
      • 주로 부모-자식 프로세스 간의 통신에 사용됩니다.
  5. 메시지큐 (Message Queue)
    • 여러 프로세스 간에 데이터를 주고받을 수 있는 큐를 이용한 방식입니다.
    • 특징: 양방향 통신, 비동기식 방식으로 데이터를 삽입(Enqueue)하고 추출(Dequeue)합니다.
    • 부모-자식 관계가 없어도 데이터 공유가 가능합니다.
  6. 공유메모리 (Shared Memory)
    • 운영체제에서 별도의 메모리 영역을 할당하여 여러 프로세스가 그 영역을 공유하는 방식입니다.
    • 각 프로세스는 포인터를 통해 이 영역에 접근합니다.
    • 특징: 메모리 공간을 직접 공유하므로 빠른 데이터 전송이 가능합니다.
  7. 소켓 (Socket)
    • 네트워크를 통한 다른 컴퓨터에 있는 프로세스와 통신하는 방식입니다.
    • 특징:
      • PF_LOCAL: 같은 호스트 내 프로세스 간 통신.
      • PF_INET: IPv4를 통한 인터넷 통신.
      • PF_INET6: IPv6를 통한 인터넷 통신.

임계구역(Critical Section) 문제

임계구역 문제는 공유 자원에 접근하는 순서에 따라 실행 결과가 달라질 수 있는 영역을 의미합니다. 여러 프로세스가 동시에 공유 자원에 접근하려고 할 때 문제가 발생할 수 있습니다. 이를 해결하기 위한 조건이 있습니다.


문제 해결 조건

  1. *상호배제 (Mutual Exclusion)
    • 한 프로세스가 임계구역에 들어가면 다른 프로세스는 그 임계구역에 들어갈 수 없어야 합니다.
  2. 한정대기 (Bounded Waiting)
    • 어떤 프로세스도 무한 대기 상태에 빠지지 않도록 해야 합니다.
  3. 진행의 융통성 (Progress Flexibility)
    • 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 됩니다.

알고리즘 및 동기화 방법

1. 피터슨 알고리즘 (Peterson’s Algorithm)

개요

  • 피터슨 알고리즘은 두 개의 프로세스만을 위한 임계구역 문제 해결 알고리즘입니다.
  • 상호배제, 한정대기, 진행의 융통성을 만족하는 알고리즘으로, 프로세스들이 공유 자원에 접근하는 순서를 잘 조정합니다.

작동 방식

  • 각 프로세스는 두 개의 변수를 사용하여 서로 협력하며, 임계구역에 진입하려는 의도를 나타냅니다:
    1. flag[i]: 프로세스 i가 임계구역에 들어가려고 한다는 신호.
    2. turn: 임계구역에 들어갈 차례가 누구인지 나타냅니다.
  • 두 프로세스 P0와 P1가 있다고 할 때, 다음과 같은 방식으로 동작합니다:
    1. P0가 임계구역에 들어가고 싶다면:
      • flag[0] = true로 설정.
      • turn = 1로 설정 (P1에게 차례가 돌아가도록).
      • P0는 P1이 임계구역을 사용하지 않으면 계속 진행하고, P1이 임계구역에 들어가려 할 때는 기다립니다.
    2. P1이 임계구역에 들어가고 싶다면:
      • flag[1] = true로 설정.
      • turn = 0으로 설정 (P0에게 차례가 돌아가도록).
      • P1은 P0가 임계구역을 사용하지 않으면 계속 진행하고, P0가 임계구역을 사용하고 있을 때는 기다립니다.

핵심 원리

  • 상호배제: 한 프로세스가 임계구역에 들어가면, 다른 프로세스는 들어갈 수 없습니다.
  • 한정대기: 한 프로세스가 무한정 대기하지 않도록 보장합니다.
  • 진행의 융통성: 한 프로세스가 다른 프로세스의 진행을 방해하지 않도록 합니다.

2. 데커 알고리즘 (Dekker’s Algorithm)

개요

  • 데커 알고리즘은 두 개의 프로세스를 위한 상호배제를 보장하는 알고리즘입니다. 피터슨 알고리즘과 유사하지만, 데커 알고리즘은 더 복잡한 구조를 가집니다.
  • 이 알고리즘은 **상호배제(mutual exclusion)**를 보장하며, 한정대기진행의 융통성은 보장하지 않습니다.

작동 방식

  • 데커 알고리즘에서는 두 개의 프로세스 P0와 P1가 사용할 수 있는 두 개의 공유 변수가 있습니다.
    1. flag[i]: 프로세스 i가 임계구역에 진입하려고 할 때 true로 설정.
    2. turn: 현재 임계구역을 들어갈 차례를 결정하는 변수.
  • 각 프로세스는 다음과 같이 동작합니다:
    1. flag[i] = true로 설정하고 임계구역에 들어가려는 의사를 표시.
    2. turn 변수를 사용하여 상대 프로세스가 기다려야 할 차례를 설정.
    3. 상대 프로세스가 기다리는 동안 반복문을 통해 상대 프로세스가 임계구역을 사용하지 않으면 계속 진행합니다.

핵심 원리

  • 상호배제: 한 프로세스가 임계구역에 들어가면, 다른 프로세스는 들어갈 수 없습니다.
  • 한정대기: 각 프로세스는 무한 대기하지 않도록 보장해야 하지만, 데커 알고리즘에서는 이것을 보장하지 않기 때문에 이 부분은 취약점이 될 수 있습니다.

3. 세마포어 (Semaphore)

개요

  • 세마포어는 동기화상호배제를 관리하기 위해 사용되는 변수입니다. 세마포어를 사용하여 프로세스들이 자원을 안전하게 공유할 수 있도록 합니다.

작동 방식

  • 세마포어는 정수 값을 가지며, **P()**와 V() 연산으로 자원에 대한 접근을 제어합니다.
    • P() (Proberen): 자원을 요청하는 연산입니다.
      • 자원 수가 0이면 해당 프로세스는 대기 상태로 전환됩니다.
      • 자원 수가 1 이상이면, 자원을 하나 빼고 자원에 접근할 수 있게 됩니다.
    • V() (Verhogen): 자원을 해제하는 연산입니다.
      • 자원 수가 증가하며, 대기 중인 프로세스가 있으면 그 중 하나를 깨워서 자원에 접근하게 만듭니다.

핵심 원리

  • 상호배제: 세마포어를 통해 한 번에 하나의 프로세스만 자원에 접근할 수 있습니다.
  • 한정대기: 세마포어는 무한 대기를 방지할 수 있지만, 이 부분은 구현에 따라 달라질 수 있습니다.
  • 진행의 융통성: 대기 중인 프로세스가 자원을 얻을 수 있도록 보장합니다.

예시

  • 바이너리 세마포어 (Binary Semaphore): 자원에 대한 접근이 두 가지 상태만 있을 때 사용됩니다. (0 또는 1)
  • 카운팅 세마포어 (Counting Semaphore): 여러 자원에 대한 동기화를 관리할 때 사용됩니다.

4. 모니터 (Monitor)

개요

  • 모니터는 공유 자원에 대한 접근을 자동적으로 동기화하고, 자원에 대한 상호배제를 보장하는 고수준의 동기화 기법입니다.
  • 모니터는 공유 자원을 숨기고, 자원에 접근하는 인터페이스만 제공합니다. 이로써 외부에서 자원에 접근하려면 반드시 모니터의 메서드를 통해 접근해야 합니다.

작동 방식

  • 모니터 내에서는 동기화된 메서드를 통해 자원에 접근합니다. 이를 통해 프로세스가 임계구역에 접근하려 할 때, 자동으로 상호배제가 이루어집니다.
  • 모니터는 프로그래머가 수동으로 동기화하는 것을 피할 수 있도록 도와줍니다. 예를 들어, 모니터 내부에서 조건변수를 사용하여 프로세스가 대기하거나 신호를 받을 수 있도록 합니다.
    • wait(): 조건이 만족되지 않으면 해당 프로세스를 대기 상태로 전환합니다.
    • signal(): 조건이 만족되면 대기 중인 프로세스를 깨워서 진행할 수 있게 만듭니다.

핵심 원리

  • 상호배제: 모니터 내의 공유 자원에 접근할 때는 하나의 프로세스만 접근할 수 있습니다.
  • 조건 변수를 이용해 동기화를 지원하며, 프로세스는 필요한 조건이 충족될 때까지 대기하거나 신호를 받을 수 있습니다.

요약

기법 특징 사용조건 장점
피터슨 알고리즘 두 프로세스만 사용, 상호배제, 한정대기,
진행의 융통성 보장
2개의 프로세스 간단하고,
프로세스 간 상호배제 보장
데커 알고리즘 두 프로세스만 사용, 상호배제 보장 2개의 프로세스 상호배제 보장,
한정대기 보장은 안 됨
세마포어 P()와 V()를 이용한 동기화 여러 프로세스 동기화 및 자원 관리에 유용
모니터 자원을 숨기고 인터페이스만 제공, 조건변수 사용 여러 프로세스 고수준의 동기화,
코드 간소화

각 기법들은 임계구역 문제를 해결하기 위해 사용되며, 각기 다른 방식으로 동기화 및 상호배제를 구현합니다. 선택은 시스템의 요구사항과 프로세스의 수, 구현의 복잡성에 따라 달라질 수 있습니다.


시각적으로 정리해보기

이를 더 직관적으로 이해할 수 있도록 시각적으로 나타내기 위해, 각 IPC 기법을 차례로 묶은 도식이나 그림을 그려볼 수 있습니다. 예를 들어:

  1. 시그널 및 인터럽트는 이벤트 기반의 비동기 통신이므로 서로 비슷한 그룹으로 묶을 수 있습니다.
  2. 공유파일, 파이프, 메시지큐, 공유메모리는 데이터 공유 방식으로, 각 방식의 특징과 차이를 도식으로 설명할 수 있습니다.
  3. 세마포어, 모니터는 동기화 기법으로 묶어 서로 간의 동기화가 어떻게 이루어지는지 보여줄 수 있습니다.

'computing' 카테고리의 다른 글

20250403_java5  (0) 2025.04.03
java중간고사 정리  (0) 2025.04.03
20250331_DB4  (0) 2025.03.31
20250327_java4 (자바 자료형, 연산자, 형변환 핵심요약)  (1) 2025.03.27
20250325_OS4  (1) 2025.03.25