병행성(concurrency)
- 여러 개의 프로세스 또는 쓰레드가 동시에 실행되는 시스템의 특성
- 병렬 처리와 다르게 단일 CPU 환경에서도 가능
병행 프로세스
- 동시 수행되는 여러개의 프로세스 또는 쓰레드
병행 프로세스의 실행 형태
- 단일 CPU: 인터리빙 형식
- CPU가 빠르게 번갈아가며 프로세스를 실행
- 실제 동시 실행이 아닌 시분할 방식으로 동작
- 다중 CPU: 병렬처리
- 여러 개의 CPU가 각각 프로세스를 실행
강결합 시스템(공유 메모리 구조)
- 여러 개의 프로세스가 공유 메모리를 통해 데이터 교환
- 프로세스간 통신이 빠르지만 동기화 문제 발생 가능
약결합 시스템(분산 메모리 구조)
- 각 프로세스가 독립적인 메모리를 가짐
- 메시지 전달을 통해 통신
프로세스 간의 관계
독립 프로세스
- 다른 프로세스와 상태 및 데이터를 공유하지 않음
- 실행 결과는 입력에 의해서만 결정됨
- 결정적: 같은 입력이면 동일한 결과
- 재생 가능: 언제 실행해도 결과 동일
협력 프로세스
- 다른 프로세스와 상호작용하며 데이터를 공유
- 실행 순서에 따라 결과가 달라질 수 있음
- 비결정적: 실행 순서에 따라 결과 변동
- 재생 불가능: 같은 입력이어도 실행 순서가 다르면 결과 달라질 수 있음
협렵 프로세스의 병행성 문제
- 상호배제
- 두 개 이상의 프로세스가 동시에 임계영역을 실행하지 못하도록 하는 것
- 임계영역: 동시에 접근하면 안 되는 공유 자원(메모리, 파일 등)을 사용하는 코드 영역
- 동기화
- 여러 프로세스가 올바른 순서로 실행되도록 조정하는 것
- 예: 생산자-소비자 문제 (생산자가 먼저 데이터를 만들어야 소비자가 사용 가능)
- 통신
- 프로세스들이 데이터를 교환하는 메커니즘
- IPC (Inter-Process Communication)
- 공유 변수: 변수를 통해 직접 데이터 공유
- 메시지 전달: 메시지를 주고받으며 통신
세마포어 (semaphore)
- 상호배제와 동기화 문제를 해결하기 위한 도구
- 공유 변수(정수 값)와 두 가지 연산(P, V)으로 동작
- 상호배제와 동기화 문제 해결에 사용됨
세마포어의 특징
- 정수형 변수를 사용하여 프로세스 간 접근 제어
- 저장 값:
- 사용 가능한 자원의 개수 또는 잠김(locked) / 풀림(unlocked)의 상태를 나타냄
- 0 이상의 정수 값으로 초기화됨
- P, V 연산을 통해 원자적으로 조작됨
- 원자적(Atomic) → 한 번 실행되면 중간에 끼어들 수 없음
세마포어 연산 (P, V))
P연산 (Proberen, Test)
자원을 사용해도 되는지 검사하고 가능하면 사용하도록 감소시키는 연산
- 세마포어 값(S) 확인
- S > 0 이면 S = S - 1 (자원을 사용)
- S = 0 이면 자원이 없으므로 대기 상태
예제)
- 자원이 3개 (S = 3) 일 때, P 연산을 호출하면 하나 감소됨
- S = 0 인경우 프로세스틑 블록(대기)상태에 들어감
P(S) 실행 → S = 2
P(S) 실행 → S = 1
P(S) 실행 → S = 0 (더 이상 자원 없음, 다음 요청은 대기)
V연산 (Vehogen, Signal)
자원을 사용이 끝나면 반납하고 다른 프로세스를 깨우는 연산
- 세마포어 값(S)을 증가시킴(S = S + 1)
- 대기중인 프로세스가 있으면 깨움
예제)
- S = 0 인 상태에서 V(S) 호출시
V(S) 실행 → S = 1 (자원 하나가 사용 가능해짐)
세마포어를 이용한 상호배제 구현
semaphore S = 1; // 초기값 1
void critical_section() {
P(S); // 자원 사용 (락)
// 여기가 임계영역
V(S); // 자원 반납 (언락)
}
- P(S) 실행 → S = 0이 되어 다른 프로세스는 대기
- V(S) 실행 → S = 1이 되어 다른 프로세스가 실행 가능
'CS > 운영체제' 카테고리의 다른 글
메모리 관리와 가상 메모리 (0) | 2025.04.29 |
---|---|
교착상태(Deadlock) (0) | 2025.04.16 |
병행 프로세스(2) - 생산자-소비자, 판독기-기록기, IPC (0) | 2025.03.31 |
프로세스 스케줄링 (0) | 2025.03.16 |
운영체제의 소개 & 프로세스와 쓰레드 (0) | 2025.02.27 |