Computer Science/운영체제

운영체제 5강 :: 생산자-소비자 문제, 프로세스 간 통신

HJPlumtree 2023. 4. 19. 21:12

운영체제에서 기억하고 싶은 내용

 

 

생산자-소비자 문제 정의

생산자: 데이터를 버퍼에 넣는 프로세스

소비자: 데이터를 버퍼에서 꺼내는 프로세스

 

조건

  • 버퍼에 여러 프로세스가 동시에 접근할 수 없다
  • 버퍼에 넣는 거나, 꺼내는 거나 동시에 접근할 수 없다
  • => 상호배제 필요하다

 

유한 버퍼 문제

  • 버퍼가 가득 찬 경우 생산자는 대기해야 한다
  • 버퍼가 빈 경우 소비자는 대기해야 한다
  • => 동기화 필요하다

 

세마포어를 이용해서 해결해볼까!

  • 세 가지 세마포어를 사용
  • mutex로 동시 접속 못하도록,
  • empty와 full로 뭘 했는지 이해는 안되네

 

생산자 코드

While(true) {
  데이터 생산
  P(empty);
  P(mutex);
  버퍼에 데이터 넣는다 // 임계 영역
  V(mutex);
  V(full);
}

 

소비자 코드

While(true) {
  P(full);
  P(mutex);
  버퍼에서 데이터 꺼낸다 // 임계 영역
  V(mutex);
  V(empty);
  데이터 소비
}

 

 

판독기-기록기 문제

공유 자원을 두고 판독기와 기록기의 상황을 다루는 문제

 

  • 판독기: 데이터 읽는 프로세스
  • 기록기: 데이터 쓰는 프로세스

 

생산자-소비자는 둘 다 기록기라는 것이 다르네

 

조건

1. 기록기가 데이터 쓰는 중에 누구도(기록기, 판독기) 공유자원에 접근할 수 없다 

데이터를 읽는 동안 데이터를 쓸 수 없다

=> 상호배제 필요

2. 여러 판독기는 동시에 공유자원에서 데이터를 읽을 수 있다

 

제1 판독기-기록기 문제

  • 판독기 우선순위를 준다
  • 판독기가 공유자원에 접근하면 기록기보다 판독기 먼저
  • 판독기는 즉시 공유자원에 접근 가능
  • => 문제점: 기록기 기아상태 유발

 

세마포어를 이용해서 해결해볼까!

기록기 코드

P(wrt);
공유자원에 쓰기
V(wrt);

 

판독기 코드

P(mutex);
rcount = rcount + 1;
if (rcount == 1) P(wrt);
V(mutex);
공유자원에서 읽기
P(mutex);
rcount = rcount - 1;
if (rcount == 0) V(wrt);
V(mutex);

 

제2 판독기-기록기 문제

  • 기록기에 우선순위 준다
  • 기록기가 대기중이면 판독기는 공유자원 접근 불가능
  • 판독기 기아상태 유발 가능

 

 

프로세스 간 통신(IPC)

InterProcess Communication

병행 프로세스가 데이터를 서로 공유하는 방법

 

공유 메모리 방법

  • 공유자원의 메모리 공간에 동일한 변수 사용
  • 장점: 대량 데이터 교환 편해서 고속 통신 가능하다
  • 단점: 통신산 발생 가능한 에러를 응용 프로그래머가 다 처리해야된다..

 

메시지 전달 방법

  • 협력 프로세스가 메시지 주고 받는다
  • 시스템 호출 send(), receive()
  • 소량 데이터 교환에 적합
  • 장점: 통신상 발생 가능 문제를 운영체제가 해결해준다

 

통신 링크

메시지가 지나는 통로

 

통신 링크 형태

  • 연결대상: 프로세스 2개? 3개 이상 프로세스 인지 고민 필요
  • 두 프로세스 사이 링크 개수: 1개? 2개 이상?
  • 방향성: 단방향 vs 양방향
  • 용량: 무한, 유한, 0