Chapter 12. 프로세스 동기화
목표
- 동기화란 무엇인지 알아본다.
- 공유 자원과 임계 구역 문제를 이해한다.
- 임계 구역 문제를 해결하기 위한 동기화 기법들을 학습한다.
01. 동기화란
1. 돟기화해야하는 이유
- 프로세스들은 동시다발적으로 실행되기 때문에, 실행 순서와 자원의 일관성을 보장해야 함
2. 프로세스 동기화
- 프로세스들 사이 수행시기를 맞추는 것
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행 ex. 특정 조건이 만족되어야만 실행을 이어나갈 수 있도록 하는 등
- 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근 ex. 통장에 입금 시, 잔액에 동시에 한 프로세스만 접근 가능하도록 함
3. 생산자와 소비자 문제
- 생산자와 소비자가 있고 둘 다 총합에 접근하려고 할 때, 총합에 동시에 한 프로세스만 접근 가능하도록 해야 오류가 발생하지 않음 ex. 만들어지지도 않은 물건을 사려고 하는 소비자
4. 공유 자원 shared resource
- 프로세스들이 공유하는 공동의 자원 ex. 전역 변수, 파일, 입출력장치, 보조기억장치 등
5. 임계 구역 critical section
- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
- 두 개 이상의 프로세스가 임계 구역 진입 시, 둘 중 하는 대기했다가 선 진입한 프로세스의 작업이 끝나면 그때 진입함
6. 레이스 컨디션 race condition
- 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우
7. 상호 배제를 위한 동기화
- 두 개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리하는 것
- 상호 배제 : 한 프로세스가 임계 구역에 진입했다는 다른 프로세스는 임계 구역에 들어올 수 없음
- 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 함
- 유한 대기 : 임계 구역에 들어오기 위해 프로세스가 무한정 대기해서는 안됨
02. 동기화 기법
1. 뮤텍스 락 Mutex lock : MUTual EXclusion lock
- 동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 만드는 도구 = 상호 배제를 위한 동기화 도구 ex. 탈의실의 자물쇠
- 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
2. acquire 함수
- 프로세스가 임계 구역에 진입하기 전에 호출하는 함수
- 임계 구역이 잠겨 있다면 열릴 때까지(lock = false가 될 때까지) 반복적으로 임계 구역을 확인
- 임계 구역이 열려 있다면 임계 구역을 잠금(lock = true)
- 바쁜 대기busy wait : 쉴 새 없이 반복하며 lock을 확인
3. release 함수
- 임계 구역에서의 작업이 끝나고 호출하는 함수
- 잠긴 임계 구역을 여는, lock을 false로 바꾸는 함수
4. 세마포 semaphore
- 공유 자원이 여러 개 있는 상황에도 적용이 가능한 동기화 도구
- 이진 세마포binary semaphore : 뮤텍스 락과 비슷한 개념
- 카운팅 세마포 counting semaphore : 여러 공유 자원을 다룰 수 있음
- 전역 변수 S : 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)
- wait 함수 : 임계 구역에 들어가도 되는지 알려줌 = P, down
- signal 함수 : 임계 구역 앞에서 기다리는 프로세스에게 진입 가능 신호를 줌 = V, up
5. 모니터
- 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리함
- 프로세스는 무조건 인터페이스를 통해서만 공유 자원에 접근하도록 함
- 조건 변수 condition variable : 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수
Chapter 13. 교착 상태
목표
- 교착 상태가 무엇인지 이해한다.
- 교착 상태는 어떤 상황에서 발생하는지 이해한다.
- 교착 상태를 예방하고, 회피하고, 검출하는 방법에 대해 학습한다.
01. 교착 상태란
1. 교착 상태 deadlock
- 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상
2. 자원 할당 그래프 resource-allocation graph
- 어떤 프로세스가 어떤 자원을 사용하고 있고, 어떤 자원을 기다리고 있는지 표현하는 간단한 그래프
- 규칙
- 프로세스는 원으로, 자원을 종류는 사각형으로 표현
- 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현
- 프로세스가 어떤 자원을 할당받아 사용 중일시 자원에서 프로세스를 향해 화살표로 표시
- 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표 표시
3. 교착 상태 발생 조건
- 상호 배제, 점유와 대기, 비선점, 원형 대기와 같은 네 가지 조건이 모두 만족할 때 발생함
4. 상호 배제 mutual exclusion
- 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없음
5. 점유와 대기 hold and wait
- 이미 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태
6. 비선점 nonpreemptive
- 다른 프로세스의 자원을 강제로 빼앗지 못함
7. 원형 대기 circular wait
- 프로세스들이 원의 형태로 자원을 대기하는 것
02. 교착 상태 해결 방법
1. 교착 상태 deadlock
- 운영체제는 예방, 회피, 검출 후 회복을 통해 교착 상태를 해결
2. 교착 상태 예방
- 프로세스들에 자원을 할당할 때 상호 배제, 점유와 대기, 비선점, 원형 대기 중 하나의 조건이라도 만족시키지 않도록 할당
- 교착 상태가 발생하지 않음을 보장할 수는 있지만, 여러 부작용이 존재함
3. 교착 상태 회피
- 교착 상태가 발생하지 않을 정도로만 조심히 자원을 할당하는 방식
-> 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주
- 안전 순서열 safe sequence : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
- 안전 상태 safe state : 교착 상태 없이 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태, 안전 순서열이 존재하는 상태
- 불안전 상태 unsafe state : 교착 상태가 발생할 수도 있는 상황, 안전 순서열이 존재하지 않는 상태
4. 교착 상태 검출 후 회복
- 교착 상태 발생을 인정하고 사후에 조치하는 방식
- 선점을 통한 회복 : 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
- 프로세스 강제 종료를 통한 회복 : 교착 상태에 놓인 모든 프로세스를 강제 종료하는 방식, 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료하는 방식이 존재
- 타조 알고리즘 ostrich algorithm : 교착 상태를 아예 무시하는 방법, 드물게 발생하는 잠제적 문제를 무시로 대처
'공부 > TIL' 카테고리의 다른 글
[SQL 첫걸음] 1장 02강 다양한 데이터베이스 (0) | 2023.11.02 |
---|---|
[SQL 첫걸음] 1장 01강 데이터베이스 (0) | 2023.11.01 |
한입 크기로 잘라 먹는 타입스크립트 : 함수와 타입 (0) | 2023.09.15 |
[혼자 공부하는 컴퓨터구조+운영체제] Chapter 10 - 11 (0) | 2023.09.09 |
[혼자 공부하는 컴퓨터구조+운영체제] Chapter 8 - 9 (0) | 2023.09.02 |