All
병행 프로세스의 문제와 일반적인 해결 방법
병행 프로세스 중 협력 프로세스에서 여러 프로세스가 공유 자원을 사용할 때 다음과 같은 문제가 발생할 수 있다.
•
상호배제 (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, 포트)**을 통해 간접적으로 통신
•
메시지는 프로세스 간이 아닌 우편함을 통해 전달됨
•
하나의 우편함에 여러 프로세스가 연결될 수 있음
통신 링크의 특성
•
우편함이 여러 개면 프로세스 간 여러 링크 존재 가능
•
한 링크가 여러 프로세스와 연관 가능
우편함 소속에 따른 특징
•
우편함이 수신 프로세스에 소속된 경우
◦
수신 프로세스는 하나만 존재
◦
통신 링크는 단방향 (송신 → 수신 프로세스)
•
우편함이 운영체제에 소속된 경우
◦
여러 수신 프로세스 연결 가능
◦
통신 링크는 양방향 (여러 프로세스 사이에서 상호 전송 가능)





