Q1 : 식사하는 철학자란 어떤 문제를 다루기 위한 문제 제기인가? 누가 처음 든 예이며, 이를 공식화한 사람은 누구인가? 제기된 문제와 해결하는 방법은 무엇인지 설명하라.
A1 : 병렬 처리에서의 동기화 문제와 해결 방법을 다루기 위한 문제. Edsger Dijkstra가 처음든 예이고 Prentice Hall출판사에서 공식화 하였다.
Q2 : 교착상태를 정의해보라.
A2 : 자원을 소유한 스레드들 사이에서 각 스레드는 다른 스레드가 소유한 자원을 요청하여 무한정 대기하고 있는 현상.
Q3 : 교착상태가 발생할 필요조건 4가지를 무엇이라고 하는가, 그리고 4가지의 조건은?
A3 :
상호배제 : 각 자원은 한번에 하나의 스레드에게만 할당 소유하면서 대기 : 스레드가 한 자원을 소유하면서 다른 자원을 기다리기 강제 자원 반환 불가 : 스레드에게 할당된 자원을 강제로 빼앗지 못함 환형 대기 : 한 그룹의 스레드들에 대해 각 스레드는 다른 스레드가 요청하는 자원을 소유하는 원형고리 형성
Q4 : 자원할당 그래프에서 사이클(cycle)은 무엇을 나타내는 것이며, 이 그래프가 중요한 이유는 무엇인가?
A4 : 교착상태를 나타낸다. 자원할당 그래프를 통해 교착상태를 판단하기때문에 중요하다.
Q5 : 교착상태를 다루는 방법 4가지를 간단히 기술하라. 그 중에서 가장 많이 사용되는 방법과 그 이유는 무엇인가?
A5 :
교착상태 예방 : 교착상태에 빠지는 4가지 조건중 하나 이상의 조건이 성립하지 못하도록 시스템 구성 교착상태 회피 : 자원 할당시마다 교착상태 가능성을 검사하여 교착상태가 발새아지 않을 것이라고 확신하는 경우에만 자원 할당. 교착상태 감지 및 복구 : 교착상태를 감지하는 프로그램 구동, 발견 후 교착상태 해제. 교착상태 무시 : 교착상태는 없다고 단정, 사용자가 이상을 느끼면 재실행할 것이라고 믿는 방법.
교착상태 무시가 가장 많이 사용된다. 나머지 방법들은 교착상태가 일어나지 않을대에도 시스템이 돌아가기 때문에 성능저하가 발생하기 때문이다.
Q6 : 교착상태의 예방책으로 제안된 방법의 문제점은?
A6 : 상호배제조건을 없애면 자원을 훼손할 수 있고 소유하면서 대기 조건을 없애면 자원 활용률이 떨어지고 다른 스레드는 자원을 할당 받지 못하는 대기상태가 발생한다. 강제 자원 반환 불가조건을 선점 허용으로 바꾸면 자원을 강제로 반환하게 된 스레드가 다시 자원을 사용하게되면 이전 상태로 되돌아갈 수 잇도록 관리가 필요하다는 문제점이 있다.
Q7 : 자원을 요청할 때마다 교착 상태를 탐지하는 것의 단점과 그의 해결책은?
A7 : 자원을 할당할때마다 환형대기가 발생할 것인지 판단하는 작업이 실행되는 단점이 있다. banker's 알고리즘이 있지만 비현실적인 알고리즘이다.
Q8 : 교착상태가 발생한 것을 탐지한 후 회복하는 3가지 방법을 제시해보라.
A8 :
자원 강제 선점 : 교착상태에 빠진 스레드중 하나의 자원을 강제로 빼앗아 다른 스레드에게 할당 롤백 : 교착상태가 발생하면 마지막으로 저장된 상태로 돌아감 스레드 강제 종료 : 교착상태에 빠진 스레드 중 하나를 강제 종료
Q9 : 교착상태 해결을 위해 범용 운영체제인 Unix, Linux, Windows의 기본 해결법은 무엇인가? 그리고 그렇게 하는 이유는 무엇인가?
A9 : 교착상태를 무시하는 방법인 ostrich알고리즘을 사용한다. 교착상태의 발생 가능성이 극히 적기때문에 교착상태를 피하기 위해 시스템을 만든다면 비용이 많이 들어가기때문이다. 교착상태가 발생하면 시스템을 재시작하거나 특정 스레드를 강제 종료시키는 방법으로 교착상태를 해결한다.
Q10 : 탐구 7-1를 직접 입력하여 실행해보라. 교착상태가 발생하면 ^C 키를 입력하여 프로그램 을 종료시키면 된다. 코드와 실행 결과를 캡쳐하여 제출하라.