Home [OS] 병행 프로세스(2)
Post
Cancel

[OS] 병행 프로세스(2)

병행 프로세스


프로세스의 상호협력

공통 작업을 수행하기 위해 서로 협동하는 경우

  • 생산자/소비자 문제, 판독기/기록기 문제
생산자/소비자 문제
  • 유한 버퍼 문제
    • 생산자 : 버퍼에 데이터를 채우는 프로세스
    • 소비자 : 버퍼에 있는 데이터를 읽어내는 프로세스
  • 생산자 프로세스
1
2
3
4
5
6
7
8
9
repeat

P(empty);
P(mutex);

V(mutex);
V(full);

until false;
  • 소비자 프로세스
1
2
3
4
5
6
7
8
9
repeat

P(full);
P(mutex);

V(mutex);
V(empty);

until false;
판독기/기록기 문제
  • 여러 개의 판독기가 동시에 공유 데이터 객체에 접근하는 것은 문제 없음
  • 기록기와 또 다른 프로세스(판독기 또는 기록기)가 동시에 공유 객체에 접근한다면 문제가 발생, 기록기가 공유 객체에 대해 배타적 접근을 하도록 해야한다.
  • 우선순위에 따른 문제의 변형
    • 제1판독기/기록기 문제(판독기 우선)
      • 기록기가 이미 공유객체의 사용을 허가 받은 것이 아니라면 판독기는 대기하지 않음
      • 기록기의 기아상태 유발 가능
    • 제2판독기/기록기 문제(기록기 우선)
      • 일단 기록기가 준비되었다면 기록을 가능한 한 빨리 수행할 수 있도록 함
      • 판독기의 기아상태 유발 가능
  • 판독기 프로세스
1
2
3
4
5
6
7
8
9
10
11
12
var mutex, wrt : semaphore;
readcount : integer;

P(mutex);
    readcount := readcount + 1;
    if readcount = 1 then P(wrt);
V(mutex);
//..읽기 수행..
P(mutex);
    readcount := readcount - 1;
    if readcount = 0 then V(wrt);
V(mutex);
  • 기록기 프로세스
    1
    2
    3
    
    P(wrt);
    //..쓰기 수행..
    V(wrt);
    

프로세스 간의 통신

병행 프로세스 사이의 통신을 위한 방법
  • 공유기억장치 기법
    • 프로세스 간에 공유변수를 이용하여 정보를 교환하도록 하는 것
    • 예 : 유한 버퍼
    • 고속 통신 가능
    • 통신기능 제공의 책임 : 응용 프로그래머
  • 메시지 시스템 기법
    • 메세지 교환방식을 이용함으로써 프로세스가 공유변수에 의존하지 않고도 서로 통신할 수 있게 하는 것
    • send/receive 연산자
    • 소량의 데이터 교환에 유용
    • 통신기능 제공의 책임 : 운영체제
    • 통신 링크 : 프로세스들 사이에 메시지를 주고받기 위한 연결통로
      논리적 구현에 대한 이슈
      1. 어떻게 링크를 설정하는가?
      2. 한 링크가 2개 이상의 프로세스와 연결될 수 있는가?
      3. 통신 프로세스의 pair에 얼마나 많은 링크가 있는가?
      4. 링크의 용량은 얼마인가? 즉, 링크가 어느 정도 버퍼 공간을 갖는가? 갖는다면 어느 정도인가?
      5. 메시지의 크기는 어느 정도인가? 링크가 가변크기 또는 고정크기 메시지를 수용할 수 있는가?

      </div> </details>

    1. 직접 통신
      • 메시지 전달 연산에 수신자나 송신자 이름을 명시
      • 통신 링크는 자동 설정됨
      • 하나의 링크는 두 프로세스 사이만 연관되며 각 통신 프로세스 쌍 사이에는 정확히 하나의 링크가 존재한다.
      • 링크는 양방향이다.
    2. 간접 통신
      • 메시지 전달 연산에 우편함 이름을 명시
      • 공유 우편함이 있는 경우에만 설정됨
      • 한 링크는 2개 이상의 프로세스들과 연관될 수 있으며 각 통신 프로세스 쌍 사이에는 여러 링크가 존재 가능
      • 링크는 단방향 또는 양방향이다.
    3. 링크의 용량
      • ‘0’ 용량 - 큐의 최대 길이가 0이다.
      • 제한된 용량 - 큐는 유한 길이 n을 갖는다.
      • 무제한 용량 - 큐는 무한한 길이를 가지고 있다.
    4. 예외조건
      • 프로세스가 종료된 경우
        1. 송신 프로세스가 종료된 경우
        2. 수신 프로세스가 종료된 경우
      • 메시지를 상실한 경우
        1. 운영체제가 이런 사건을 탐지하고 메시지를 재전송한다.
        2. 송신 프로세스가 이런 사건을 탐지하고, 원한다면 메시지를 재전송한다.
        3. 운영체제가 탐지 후 송신 프로세스에게 통지한다. 송신 프로세스는 원한다면 계속 수행할 수 있다.
      • 메시지가 혼합된 경우
        • 운영체제가 처음의 메시지를 재전송하거나 이런 사건을 프로세스에 통보한다.
This post is licensed under CC BY 4.0 by the author.