CS 공부

[CS] {운영체제} 동기화

ogh4554 2025. 4. 22. 23:13

동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고받는다.

이 과정에서 자원의 일관성을 보장해야 한다. (= 프로세스들의 동기화를 고려해야 한다)

 

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. 유한대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계구역에 들어올 수 있어야 한다.

    (무한정 대기해서는 안된다)