은행원 알고리즘과 디텍션 알고리즘 구하는 방법 질문이요.

876
points
points
문제. 어떤 시스템의 자원 이용상태가 다음과 같다면 교착상태인가? 또한 아래 상태에서 P2가 자원 D를
하나 더 요청하였을 때 P2의 요구를 들어주면 교착상태가 생기겠는가? 만일 교착상태가 생긴다면
어떤 프로세스들이 교착상태에 들어가게 되겠는가?
\\\\\Allocation///////Request//////////Available
\\\\\A//B//C//D//////A/B//C/D//////////A//B//C//D
P1///0//0//1//0//////2/0//0/1//////////2//1//0//0
P2///2//0//0//1//////1/0//1/0
P3///0//1//2//0//////2/1//0/0
답 : 원래 상태는 안전상태/ P3(2,2,2,0) -> P2(4,2,2,1) -> P1(4,2,3,1)
P2의 (0,0,0,1) 요구는 들어줄 수 없다. 사용가능에서 D자원 부족
답은 이런 걸로 알고 있는데 제가 알고 싶은것은 안전상태를 확인 방법입니다. 안전 알고리즘이라고
해서 수식으로 되어 있어서 그런지 무슨말인지 잘 이해가 안되는데 차근차근 설명 부탁드립니다.
그리고 왜 P3 -> P2 -> P1방식으로 Allocation을 더하는지 모르겠네요. 2 두가지가 어렵네요.

