IT

혼공단 5주차 (1) 프로세스 동기화 (책 챕터12, 유투브 33강~34강)

BoBooBoo 2023. 2. 12. 21:48
반응형

 

 

목차

Chapter 12. 프로세스 동기화

12-1. 동기화란

12-2. 동기화 기법

 

 

선택 미션

Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기

 

 

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

이 과정에서 자원의 일관성을 보장 (동기화) 해야 한다.

 

동기화

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

 

 

실행 순서 제어

  • 프로세스를 올바른 순서대로 실행

 

Reader Writer problem

파일에 값을 쓰는 프로세스와 읽는 프로세스는 동시에 실행되더라도 writer 가 선행되어야 함

쓴 값이 있어야 읽을 값이 있음

 

 

상호 배제 

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

 

Bank Account problem

계좌의 잔액은 하나의 프로세스만 접근해야 함

e.g. 잔액이 10원인데 여러 프로세스가 동시에 10원을 출금하는 것을 막아야 함

 

 

동기화 예제: Producer & Consumer problem

Producer : 생산자. 물건을 계속해서 생산

Consumer : 소비자. 물건을 계속해서 소비

'총합' 이라는 변수를 공유 (공유 자원)

 

문제. 100,000번 (혹은 그 이상) 실행하면 어떻게 될까? 총합은 0 ?

 

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

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

임계 구역에 동시에 접근하면 자원의 일관성이 깨짐 Race Condition

 

 

 

임계 구역 문제를 해결하는 3가지 원칙

 

(1) 상호 배제 Mutual Exclusion

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

 

(2) 진행 Progress

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

 

(3) 유한 대기 Bounded Waiting

한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다. 임계 구역에 들어오기 위해 무한정 대기해서는 안된다.

 

 

 

Mutex Lock

상호 배제를 위한 동기화 도구 (자물쇠 역할)

공유 자원이 하나만 있다는 가정 하에 사용하기 좋음

단순한 형태 : 전역 변수 lock, 임계 구역을 잠그는 acquire 함수, 임계 구역 잠금을 해제하는 release 함수

acquire 의 구현 중 while (lock==true);바쁜 대기 (busy waiting) 상태에 빠져서 좋은 방법은 아님

대부분의 언어는 이미 구현되어 있는 mutext 함수가 있음

 

acquire();
// Critical Section 
release();

 

Semaphore, 세마포

좀 더 일반화된 방식의 동기화 도구

공유 자원이 여러 개 있는 경우에도 적용 가능

이진 세마포, 카운팅 세마포 등이 있음

 

 

반응형