프로세스 동기화의 의미
공동의 목적을 위해 동시에 수행되는 프로세스들은 올바른 수행을 위해 동기화되어야 한다
프로세스 동기화는 프로세스들의 수행 시기를 맞추는 것을 의미한다
추가로, 실행의 문맥을 갖는 모든 대상은 동기화 대상이기에 스레드도 동기화 대상이다
하지만 편의상 프로세스 동기화라고 표현하며
이는 프로세스 동기화와 스레드 동기화를 모두 포함한 의미이다
프로세스 동기화의 종류
1_ 실행 순서 제어를 위한 동기화: 프로세스를 올바른 순서대로 실행하기
2_ 상호 배제를 위한 동기화: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
실행 순서 제어를 위한 동기화
실행 순서 제어를 위한 동기화가 지켜지지 못한 대표적인 예시로는
- 예제: Reader Writer problem
Writer: xxx.txt 파일에 값을 저장하는 프로세스
Reader: xxx.txt 파일에 저장된 값을 읽어들이는 프로세스
두 프로세스가 무작정 동시에 실행되면 안됨
Reader 프로세스는 xxx.txt 파일에 값이 존재한다는 특정 조건이 만족되어야만 실행 가능
상호 배제를 위한 동기화
공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화
한 번에 하나의 프로세스만 접근해야 하는 자원에 동시 접근을 피하기 위한 동기화
상호 배제를 위한 동기화가 지켜지지 못한 대표적인 예시로는
아래의 두 예시가 있다
- 예제: Bank account problem
- 예제: Producer & Consumer problem
물건을 계속해서 생산하는 생산자 (producer, 프로세스 혹은 스레드)
물건을 계속해서 소비하는 소비자 (consumer, 프로세스 혹은 스레드)
'총합' 변수 공유
이 상태에서 생산자를 100,000번, 소비자를 100,000번 실행하면 '총합'은
때로는 0과 다른 값이 되거나, 오류가 발생하기도 한다
그 이유는
동기화가 되지 않았기 때문에 발생한 문제이며
동시에 접근해서는 안 되는 자원(총합)에 동시에 접근해서 발생한 문제
공유 자원과 임계 구역
공유 자원: 여러 프로세스 혹은 스레드가 공유하는 자원
ex. 전역 변수, 파일, 입출력장치, 보조기억장치,...
임계 구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
ex. 앞선 예시의 '총합' 변수, '잔액' 변수,...
임계 구역에 진입하고자 하면 진입한 프로세스 이외에는 대기해야 한다
만약, 임계 구역에 동시에 접근하려고 하면 문제가 발생한다
이처럼 임계 구역에 동시에 접근하면 자원의 일관성이 깨지고 상태가 발생하고
이러한 상태를 레이스 컨디션(race condition)이라고 한다
운영체제가 임계 구역 문제를 해결하는 세 가지 원칙
(상호 배제를 위한 동기화를 위한 세가지 원칙)
1. 상호 배제 (mutual exclusion)
한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다
2. 진행 (progress)
임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다
3. 유한 대기 (bounded waiting)
한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다
임계 구역에 들어오기 위해 무한정 대기는 없어야 한다
'CS > [혼자 공부하는] 운영체제' 카테고리의 다른 글
5-1] 교착상태: 교착 상태란 (0) | 2023.06.07 |
---|---|
4-2] 프로세스 동기화: 동기화 기법 (0) | 2023.06.07 |
3-2] CPU 스케줄링: CPU 스케줄링 알고리즘 (0) | 2023.06.06 |
3-1] CPU 스케줄링: CPU 스케줄링 개요 (0) | 2023.06.05 |
2-3] 프로세스와 스레드: 스레드 (0) | 2023.06.05 |