공부해보잠
병행 프로세스와 상호배제 본문
병행프로세스(Concurrent Process)
두 개 이상의 프로세스가 동시에 존재하며 실행 상태에 있는 것을 의미합니다.
특징:
- 한정된 자원 공유: 프로세스들이 컴퓨터 하드웨어(메모리, CPU 등)나 자원을 공유.
- 단일 CPU 시스템: 프로세스들이 교대로 실행됩니다. (Context Switching 사용)
- 멀티코어 시스템: 실제로 여러 프로세스가 동시에 실행될 수 있습니다.
- 예를 들면, 웹 서버에서 여러 클라이언트 요청을 동시에 처리, 운영체제에서 여러 애플리케이션을 병렬로 실행이 있겠습니다.
임계구역(Critical Section)
- 여러 프로세스가 공유 자원(영역)을 안전하게 사용하기 위해 하나의 프로세스만 접근하도록 제한된 영역입니다
- 공유자원에는 CPU, 메로리 디스크, 입출력장치, 버퍼 등이 있습니다.
특징:
- 공유 자원이나 데이터를 안전하게 보호.
- 하나의 프로세스가 자원을 사용 중일 때, 다른 프로세스는 대기.
- 프로세스가 자원을 반납한 후에만 다른 프로세스가 접근 가능.
임계구역 문제 해결방법
상호 배제 (Mutual Exclusion):
- 한 시점에 하나의 프로세스만 공유 자원에 접근해야 합니다
진행 (Progress):
- 임계구역에 접근할 프로세스가 없다면, 자원 접근 권한을 기다리는 프로세스에게 부여해야 합니다.
한계 대기 (Bounded Waiting):
- 프로세스가 자원을 대기하는 시간이 무한정 길어지지 않아야 합니다.
동기화 기법(Synchronization)
두 개 이상의 프로세스가 공유 자원에 동시에 접근하지 못하도록 처리 순서를 결정하는 상호 배제의 한 형태입니다.
목적:
- 데이터 무결성 보장: 여러 프로세스가 공유 자원에 동시에 접근할 경우 데이터 충돌 방지.
- 자원 경합 해결: 공유 자원의 효율적 관리.
- 프로세스 간 조율: 작업 순서를 관리하여 시스템 안정성 보장.
세마포어(Semaphore)
- 공유 자원의 접근을 제어하기 위한 동기화 도구로, 다익스트라(E. J. Dijkstra)가 제안하였고 P(Wait)와 V(Signal) 연산을 통해 동기화와 상호 배제를 보장합니다.
특징:
- 세마포어 변수(S): 공유 자원의 개수를 나타내며, 0 또는 양의 값을 가질 수 있음.
- P(Wait) 연산: 자원을 사용하기 전, 세마포어 값을 감소. 값이 0이면 대기.
- V(Signal) 연산: 자원을 사용한 후, 세마포어 값을 증가.
- 인터럽트 방지: 연산 도중 인터럽트되지 않도록 설계.
종류:
이진 세마포어 (Binary Semaphore):
- 값이 0 또는 1만 가짐.
- 뮤텍스와 유사.
카운팅 세마포어 (Counting Semaphore):
- 0 이상의 양의 정수 값을 가짐.
- 여러 자원을 관리 가능.
뮤텍스(Mutex)
상호 배제를 보장하는 동기화 도구로, 하나의 프로세스만 자원을 사용할 수 있도록 제한하며 뮤텍스(Mutual Exclusion)에서 유래된 이름입니다.
특징:
- 소유권:뮤텍스는 자원을 소유한 프로세스만 해제 가능.
- 상태: 뮤텍스는 잠금(Lock)과 해제(Unlock) 상태를 가짐.
- 경량 동기화:세마포어보다 단순한 구조로, 주로 멀티스레드 환경에서 사용.
뮤텍스와 세마포어의 차이
구분 | 뮤텍스 | 세마포어 |
소유권 | 자원을 소유한 프로세스만 해제 가능 | 소유권 없음 |
값의 범위 | 0과 1 | 0과 양의 정수 |
사용 용도 | 하나의 프로세스만 접근 가능 | 여러 프로세스 접근 가능 |
복잡성 | 단순 | 상대적으로 복잡 |
모니터(Monitor)
공유 자원을 보호하고 동기화를 제공하는 고급 동기화 도구이며 자료 추상화와 정보 은폐에 기반하여 외부 접근을 제한합니다.
특징
- 상호 배제: 한순간에 하나의 프로세스만 모니터 내부에 진입 가능.
- 정보 은폐: 외부 프로세스가 모니터 내부 데이터와 프로시저에 직접 접근 불가.
- 구성 요소: 공유 자원(모니터가 관리하는 데이터), 프로시저(공유 자원을 처리하는 동작)
세마포어, 뮤텍스, 모니터 비교
구분 | 세마포어 | 뮤텍스 | 모니터 |
정의 | 공유 자원 접근 제어 동기화 도구 | 상호 배제를 보장하는 도구 | 고급 동기화 병행성 구조 |
정보 은폐 | 지원하지 않음 | 지원하지 않음 | 지원 |
구조 | 낮은 수준 동기화 | 단순 동기화 | 자료 추상화 및 정보 은폐 구조 |
사용 사례 | 여러 자원 관리 | 단일 자원 관리 | 공유 자원과 병행성 구조 관리 |
교착상태(Dead Lock)의 개요
- 둘 이상의 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상태를 의미합니다.
- 시스템이 멈춘 상태로, 프로세스들이 더 이상 진행할 수 없습니다.
교착상태와 무한 연기의 차이:
- 교착상태: 프로세스 간 자원 점유가 상호 의존적으로 발생하며, 더 이상 실행 가능성이 없는 상태.
- 무한 연기: 실행 가능성은 있지만, 특정 프로세스가 자원 할당에서 계속 뒤로 밀려 무한정 대기하는 상태.
교착 상태 발생의 필요 충분 조건
상호 배제 (Mutual Exclusion):
- 공유자원은 한 번에 한 프로세스만 사용할 수 있어야 합니다.
점유와 대기 (Hold and Wait):
- 자원을 점유한 상태에서 다른 자원을 추가로 요구하며 대기하는 상황.
비선점 (No Preemption):
- 자원을 점유한 프로세스가 다른 프로세스에 의해 강제로 자원을 빼앗길 수 없는 상황.
환형 대기 (순환대기, Circular Wait):
- 프로세스 간 자원 점유가 순환적으로 이루어지는 상황.
- 예: P1 → P2 → P3 → P1 환형 대기
교착상태의 해결방법
예방 (Prevention)
- 교착상태 발생 조건 중 하나 이상을 제거.
- 예: 순환 대기 조건을 피하기 위해 자원을 순차적으로 할당.
회피 (Avoidance):
- 교착상태가 발생하지 않도록 자원의 상태를 분석하여 적절히 할당
- 은행가 알고리즘 (Banker's Algorithm)이 대표적인 방법.
탐지 및 복구 (Detection and Recovery):
- 교착상태 발생 여부를 탐지하고, 문제를 해결하기 위해 자원을 강제로 회수하거나 프로세스를 중단.
무시 (Ignore):
- 교착상태가 발생할 가능성이 낮은 경우, 별도로 처리하지 않고 시스템이 정상적으로 작동하도록 유지.
무한연기(Indefinite Postponement)
- 자원을 할당받을 가능성이 있는 프로세스가 계속해서 대기 상태로 밀려나는 현상.
- 교착상태와 달리 시스템이 멈추지 않지만, 특정 프로세스가 실행되지 못합니다.
해결방법
우선순위 기반 스케줄링:
- 오래 대기한 프로세스에 높은 우선순위를 부여.
시간 제한:
- 자원 요청 대기 시간을 제한하여 일정 시간이 지나면 강제로 할당.
페어 방식 (Fair Scheduling):
- 모든 프로세스에 공정하게 자원을 분배.
출처 및 참조:
정보처리 산업기사 시나공(기본서)