[5주차] Chapter 12. 동기화, 뮤텍스 락, 세마포, 모니터
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. ① 상호 배제, ② 실행 순서 제어