5주차 ((1/29 ~ 2/4)
chapter. 12 : 프로세스 동기화
chapter. 13 : 교착 상태
✅ 동기화란?
✅ 공유자원 및 임계구역
✅ 임계구역 문제 해결을 위한 기법
동기화란(Synchronization)?
여러 프로세스들이 동시에 실행 중인 상황에서 프로세스들 사이의 수행 시기를 맞추는 것
수행시기를 맞춘다
1. 프로세스를 올바른 순서대로 실행하기 ➡️ 실행 순서 제어
2. 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기 ➡️ 상호 배제
📌 공유자원 (shared resource)
프로세스들이 공동으로 사용하는 자원을 공유자원이라 하고, 이 공유 자원에 두 개이상의 프로세스들이 동시에 실행되면 문제가 발생한다.
📌 임계구역 (critical section)
상호배제를 위한 동기화 원칙
🔗 개인적으로 '동기화가 어떤 순서로 이루어 질까'에 대해 생각해 보았다.
1. 임계구역 진입 전에 임계구역 사용중인지 확인
2. 비어있으면 -> 진입해서 프로세스 실행
3. 사용중이면 -> 대기 후 진입
이때
✔️임계구역 사용중인지 비었는지 어떻게 알 수 있나?
이 부분이 중요하지 않을까 생각했다.
✔️ 임계구역 사용중인지 비었는지 어떻게 알 수 있나? ➡️ 자물쇠(lock) 이용
자물쇠 열림 -> 진입
자물쇠 잠긴 -> 대기
뮤텍스락은 하나의 전역변수와 두개의 함수로 구현할 수 있음
acquire(); // 자물쇠 잠겨있는지 확인, 잠겨 있지 않다면 잠그고 들어가기
//임계 구역 진입 (공유자원인 lock 변수에 접근)
release(); //자물쇠 반환
✔️ 임계구역 사용중인지 비었는지 어떻게 알 수 있나? ➡️ 신호(세마포) 이용
'가도 좋다' 신호 -> 진입
'멈춤' 신호 -> 대기
세마포는 하나의 변수와 두 개의 함수로 구현할 수 있음
wait() ;
//임계구역
signal()
세마포도 그 자체로 훌륭한 프로세스 동기화 도구이지만, 조금 불편한 점이 있다.
매번 임계 구역에 앞뒤로 일일이 wiat와 signal함수를 명시하는 것이 번거롭다.
그래서 등장한 것이 모니터
공유자원과 공유자원에 접근하기 위한 인터페이스(통로)를 묶어서 관리하여 프로세스는 반드시 인터페이스를 통해 공유자원에 접근
모니터는 공유 자원을 다루는 인터페이스에 접근하기 위한 큐(모니터에 진입하기 위한 큐)를 만들고
모니터 안에 항상 하나의 프로세스만 들어오도록 하여 상호 배제를 위한 동기화를 제공합
실행 순서 제어를 위한 동기화위해 조건변수 사용한다.
✔️ 임계구역 사용중인지 비었는지 어떻게 알 수 있나?
대기큐에 프로세스 대기 시켜서 하나씩 임계구역에 진입할 수 있도록 한다.
p. 363의 확인 문제 1번 풀고 인증하기
정답 : 4
세마포를 이용하면 바쁜대기를 보완해서 대기 상태 접어들게 할 수도 있다.
Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기
본문에서 정리함