진도: Chapter 12 ~ 13
기본 미션: p. 363의 확인 문제 1번 풀고 인증하기
선택 미션: Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기
동시다발적으로 실행되는 프로세스와 스레드를 실행 순서와 자원의 일관성을 보장해야한다.
운영체제가 제공하는 동기화의 의미
예시1
동시에 실행되는 프로세스
- Book.txt 가 없다면 파일을 만들고 값을 쓰고 저장하는 프로세스
- Book.txt가 없다면 파일을 만들고 값을 쓰고 저장하는 프로세스
- Book.txt 를 읽어들이는 프로세스
- Book.txt 가 있다는 조건이 만족되어야만 실행 가능
1 → 2 순으로 실행해야만 올바르게 실행된다.
예시2
입금 프로세스
공유 자원 : 공동으로 사용하는 자원 (전역 변수, 파일, 입출력 장치, 보조기억장치 etc.)
임계 구역 : 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미. 임계 구역에 진입한 프로세스가 있다면 다른 프로세스는 임계 구역 밖에서 기다려야 한다.
레이스 컨디션 : 임계 구역을 동시에 실행하여 자원의 일관성이 깨지는 현상
임계 구역을 잠금으로써 프로세스 간의 상호 배제를 이룬다.
acquire () {
while (lock == true) // 만약 임계 구역이 잠겨있다면
; // 임계 구역이 잠겨있는지를 반복적으로 확인
lock = true; // 만약 임계 구역이 잠겨있지 않다면 임계 구역 잠금
}
release () {
lock = false; // 임계 구역 작업이 끝났으니 잠금 해제
}
공유 자원이 여러 개 있는 임계 구역 문제도 해결할 수 있는 동기화 도구이다.
wait()
//임계 구역
signal()
wait ( ) {
while ( S <= 0 ) // 만일 임계 구역에 진입할 수 있는 프로세스 개수가 0 일때
; // 사용할 수 있는 자원이 있는지 반복적으로 확인
S--; // 임계 구역에 진입할 수 있는 프로세스의 개수가 하나 이상이면 S를 1 감소시키고 임계 구역 진입
}
signal() {
S++; // 임계 구역에서 작업을 마친 뒤 S 1 증가
}
wait ( ) {
S--;
if ( S < 0 ) {
add this process to Queue; // 해당 프로세스 PCB를 세마포 큐에 삽입
sleep();// 대기 상태로 접어들기
}
}
signal() {
S++;
if ( S <= 0 ) {
remove a process P from Queue // 세마포 큐에 있는 프로세스 제거
wakeup(p); // 프로세스를 대기 상태에서 준비 상태로 만듬
}
}
세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용한다.
일어나지 않을 시간을 기다리며 무한히 대기하는 현상 의미
교착 상태가 발생하지 않을 정도로만 조금씩 자원을 할당하는 방법
교착 상태가 발생하면 그때 회복하는 방식
추가적인 내용정리는 차차 추가하겠습니다!