혼자 공부하는 컴구, 운체

[5주차] Chapter 12. 동기화, 뮤텍스 락, 세마포, 모니터

털난 모짜렐라 2023. 8. 13. 18:46

Chapter 12 프로세스 동기화


12-1 동기화란

1. 동기화의 의미

동기화(synchronization)

 -프로세스 동기화 : 프로세스 간의 수행 시기를 맞추는 것. 프로세스들이 올바르게 실행되려면 반드시 필요하다.

  프로세스뿐만 아니라 스레드 또한 동기화의 대상이다.

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

 -상호 배제(mutual exclusion) : 동시에 접근하면 안 되는 자원에 하나의 프로세스만 접근하게 하기

 

2. 생산자와 소비자 문제

생산자와 소비자 문제

 -생산자와 소비자는 '총합'이라는 데이터를 공유하고, 생산자는 총합에 1을 증가시키고 소비자는 총합에서 1을 감소시킨다.

 -생산자와 소비자가 동시에 접근해서는 안 되는 자원에 동시에 접근하여 실행 후 총합이 유지되지 않고 엉뚱한 값이 나온다.

 

3. 공유 자원 과 임계 구역

공유 자원(shared resource)

 -프로세스가 공동으로 공유하는 자원, 생산자와 소비자 문제에서는 '총합'

 

임계 구역(critical section)

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

 -2개 이상의 프로세스가 임계 구역에 진입하고자 할 때, 먼저 진입한 프로세스가 완료되어야 뒤에 진입한 프로세스가 진입할 수 있다.

 

레이스 컨디션(race condition)

 -여러 프로세스가 동시에 임계 구역 코드를 실행하여 문제가 발생하는 상황

 

④ 상호 배제를 위한 동기화의 세 가지 원칙

 -상호 배제(mutual exclusion) : 임계 구역에는 하나의 프로세스만이 진입할 수 있다.

 -진행(progress) : 임계 구역에 프로세스가 아예 없을 시, 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.

 -유한 대기(bounded waiting) : 임계 구역에 진입하기 위해 무한정 대기해서는 안 된다.


확인문제

1. ① 실행 순서 제어, ② 상호 배제

2. ①, 임계 구역에서는 하나의 프로세스만 실행되어야 한다.


12-2 동기화 기법

1. 뮤텍스 락

뮤텍스 락(Mutex lock; MUTual EXclusion lock)

 -상호 배제를 위한 동기화 도구

 -동시에 접근하면 안 되는 자원에 자물쇠를 걸어 접근을 통제한다.

ex) 탈의실 자물쇠

 

② lock

 -자물쇠 역할, 프로세스들이 공유하는 전역 변수

 

acquire 함수

 -프로세스가 임계 구역에 진입하기 전에 호출하는 함수

 -임계 구역이 잠겨있다면 lock이 false가 될 때까지 반복적으로 확인, 임계 구역이 열려 있다면 lock을 true로 바꾸는 함수

 

 

release 함수

 -임계 구역에서 작업이 끝나고 호출하는 함수

 -lock을 false로 바꾸는 함수

 

바쁜 대기(busy wait)

 -lock이 false인지 쉴 새 없이 반복하며 확인하는 방식

 

2. 세마포

세마포(semaphore)

 -공유 자원이 여러 개 있는 상황에도 적용 가능한 동기화 도구

 -이진 세마포(binary semaphore) : 뮤텍스 락과 비슷한 개념

 -카운팅 세마포(counting semaphore) : 여러 공유 자원을 다룰 수 있다.

 

전역 변수 S

 -사용 가능한 공유 자원의 개수를 나타낸다.

 

wait 함수

 -프로세스가 임계 구역에 진입하기 전에 호출하는 함수

 -임계 구역에 진입할 수 있는지, 대기해야 하는지 알려주는 함수

 -(S-1)이 0 미만일 시, 해당 프로세스 상태를 대기 상태로 변경, 프로세스의 PCB를 세마포를 위한 대기 큐에 삽입

 -(S-1)이 0 이상일 시, S를 1 감소시키고 임계 구역에 진입

 

signal 함수

 -프로세스가 임계 구역에서 작업이 끝나고 호출하는 함수

 -임계 구역에서 대기 중인 프로세스에게 진입 가능 신호를 주는 함수

 -임계 구역에서 작업을 완료하고 S를 1 증가시키고, 대기 중인 프로세스를 대기 큐에서 제거하고 프로세스를 준비 상태로 변경한 뒤 준비 큐로 이동

 

⑤ 세마포를 이용하여 실행 순서 제어하기

 -S를 0으로 두고 실행할 프로세스 뒤에 signal 함수, 다음에 실행할 프로세스 앞에 wait 함수를 붙인다.

 

⑥ 세마포의 단점

 -일일이 wait와 signal 함수를 호출해야하여 번거롭고, 잘못된 호출로 문제가 생길 수도 있다.

 

3. 모니터

모니터(monitor)

 -공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어서 관리하고, 인터페이스를 통해서만 공유 자원에 접근하도록 하는 방식

 -상호 배제 동기화 : 인터페이스에 접근하고자 하는 프로세스를 큐(상호 배제를 위한 큐, 모니터에 진입하기 전 이곳에 삽입된다.)에 삽입하고 항상 하나의 프로세스만 접근을 허용한다.

 -실행 순서 제어를 위한 동기화 : 조건 변수(condition variable)를 사용하여 프로세스나 실행순서를 제어한다.

 

조건 변수

 -wait와 signal 연산을 수행할 수 있다.

 -조건 변수를 위한 큐가 따로 존재하며, 이 큐는 모니터에 삽입된 후 특정 조건이 만족될 때까지 실행 중단 된 프로세스들이 기다리는 곳이다.

 -실행 조건이 충족되지 않았을 경우 wait 함수를 통해 실행을 중단하고, 실행 조건이 충족되었다면 signal 함수가 실행을 재개시킨다.


확인문제

(기본 미션) 1. ④

2. B

3. ① 상호 배제, ② 실행 순서 제어