본 게시글은 대학 전공수업을 들으며 노션에 정리한 내용을 블로그로 옮긴 게시글 입니다.
병행프로세스
병행성 / 병행프로세스 / 세마포어
병행성(concurrency)
여러 개의 프로세스 또는 쓰레드가 동시 수행되는 시스템의 특성
병행 프로세스
동시 수행되는 여러 개의 프로세스 또는 쓰레드
실행형태
- 인터리빙 (1개의 CPU)
- 병렬처리(여러개의 CPU)
메모리 구조에 따라
- 강결합 시스템(공유메모리)
- 약결합 시스템(분산메모리)
프로세스 관계
독립프로세스
수행중인 다른 프로세스에 영향을 주지도 받지도 않음
데이터 및 상태를 다른 프로세스와 공유하지 않음
프로세스의 실행
- 결정적(결과는 입력에 의해서만 결정)
- 재생가능(같은입력 →동일한 실행결과)
협력프로세스
수행중인 다른 프로세스에 영향을 주고받음
데이터 및 상태를 다른 프로세스와 공유함
프로세스의 실행
- 비결정적(결과는 실행 순서에 좌우)
- 재생가능(같은 입력 →❌항상 동일한 실행결과❌)
⇒ 발생가능한 문제 : 상호배제, 동기화, 통신
상호배제
2개 이상의 프로세스가 동시에 임계 영역을 수행하지 못하도록 하는것
- 임계영역? : 2개 이상의 프로세스가 동시에 사용하면 안되는 공유자원을 액세스하는 프로그램 코드 영역 (ex - 한 계좌에 대하여 프로세스 A는 입금 / B는 출금이라면?)
동기화
2개 이상의 프로세스에 대한 처리 순서를 결정하는 것
상호 배제: 임계영역에 대한 동기화 문제 중 하나.\
통신
프로세스들이 데이터를 공유하기 위해 반드시 필요(IPC:프로세스간 통신)
통신 방법 (자세한 내용은 추후)
- 하나의 변수 사용
- 메세지를 서로 주고받음
세마포어(semaphore) 👷🦺
상호배제와 동기화 문제를 해결하기 위한 도구(Dijkstra 제안)
세마포어의 원리
정수형 공용변수를 이용
- 저장값: 사용 가능한 자원의 수 또는 잠김이나 풀림의 상태
- 상황에 따라 0 이상인 정수로 초기화
두 기본 연산 P와 V에 의해서 사용 (*기본연산: 인터럽트(끊김)❌, 하나의 단위로 처리)
- 연산 P(검사,감소)
void P(semaphore s) { if (s > 0) s--; else 현재 프로세스를 대기시킴; }
- 연산 V(증가)
void V(semaphore s) { if (대기 중인 프로세스 없음) s++; else 대기 중 프로세스 1개 진행; }
- 예시 코드를 보다시피, 세마포어는 도로건설 현장의 신호수👷🦺 이다!
반대 차선에 차(프로세스)가 오면 막는 역할이 P, 차를 지나가도록 하는 역할이 V이다.
일반적 요구사항
- 한 프로세스가 임계영역 수행중
- → 다른 프로세스는 임계영역에 진입해서는 안됨
- 임계 영역 수행중이던 프로세스가 임계영역을 벗어남
- → 누군가 하나는 임계영역을 새로이 수행해야 함
- 임계영역 진입 못하고 대기하는 프로세스
- → 적절한 시간 내에 임계영역 수행을 시작해야함.
동기화 해결 방법
프로세스 A가 S1을 수행한 후, 프로세스 B가 코드 S2를 수행하도록 동기화하는 문제라고 생각해보자.
순서
프로세스 A가 먼저 도착
→연산 V 실행 : s값 낮아짐
→ 연산P : 프로세스 B는 대기
→ S1수행 완료: V에 의해 깨어남
→S2 수행
만약, 프로세스 B가 S2를 먼저 처리하려고 한다고 해도,
세마포어 sync 초기값이 0이라면 P연산에 의해 대기하게 되므로 S1 → S2순으로 수행하게 된다.
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 교착 상태(정의, 필요조건, 예방, 회피, 탐지-복구) (0) | 2024.06.22 |
---|---|
[운영체제] 생산자-소비자 문제, 판독기-기록기 문제, 프로세스간 통신 (0) | 2024.06.22 |