Search

[운영체제] 병행 프로세스(2) - 생산자-소비자, 판독기-기록기, IPC

제목
Tag
작성일

병행 프로세스의 문제와 일반적인 해결 방법

병행 프로세스 중 협력 프로세스에서 여러 프로세스가 공유 자원을 사용할 때 다음과 같은 문제가 발생할 수 있다.
상호배제 (Mutual Exclusion): 동시에 접근하면 안 되는 자원 보호 필요
동기화 (Synchronization): 프로세스 실행 순서가 중요한 경우 제어 필요
기아 상태 (Starvation): 특정 프로세스가 자원을 무한정 기다리는 상황 발생 가능성

생산자-소비자 문제

두 협력 프로세스 사이에 버퍼를 두고 생산자와 소비자의 상황을 다루는 문제
생산자는 데이터를 버퍼에 넣고, 소비자는 버퍼에서 데이터를 꺼내 사용
버퍼는 유한 크기이며, 버퍼가 가득 찼거나 비어 있을 때 동기화 문제 발생
버퍼에 여러 프로세스가 동시에 접근할 수 없도록 상호배제 필요
버퍼(Buffer)란?
생산자 소비자 프로세스 간에 데이터를 임시로 저장하는 공유 메모리 영역

세마포어 이용한 해결

상호배제: 세마포어 mutex(초깃값 1)
버퍼가 가득찬 경우 동기화: 세마포어 empty(초깃값 n)
버퍼가 빈 경우 동기화: 세마포어 full(초깃값 0)
3개의 세마포어:
mutex: 상호배제 (초기값 1)
empty: 빈 버퍼의 개수 관리 (초기값 n, 버퍼 크기)
full: 찬 버퍼의 개수 관리 (초기값 0)

판독기-기록기 문제

여러 협력 프로세스 사이에 공유자원을 두고 판독기와 기록기의 상황을 다루는 문제
판독기(Reader): 공유 데이터를 읽기만 하는 프로세스
기록기(Writer): 공유 데이터에 쓰기(변경)를 하는 프로세스
판독기는 여러 개가 동시에 접근 가능하지만, 기록기가 접근할 땐 반드시 단독 접근 필요
판독기-기록기 문제는 판독기 우선과 기록기 우선 두 가지 형태로 구분

제1 판독기-기록기 문제(판독기 우선)

판독기 접근 중이면 기록기보다 판독기 우선
기록기 기아 상태 가능성 존재

세마포어 이용한 해결

일반 변수: rcount (판독기 수, 초기값 0)
2개의 세마포어:
mutex (rcount 접근 보호, 초기값 1)
wrt (기록기의 공유 자원 접근 보호, 초기값 1)

제 2 판독기-기록기 문제(기록기 우선)

기록기가 접근 대기 중이라면 새로운 판독기 접근을 제한함
판독기 병행성 감소 및 판독기 기아 상태 발생 가능성 존재
일반 변수:
rcount (판독기 수, 초기값 0)
wcount (기록기 수, 초기값 0)
5개의 세마포어:
mutex1 (rcount 보호, 초기값 1)
mutex2 (wcount 보호, 초기값 1)
mutex3 (판독기 진입 조절, 초기값 1)
rd (판독기 접근 제한, 초기값 1)
wrt (기록기 접근 보호, 초기값 1)
조금 복잡하지만 > 판독기가 기록기가 우선순위 가짐, 기록기 접근 중이면 판독기 추가 진입 불가능하게 제한

프로세스 간 통신(IPC: Inter Process Communication)

병행 프로세스가 데이터를 서로 공유하는 방법
공유 메모리 방법
메시지 전달 방법
하나의 운영체제에서 두 방법 함께 사용가능

공유 메모리 방법

두 개 이상의 협력 프로세스가 공통의 메모리 영역을 공유하여 데이터를 교환
프로세스는 해당 메모리 공간을 자신의 주소 공간처럼 접근
ex) 생산자-소비자 문제의 유한 버퍼, 판독기-기록기 문제의 공유 자원
[프로세스 A] ⇄ [공유 메모리] ⇄ [프로세스 B]
Plain Text
복사

메시지 전달 방법

협력 프로세스 간에 메시지 형태로 데이터를 주고받는 방식
운영체제가 제공하는 시스템 호출 (ex. send(), receive()) 이용
데이터를 메시지 형태로 주고받기 때문에 동기화가 상대적으로 간편
주로 소량 데이터 교환에 적합
[프로세스 A] --send()--> [운영체제 (메시지 큐)] --receive()--> [프로세스 B]
Plain Text
복사

메시지 전달 방법의 논리적 구조

통신 링크
메시지가 전송되는 논리적 통로
운영체제가 관리하며, 물리적이 아닌 논리적 개념
통신 링크 구현 형태
구분
유형
특징
연결 대상
두 프로세스
1:1 통신 링크
셋 이상의 프로세스
1:N 또는 N:M 다자간 통신 링크
링크 개수
하나
하나의 링크로만 연결
둘 이상
프로세스 간 여러 개 링크 가능
통신 방향
단방향
한 방향으로만 메시지 전송 가능
양방향
양쪽 방향으로 전송 가능
링크 용량
무한
송신자 프로세스가 대기할 필요 없음
유한
큐가 가득 차면 송신자 대기
0
수신자가 받을 때까지 송신자 대기

메시지 전달 방식의 두가지 유형

직접 통신

송신 프로세스가 수신 프로세스를 직접 지정하여 메시지 전송
프로세스 간 링크가 자동 설정 (하나의 링크는 두 프로세스 사이에만 설정됨)
양방향 통신 링크 형태로 설정됨
주소 지정 방식
대칭형 (Symmetric)
send(P1, message) : P1에 메시지 전송
receive(P2, message) : P2로부터 메시지 수신
송신자와 수신자가 서로 상대방 프로세스를 명시적으로 지정
비대칭형 (Asymmetric)
send(P1, message) : P1에 메시지 전송
receive(id, message) : id는 발신자를 지정하지 않고 수신 대기

간접 통신

프로세스가 **공유 우편함(mailbox, 포트)**을 통해 간접적으로 통신
메시지는 프로세스 간이 아닌 우편함을 통해 전달됨
하나의 우편함에 여러 프로세스가 연결될 수 있음
통신 링크의 특성
우편함이 여러 개면 프로세스 간 여러 링크 존재 가능
한 링크가 여러 프로세스와 연관 가능
우편함 소속에 따른 특징
우편함이 수신 프로세스에 소속된 경우
수신 프로세스는 하나만 존재
통신 링크는 단방향 (송신 → 수신 프로세스)
우편함이 운영체제에 소속된 경우
여러 수신 프로세스 연결 가능
통신 링크는 양방향 (여러 프로세스 사이에서 상호 전송 가능)