02. 프로세스 관리
06. 모니터
1) 모니터
- 세마포어를 실제 구현한 프로그램
- 모니터는 프로세스들이 사용할 수 있는 공유 자원 혹은 공유 자원 그룹을 할당하는 데 사용함
- 데이터 및 프로시저를 포함하는 병행성 구조
2) 모니터의 특징
- 모니터 내의 자원을 원하는 프로세스는 반드시 해당 모니터의 진입로(Entry)를 호출해야 함
- 모니터 외부의 프로세스는 모니터 내부의 데이터를 직접 액세스할 수 없음
- 자료 추상화와 정보 은폐의 개념을 기초적으로 사용함
- 스위치 개념을 사용하여 한순간에 하나의 프로세스만이 모니터에 진입할 수 있음
- 스위치 개념
- 프로세스들이 동시에 자원을 점유하지 못하도록 하는 것으로 사용 중이면 스위치가 꺼져 있고 사용 중이 아니면 스위치가 켜져 있는 개념
- 스위치 개념
- 모니터에서 사용되는 연산은 Wait와 Signal이 있음
- 모니터의 경계에서 상호배제가 시행됨
07. 교착상태(DeadLock)
1) 교착상태
- 복수의 프로세스가 가능하지 못한 상태를 무한정 기다리고 있는 상태
- 두 개 이상의 프로세스가 하나의 자원을 공유하여 사용하고 있을 때 서로가 사용할 자원을 요구하지만 요구를 영원히 들어줄 수 없는 상태
2) 교착상태가 발생할 필요 충분 조건 4가지
- 상호배제(Mutual Exclusion)
- 프로세스들은 필요로 하는 자원에 대해 배타적인 통제권을 가짐
- 임계구역을 두 개 이상의 프로세스가 동시에 접근하지 못하도록 하는 과정에서 발생할 수밖에 없음
- 비선점(Non Preemption)
- 프로세스가 소유하고 있는 자원은 다른 프로세스에 의해 선점 될 수 없음
- 하나의 프로세스가 공유 자원을 사용하는 중에 중단되었을 때, 중단된 프로세스를 선점할 수 없기 때문에 발생할 수밖에 없음
- 환형 대기(Circular Wait, 순환 대기)
- 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음
- 환형 상태의 교착상태처럼 서로 물고 물리는 상황 때문에 발생할 수밖에 없음
- 점유와 대기(Hold and Wait)
- 프로세스는 할당된 자원을 가진 상태에서 다른 자원을 기다림
- 점유한 프로세스, 대기하는 프로세스가 존재하는 한 교착상태가 발생할 수밖에 없음
3) 교착상태 해결 방안
- 교착상태는 필요악으로, 운영체제에서 교착상태가 발생하지 않도록 할 수 있음
- 하지만 제한된 자원에서 여러 개의 프로세스가 운영되는 상황에서는 당장 사용하지 않는 자원을 다른 프로세스가 사용하도록 해야 컴퓨터 시스템을 효율적으로 사용할 수 있음
- 따라서 교착상태를 인정하되 가능한 발생하지 않도록 피해가는 쪽으로 운영함
- 교착상태 해결 방안은 교착상태 예방(Prevention), 교착상태 회피( Avoidance), 교착상태 발견(Detection), 교착상태 회복(Recovery)으로 교착상태가 발생 또는 유지되지 않도록 하는 방법, 즉 교착상태가 발생할 필요 충분 조건 4가지를 부정하는 것
4) 교착상태 예방(Prevention)
- 상호배제 부정
- 상호배제를 하지 않는 시스템으로 구축함
- 공유 자원은 동시에 접근이 허용되므로 컴퓨터 시스템의 신뢰성은 보장할 수 없음
- 비선점 부정
- 선점을 인정하는 것으로 언제든 실행 중인 프로세스나 공유 자원을 중단하거나 빼앗을 수 있게 함
- 교착상태 예방 방법으로 가장 현실적으로 실현 가능한 방식
- 점유와 대기 부정
- 각 프로세스는 한 번에 자신에게 필요한 모든 자원을 요구해야 하며, 이 요구가 만족 되지 않으면 작업을 진행할 수 없음
- 어떤 자원을 갖고 있는 프로세스가 더 이상 요구가 수용되지 않으면 원래 갖고 있던 자원을 일단 반납하고 필요하다면 다시 그 자원이나 다른 자원을 요구해야 함
- 환형 대기 부정
- 환형 상태를 선형 대기 상태로 변환하는 것으로 모든 자원을 선형 순서로 분류함
- 프로세스는 자신이 가지고 있는 자원 앞과 뒤의 순서에 있는 자원들을 자유롭게 요청하지 못하게 함
- 모든 프로세스에 각 자원 유형별로 할당 순서를 부여함, 즉 만일 한 프로세스가 주어진 유형의 자원을 할당 받았으면, 그 프로세스는 순서에 따라 나중에 위치하는 유형의 자원만을 요구할 수 있게 함
5) 교착상태 회피(Avoidance)
- 프로세스가 자원을 요구할 때 시스템이 안전 상태를 유지할 수 있는 프로세스의 자원 요구만을 할당하여 주는 방안으로 자원 분배를 교착상태가 발생하지 않는 범위 내에서 하는 방안
- 교착상태 회피 방안으로 사용하는 알고리즘에는 Dijkstra가 제안한 기법인 은행원 알고리즘이 가장 대표적
6) 교착상태 발견(Detection)
- 컴퓨터의 중단 원인이 교착상태인지 아니면 다른 이유인지를 파악하는 방안
- 자원들과 프로세스들을 인접 행렬로 표현하여 파악함
7) 교착상태 회복(Recovery)
- 교착상태 회복
- 교착상태를 회복하기 위해서 교착상태가 발생한 프로세스 중에 희생양을 정하는 일
- 희생양이 정해지면 그 프로세스를 잠시 중단시키고 점유하고 있떤 자원을 빼앗음
- 프로세스를 제거(Kill)할 희생양을 정하는 기준
- 우선순위가 낮은 프로세스를 선택하여 제거함
- 처리된 진행상태가 적은 프로세스를 선택하여 제거함
- 자원을 적게 사용하고 있는 프로세스를 선택하여 제거함
- 기아 상태나 문제가 있는 프로세스를 제거함
- 정상 수행이 불가능한 모든 프로세스를 제거하고 다시 시작함
8) 은행원(Banker's) 알고리즘
1. 은행원 알고리즘(Banker's Algorithm)
- 대출 업무를 보는 은행원과 교착상태를 피해가는 방법이 유사하여 개발된 기법
- 은행원은 적은 돈을 가지고 많은 사람에 대출해주고 그 이자를 받는 것이 목적
- 운영체제도 제한된 자원을 가지고 많은 프로세스에 자원을 나눠주는 것이 목적
2. 은행원과 운영체제 비교
| 은행 | 운영체제 |
|---|---|
| 은행 보유금액 | 컴퓨터 시스템의 총 자원 수 |
| 은행원 | 운영체제 |
| 고객 | 프로세스 |
| 대출금액 | 프로세스가 현재 사용하고 있는 자원 수 |
| 대출한도 | 프로세스가 완료될 때까지 필요한 자원 수 |
| 불안전 상태 | 교착상태가 될 수 있는 상태 |
| 안정 상태 | 교착상태의 우려가 없는 상태 |
| 은행 부도 | 교착상태 |
- 고객이 대출한도를 모두 사용했다는 것은 프로세스가 완료되었다는 것을 의미함
- 프로세스가 완료됐다면 사용 중인 자원이 모두 반납되므로 보유한 자원의 수가 늘어남
3. 은행원 알고리즘의 특징
- Dijkstra가 제안한 기법
- 불안전 상태와 안전 상태로 구분함
- 안전 상태에서는 교착상태가 발생하지 않음
- 이 방법을 적용하기 위해서는 자원의 양이 일정해야 함
- 이 방법을 적용하기 위해서는 사용자의 수가 일정해야 함
- 모든 요구를 유한 시간 안에 할당하는 것을 보장해야 함
- 응답 시간의 예측이 필요한 대화식 프로그램에는 적용할 수 없음
