Search
🏫

[운영체제] 4. 병행 프로세스 (1)

[운영체제] 14. 운영체제 보안
CS
Operation System
2023/06/0712:24
[운영체제] 14. 운영체제 보안
CS
Operation System
2023/06/0712:24

1. 병행 프로세스의 개요

1.1. 병행성과 병행 프로세스

병행성 (concurrency)
여러 프로세스 또는 스레드가 동시 수행되는 시스템의 특성
같은 시간에 여러 프로세스가 동시에 수행되는 것 처럼 보이는 것
동시성
병행 프로세스
동시에 수행되는 여러개의 프로세스 또는 스레드

1.2. 병행 프로세스의 실행 형태

CPU 종류에 따라
1개의 CPU: 인터리빙 형식
하나의 CPU가 하나의 프로세스 처리
여러개의 CPU: 병렬 처리 형식
멀티프로세스 세스템에서의 메모리 구조에 따라
강결합 시스템 (공유 메모리)
약결합 시스템 (분산 메모리 구조)

1.3. 프로세스 간의 관계

독립 프로세스
수행 중인 다른 프로세스에 영향을 주지도 받지도 않음
데이터 및 상태를 다른 프로세스와 공유하지 않음
프로세스의 실행
결정적: 실행결과는 입력에 의해서만 결정
재생 가능: 같은 입력에 대해 항상 동일한 실행 결과
협력 프로세스
수행 중인 다른 프로세스와 영향을 주고 받음
데이터 및 상태를 다른 프로세스와 공유
프로세스의 실행
비결정적: 실행결과는 실행순서에 좌우됨
재생 불가능: 같은 입력에 대해 항상 동일한 실행 결과를 보장하지 못함

2. 병행성 문제

2.1. 병행성 문제

협력 프로세스의 경우 발생 가능한 문제
상호 배제
동기화
통신

2.2. 상호 배제

2개 이상의 프로세스가 동시에 임계영역을 수행하지 못하도록 하는것
임계영역
2개이상의 프로세스가 동시에 사용하면 안되는 공유자원을 액세스하는 프로그램 코드 영역
임계영역이 상호배제가 될 수 있도록 잘 처리해줘야 함
예시)

2.3. 동기화

2개 이상의 프로세스에 대해 처리순서를 결정하는 것
프로세스 동기화
상호배제도 임계영역에 대한 동기화 문제라고 볼 수 있음

2.4. 통신

프로세스들이 데이터를 공유하기 위해 반드시 필요
프로세스 간 통신 (IPC)
통신 방법
하나의 변수 사용
메세지를 서로 주고 받음

3. 세마포어

3.1. 세마포어 (semaphore)

상호배제와 동기화 문제를 해결하기 위한 도구
Dijkstra가 제안
정수형 공용 변수
저장 값: 사용가능한 자원의 수 또는 잠김이나 풀림의 상태
기본적으로 초기화 필요
상황에 맞춰 0 이상인 정수로 초기화
두 기본 연산 PV에 의해서만 사용됨
기본연산: 인터럽트되지 않고 하나의 단위로 처리됨
연산 P
검사, 감소시키려는 시도
void P (semaphore s) { if (s > 0) s--; else 현재 프로세스를 대기시킴; }
Shell
복사
연산 V
증가
void V (semaphore s) { if (대기중인 프로세스 없음) s++; else 대기중인 프로세스 1개 진행; }
Shell
복사
세마포어마다 대기 큐 필요

3.2. 상호배제 해결

상호 배제를 위한 일반적인 요구사항
오직 한 프로세스가 임계영역 수행 중
다른프로세스는 임계영역에 진입해서는 안됨
임계영역 수행 중이던 프로세스가 임계영역 벗어남
누군가 하나는 임계영역을 새로이 수행할 수 있어야 함
임계영역 진입 못하고 대기하는 프로세스
적절한 시간 내에 임계영역 수행을 시작할 수 있어야 함
상호 배제를 위한 임계영역 주변의 코드 영역
진입 영역
임계영역에 대한 수행을 해도 되는지 체크
해제 영역
다른 프로세스가 임계영역 수행을 시작할 수 있도록 함
세마 포어 이용
세마포어 mutex 초기값은 1
진입영역: P (mutex) - 진입영역에 연산 P를 둠
해제영역: V (mutex) - 해제영역에 연산 V를 둠
대기 큐는 FIFO로 동작
예시 코드

3.3. 동기화 해결

상황
프로세스 A가 코드 S1을 수행한 후, 프로세스 B가 코드 S2를 수행하도록 동기화
세마포어 sync 초기 값은 0
예시 코드