Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
Computer Science/운영체제

7. 동기화(synchronization)

by Toughie 2023. 9. 2.

🖥️ 동기화 🖥️ 

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

이 과정에서 '자원의 일관성 보장'이 필요하다.

 

동기화란?

공동의 목적을 위해 동시에 수행되는 프로세스

ex. 워드 프로세스 프로그램

- 맞춤법 검사 프로세스

- 입력 내용을 화면에 출력하는 프로세스

 

'프로세스들의 수행 시기를 맞추는 것'

1. 실행 순서 제어

- 프로세스를 올바른 순서대로 실행하기

2. 상호 배제

- 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기

 

* 실행 문맥을 갖는 모든 대상은 동기화 대상이기 때문에 스레드도 당연히 동기화의 대상임.

 

실행 순서 제어를 위한 동기화(reader writer problem)

읽기 프로세스와 쓰기 프로세스는 아무렇게나 실행되어서는 안 된다. '실행의 순서가 있기 때문'

읽기 프로세스는 '파일 안에 값이 존재한다.'라는 특정 조건이 만족되어야만 실행이 가능하기 때문.

 

상호 배제를 위한 동기화(Bank account problem)

- 공유가 불가능한 자원동시 사용을 피하기 위한 동기화

' 한 번에 하나의 프로세스만 접근해야 하는 자원'에 '동시 접근을 피하기 위한 동기화'

동기화 없이 실행된다면.. 아래와 같은 불상사가

프로세스 A의 작업이 끝나기 전에(저장까지), 프로세스 B가 잔액이라는 자원에 접근하기 때문에 발생하는 문제

Producer & Consumer problem

물건을 계속해서 생산하는 생산자(producer, 프로세스 혹은 스레드)

물건을 계속해서 소비하는 소비자(consumer, 프로세스 혹은 스레드)

'총합' 변수를 공유

총합을 10으로 초기화, 생산자를 10만번 소비자를 10만번 실행하면 총합은 얼마일까?

동기화가 되지 않았기 때문에 위와 같은 문제가 발생. 동시에 접근해서는 안되는 자원에 접근했기 때문.

 

공유자원(shared resouce)

- 여러 프로세스 혹은 스레드가 공유하는 자원 (ex. 전역 변수, 파일, 입출력장치, 보조기억장치 등)

 

임계구역(critical section)

- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역

ex. 이전 예시의 총합 변수, 잔액 변수

임계 구역에 동시에 접근하면 자원의 일관성이 깨질 수 있음.

레이스 컨디션(race condition) 경쟁상태 

고급어 -> 저급어 실행 과정 중 중간에 문맥 교환이 되어버리면 예상치 못한 결과가 나타날 수 있음.

 

운영체제가 임계구역 문제를 해결하는 세 가지 원칙 (상호 배제를 위한 동기화를 위한 세 가지 원칙)

1. 상호 배제(mutual exclusion)

- 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다. 

 

2. 진행(progress)

- 임계 구역에 어떤 프로세스도 진입하지 않았다면, 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.

 

3. 유한 대기(bounded waiting)

- 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다.

(임계 구역 진입을 위해 무한정 대기해서는 안 된다.)

 

 

학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl 

'Computer Science > 운영체제' 카테고리의 다른 글

9. 교착 상태(Dead Lock)  (0) 2023.09.02
8. 동기화 기법(뮤텍스 락, 세마포, 모니터)  (0) 2023.09.02
6. CPU 스케줄링 알고리즘  (0) 2023.08.30
5. CPU 스케줄링  (0) 2023.08.29
4. 스레드  (0) 2023.08.29