동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고받는다.
이 과정에서 자원의 일관성을 보장해야 한다. (= 프로세스들의 동기화를 고려해야 한다)
Q. 동기화란?
: 공동의 목적을 위해 동시에 수행되는 프로세스
(ex. 워드 프로세서 프로그램 - 맞춤법 검사 프로세스, 입력 내용을 화면에 출력하는 프로세스...)
-> 올바른 수행을 위해 프로세스들은 아무렇게나 실행되지 않고 동기화되어야 한다.
1) 동기화의 의미
(1) 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
> reader writer problem
Writer - Book.txt 파일에 값을 저장하는 프로세스
Reader - Book.txt 파일에 저장된 값을 읽어들이는 프로세스
-> Reader와 Writer 프로세스는 무작정 실행되어선 안된다.
Writer의 실행이 있어야 Book.txt안에 값이 존재하여 Reader의 실행이 가능
(2) 상호배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기
> Band account problem
현재 계좌 잔액 : 10만원
프로세스 A - 현재 잔액에 2만원을 추가하는 프로세스
프로세스 B - 현재 잔액에 5만원을 추가하는 프로세스
-> 무작정 동시에 실행 될 경우 예상 17만원이 아닌 15만원이나 12만원 등 엉뚱한 값이 나옴
> Producer & Consumer problem
Producer - 물건을 계속 생산하는 생산자
Consumer - 물건을 계속 소비하는 소비자
'총합'이라는 변수를 공유하는 상태이다
-> 이 상태에서 생산자를 100,000번, 소비자를 100,000번 실행하면 총합은?
=> 동시에 접근해서는 안되는 자원(총합)에 동시에 접근해서 발생한 문제
2) 공유자원과 임계구역
(1) 공유자원 : 여러 프로세스 혹은 스레드가 공유하는 자원 (ex. 전역변수, 파일, 입출력장치, 보조기억장치...)
(2) 임계구역 : 동시에 발생하면 문제가 발생하는 자원에 접근하는 코드 영역 (ex. 위 예시의 '총합', '잔액')
- 임계구역에 진입하고자 하면 진입한 프로세스 이외에는 대기해야 한다.
-> 임계구역에 동시에 접근하면 자원의 일관성이 깨질 수 있다
=> 이를 '레이스 컨디션'이라고 한다.
(3) 운영체제가 임계구역 문제를 해결하는 세 가지 원칙 (= 상호배제 동기화를 위한 세 가지 원칙)
a. 상호배제 : 한 프로세스가 임계구역에 진입했다면 다른 프로세스는 들어올 수 없다.
b. 진행 : 임계구역에 어떤 프로세스라도 진입하지 않았다면 집입하고자 하는 프로세스는 들어갈 수 있어야 한다.
c. 유한대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계구역에 들어올 수 있어야 한다.
(무한정 대기해서는 안된다)
'CS 공부' 카테고리의 다른 글
[CS] {운영체제} 메모리 관리 방식 (1) | 2025.05.03 |
---|---|
[CS] {운영체제} 교착상태(데드락) (0) | 2025.04.25 |
[CS] {운영체제} CPU 스케줄링 (0) | 2025.04.21 |
[CS] {운영체제} 프로세스와 스레드 (0) | 2025.04.19 |
[CS] {운영체제} 운영체제란? (0) | 2025.04.16 |