학습 개요
- 최근에는 여러 프로세스가 단순히 순차 처리가 아닌 병행 처리될 필요가 많음
- 음악 파일을 배경 음악으로 재생하며 동영상도 틀어 놓고 문서 작업을 하는 경우, 운영 체제는 이들을 병행으로 처리해야 함
- 특히 이렇게 병행 처리되는 프로세스가 서로 유기적으로 상호 작용하며 동작하는 경우에는 해결해야 할 다양한 문제가 존재함
- 병행 프로세스의 기본 개념과 함께 상호 배제와 동기화 문제를 알아보고 이를 해결하기 위해 제공되는 장치들에 대해 학습함
학습 목표
- 병행성과 병행 프로세스의 개념을 설명할 수 있음
- 병행성 문제를 설명할 수 있음
- 세마 포어의 개념을 설명할 수 있음
강의록
병행 프로세스의 개요
병행성과 병행 프로세스
- 병행성 (concurrency)
- 여러 개의 프로세스 또는 쓰레드가 동시 수행되는 시스템의 특성
- 병행 프로세스
- 동시 수행되는 여러 개의 프로세스 또는 쓰레드
병행 프로세스의 실행 형태
1개의 CPU
- 인터리빙 형식
여러 개의 CPU
- 병렬 처리 형식
멀티프로세서 시스템에서의 메모리 구조에 따라
강 결합 시스템 (공유 메모리 구조)
약 결합 시스템 (분산 메모리 구조)
프로세스 간의 관계
- 독립 프로세스
- 수행 중인 다른 프로세스에 영향을 주지도 받지도 않음
- 데이터 및 상태를 다른 프로세스와 공유하지 않음
- 프로세스의 실행
- 결정적: 실행 결과는 입력에 의해서만 결정됨
- 재생 가능: 같은 입력에 대해 항상 동일한 실행 결과
- 협력 프로세스
- 수행 중인 다른 프로세스와 영향을 주고 받음
- 데이터 및 상태를 다른 프로세스와 공유
- 프로세스의 실행:
- 비 결정적: 실행 결과는 실행 순서에 좌우됨
- 재생 불가능: 같은 입력에 대해 항상 동일한 실행 결과를 보장하지 못함
병행성 문제
병행성 문제
- 협력 프로세스인 경우 발생 가능한 문제
- 상호 배제
- 동기화
- 통신
상호 배제
- 2개 이상의 프로세스가 동시에 임계 영역을 수행하지 못하도록 하는 것
- 임계 영역
2개 이상의 프로세스가 동시에 사용하면 안 되는 공유 자원을 액세스하는 프로그램 코드 영역
동기화
2개 이상의 프로세스에 대한 처리 순서를 결정하는 것
- 프로세스 동기화
상호 배제
임계 영역에 대한 동기화 문제
통신
- 프로세스들이 데이터를 공유하기 위해 반드시 필요
- 프로세스 간 통신 (IPC)
- 통신 방법
- 하나의 변수 사용
- 메시지를 서로 주고받음
세마포어
세마포어(semaphore)
- 상호 배제와 동기화 문제를 해결하기 위한 도구
- Dijkstra가 제안
- 정수형 공용 변수
- 저장 값: 사용 가능한 자원의 수 또는 잠김이나 풀림의 상태
- 상황에 맞춰 0 이상인 정수로 초기화
- 두 기본 연산 p와 v에 의해서만 사용됨
- 기본 연산: 인터럽트되지 않고 하나의 단위로 처리됨
- 연산
P
검사, 감소 시키려는 시도
1 2 3 4 5 6
void P(semaphore s) { if (s > 0) s--; else 현재 프로세스를 대기시킴; }
- 연산
V
증가
1 2 3 4 5 6
void V(semaphore s) { if (대기 중인 프로세스 없음) s++; else 대기 중인 프로세스 1개 진행; }
- 세마 포어마다 대기 큐 필요
상호 배제 해결
- 상호 배제를 위한 일반적인 요구 사항
- 한 프로세스가 임계 영역 수행 중
- 다른 프로세스는 임계 영역에 진입해서는 안 됨
- 임계 영역 수행 중이던 프로세스가 임계 영역 벗어남
- 누군가 하나는 임계 영역을 새로이 수행할 수 있어야 함
- 임계 영역 진입 못하고 대기하는 프로세스
- 적절한 시간 내에 임계 영역 수행을 시작할 수 있어야 함
- 한 프로세스가 임계 영역 수행 중
상호 배제를 위한 임계 영역 주변의 코드 영역
- 진입 영역
- 임계 영역에 대한 수행을 해도 되는지 체크
- 해제 영역
- 다른 프로세스가 임계 영역 수행을 시작할 수 있도록 함
- 진입 영역
세마 포어 이용
- 세마포어 mutex 초깃값은 1
- 진입 영역
P(mutex)
- 해제 영역
V(mutex)
- 대기 큐는 FIFO로 동작
- 세마포어 sync 초깃 값은 0
상호 배제 해결 예
- 프로세스 A가
P
의 mutex를 확인- mutex가 1이므로 임계 영역 진입 후 mutex 값 1 감소 시킴
- 프로세스 B가
P
의 mutex를 확인- mutex 값이 0이므로 대기 큐에서 대기
- 프로세스 c가
P
의 mutex를 확인- mutex 값이 0이므로 대기 큐에서 대기
- 프로세스 A가
V
의 mutex를 확인- mutex 값이 0이고 대기 큐에 프로세스가 있으므로 대기 큐에 있는 B를 임계 영역에 진입 시킴
- 프로세스 B가
V
의 mutex를 확인- mutex 값이 0이고 대기 큐에 프로세스가 있으므로 대기 큐에 있는 C를 임계 영역에 진입 시킴
- 프로세스 C가
V
의 mutex를 확인- mutex 값이 0이고 대기 큐에 프로세스가 없으므로 mutex 값 1 증가 시킴
동기화 해결
- 상황
프로세스 A가 코드 S1을 수행한 후 프로세스 B가 코드 S2를 수행하도록 동기화
- 세마포어 sync 초깃 값은 0
- 정상 처리 시 동기화 해결
- 프로세스 A가 S1을 처리 후
V
연산자 실행- 대기 하는 프로세스가 없으므로 sync 값 1 증가 시킴
- 프로세스 B가 S2 처리 전
P
연산자 실행- sync 값이 0보다 크므로 1 감소 시키고 S2 처리
- 프로세스 A가 S1을 처리 후
- 정상적이지 않은 처리 동기화 해결
- 프로세스 B가 먼저 S2 처리 전
P
연산자 실행- sync 값이 0이기 때문에 대기 큐에서 프로세스 B 대기 시킴
- 프로세스 A가 S1 처리 후
V
연산자 실행- 대기하는 프로세스가 있으므로 프로세스 B를 깨워 처리함
- 프로세스 B가 먼저 S2 처리 전
정리 하기
- 병행성은 여러 개의 프로세스 또는 쓰레드가 동시에 수행되는 시스템의 특성을 의미하고, 동시에 수행되는 여러 개의 프로세스 또는 쓰레드를 병행 프로세스라고 함
- 병행 프로세스는 프로세스 간의 관계에 따라 독립 프로세스 또는 협력 프로세스임
- 협력 프로세스는 병행성과 관련하여 상호 배제, 동기화, 통신과 관련한 다양한 문제가 발생할 수 있음
- 임계 영역은 2개 이상의 프로세스가 동시에 사용하면 안 되는 공유 자원을 액세스하는 프로그램 코드 영역을 의미함
- 상호 배제는 2개 이상의 프로세스가 동시에 임계 영역을 수행하지 못하도록 하는 것임
- 동기화는 2개 이상의 프로세스에 대한 처리 순서를 결정하는 것임
- 세마포어는 상호 배제와 동기화 문제를 해결하기 위한 정수형 공용 변수로, 2개의 기본 연산
P
와V
에 의해서만 사용될 수 있음