points
흠...
대표적인 OS과목의 연습문제네요.
먼저 사족을 붙이자면, 이런 문제라면 배경 지식 && 개념 파악, 문제 해결능력, 프로그래밍 능력
세 가지가 필요합니다.
배경 지식 && 개념 파악은 교재를 차근차근 다시 한 번 살펴보는 것이고,
그것이 이해가 가지 않는다면 교수님께 직접 찾아가 여쭈어 보는 것, 그것이 여의치 않으면
관련 개념만 인터넷을 뒤져서 연구하는 방법이 있습니다.
위와 같은 내용으로 구글링하면 최소한 5군데 이상의 대학 강의자료를 찾아볼 수 있는데,
그 중 적어도 하나는 본인이 이해하기 쉽도록 설명해 두고 있습니다(제 경험상).
문제 해결능력이야 이해력 && 분석력이 필요할텐데, 이런 것은 평소에 습득해 놔야 할 능력치이고,
프로그래밍 능력 역시 운영체제를 배우시는 정도라면 이미 어느 정도 습득해 놔야 할 상황입니다.
기나긴 사족을 접고, 이제 다시 본론으로 돌아가서, 질문하신 것은
Operating System Concept에 은행원 알고리즘에 이어서 나오는 resource-request algorithm의 내용인데,
다음과 같은 순서를 따라가야 합니다.
먼저 용어에 대한 정의(은행원 알고리즘)
Available : m차 벡터, 현재 이용 가능한 자원. 표기법 Available[j]==k.
현재 자원유형 j(Rj)는 k개 이용 가능.
Max : n x m 행렬, 프로세스별 최대 필요자원. 표기법 Max[i,j]==k.
프로세스 i(Pi)는 자원유형 j(Rj)를 최대 k개 요청 가능.
Allocation : n x m 행렬, 현재 할당된 자원. 표기법 Allocation[i,j]==k.
현재 프로세스 i(Pi)에는 자원유형 j(Rj)가 k개 할당되어 있음.
Need : n x m 행렬. 향후 요청 가능한 추가 자원. 표기법 Need[i,j]==k.
향후 프로세스 i(Pi)는 자원유형 j(Rj)를 k개 더 요청 가능.
이후부터 Pi만 생각.
Work : m차 벡터, 현 단계의 이용가능 자원. 표기법 Work[j]==k. 현 단계에서 Rj는 k개 이용가능.
Finish : n차 Boolean 벡터, 처리 완료 상태. 표기법 Finish[i]==true: 프로세스 Pi는 처리 완료.
처리 완료되면 자신이 가졌던 모든 자원을 반환.
Safety algorithm : (다음의 순서로 시뮬레이션)
1. 다음과 같이 초기화
Work = Available // 은행원 알고리즘의 현 단계 이용가능 자원을
// Safety 알고리즘의 현 단계 이용 가능 자원으로 복사
모든 i = 1, 2, ..., n에 대해 Finish[i]=flase // 시작할 때는 모든 프로세스가 원하는 자원을
// 배정받지 못한 상태.
2. 다음 두 조건을 만족하는 i를 찾음
Finish[i]==false // 아직 종료되지 않은 프로세스.
Needi <= Work // 현 단계 이용가능 자원(Work)이 프로세스 i가 요청 가능한 '추가'자원보다 크거나 같음
// 즉, 프로세스 i의 자원요청을 수용할 수 있을만큼의 각 자원들이 사용가능
이러한 i가 없으면 단계 4로 이동
3. Work = Work + Allocation // 프로세스 i의 자원요청을 모두 수락하면 프로세스 종료. 따라서 Pi에 할당되었던
// 리소스들이 반환되어 현 단계의 이용가능 자원(Work)으로 사용됨
Finish[i] = true // 해당 프로세스가 종료된 것으로 표시함
단계 2로 이동
4. 모든 i = 1, 2, ..., n에 대해 Finish[i]==true이면 안전상태
// 프로세스의 자원요청을 수락해 프로세스가 수행되고 종료되면 Finish[i]==true이므로, 모든 프로세스가
// 종료되었다면 그 종료 순서대로 안전순서가 존재하게 된다.
// 만약 4단계로 이동하였는데 모든 프로세스의 종료상태가 true가 아니라면,
// 안전순서가 존재하지 않는다.
resource-request algorithm
Pi가 자원을 요청할 경우라 가정
Requesti : m차 벡터, Pi의 현재 요청 자원. 표기법 Requesti[j]==k.
현재 프로세스 i(Pi)가 자원유형 j(Rj)를 k개 요청함.
1. Requesti <= Needi 이면 단계 2로 이동, 그렇지 않으면 요청 오류
프로세스 i의 현재 요청벡터(Requesti)가 향후 요청 가능한 추가 자원(Needi)보다 크면 논리적 오류.
2. Requesti <= Available 이면 단계 3으로 이동, 그렇지 않으면 Pi 대기
프로세스 i의 현재 요청벡터(Requesti)가 현재 이용가능한 자원 벡터보다(Available) 작거나 같으면,
즉 현재 이용가능한 자원으로 프로세스 i의 현재 요청 자원을 모두 들어줄 수 있는지 판단.
3. 다음과 같이 자원 할당 상태 변경(임시로 Pi에게 요청 자원을 할당해 준 것처럼 생각)
Available = Available - Requesti // Pi의 요청자원을 할당해 줬으니 현재 가용 자원이 그만큼 감소됨
Allocationi = Allocationi + Requesti // Pi의 요청자원이 할당 됐으니 PI에 할당된 자원 수 증가
Needi = Needi - Requesti // Pi의 요청자원을 할당해 줬으니 향후 요청 가능한 추가 자원이 감소됨
변경된 상태가 안전 상태이면 자원 할당, 그렇지 않으면 위의 변경을 취소하고 Pi대기.
즉 안전 상태를 판별하려면 resource-request algorithm대로 가정한 후,
safety algorithm으로 안전순서가 존재하는지 판단하라는 이야기임.
이것을 가지고 교재나 인터넷에서 예제 상황을 구하신 다음,
종이에다가 차근차근 하나씩 풀어나가 보세요.
예제 푸는 방법까지 다 설명해 달라고 하시면 ... OTL
------------------------------------------
Go to the U-City
points
답변 감사합니다.
resource-request algorithm 겨우 예제를 통해 완전히 감을 잡았습니다
safety algorithm은 인터넷을 통해서 찾아봐도 resouce 알고리즘에 대한 예제 설명망 있지
safety에 대한 자세한 설명이 없어서 난감하네요.
points
아 곰곰히 생각해보니 어떤 의미인지 알겠습니다
감만 잡고 있는 내용이여서 그런지 첨에는 모르겠는데 계속 생각해보니 무슨 의미인지 이해가 되네요
감사합니다