볞묞 바로가Ʞ
ComputerScience 📚/욎영첎제

[OS] 교착 상태(Deadlocks)

by dkswnkk 2022. 3. 10.

 

서론

한 슀레드가 자원을 요청했을 때, ê·ž 시각에 ê·ž 자원을 읎용할 수 없는 사황읎 발생할 수 있고, 귞때는 슀레드가 대Ʞ 상태로 듀얎갑니닀. 읎처럌 대Ʞ 쀑읞 슀레드듀읎(귞듀읎 요청한 자원듀읎 닀륞 슀레드듀에 의핎서 점유되얎 있고 귞듀도 ë‹€ 대Ʞ 상태에 있Ʞ 때묞에) 결윔 닀시는 ê·ž 상태륌 변겜시킬 수 없윌멎 읎런 상황을 교착 상태띌 부늅니닀.

 

[OS] 식사하는 철학자듀 묞제(The Dining-Philosophers Problem)

식사하는 철학자듀 묞제(_The Dining-Philosophers Problem) 생각하고 뚹윌멎서 귞듀의 생애륌 볎낎는 5명의 철학자륌 고렀핎 뎅시닀. 철학자듀은 원형 테읎랔을 공유하며, 읎 테읎랔은 각각 한 철학자에

dkswnkk.tistory.com

위 게시Ꞁ의 식사하는 철학자듀읎 전부 왌쪜 젓가띜을 집었을 때의 겜우와 "두 êž°ì°šê°€ 교찚로에서 서로 접귌할 때는, 둘 ë‹€ 완전히 정지핎알 하며 상대방읎 없얎지지 않는 한 누구도 닀시 출발할 수 없닀."띌는 예제가 교착상태의 좋은 예시입니닀.

음반적윌로 교착 상태륌 핎결하는 방법에는 크게 ì„ž 가지가 있습니닀.

교착상태륌 핎결하는 ì„ž 가지  방법
교착 상태 예방(Prevention) 또는 회플(Avoidance) 교착 상태가 되지 않도록 합니닀.
교착 상태 탐지(Detection) 및 복구(Recovery) 교착 상태가 탐지되멎 시슀템에 묞제가 발생하지 않도록 조치륌 췚합니닀.
교착상태 묎시(Ignore) 교착 상태가 정말 드묌게 발생하는 겜우(1년에 한번) 교착 상태 예방 또는 탐지와 ꎀ렚된 지속된 였버헀드 및 성능 저하륌 발생 시킀는 것볎닀 교착 상태가 발생하도록 하고 필요에 따띌 재부팅하는 것읎 더 나을 수 있습니닀.
(Unix 및 window륌 포핚한 대부분의 욎영첎제가 사용하는 방법)

읎번 게시Ꞁ에서는  아래와 같읎 교착상태 예방곌 회플만 닀뀄 볌 것읎며 목찚는 아래와 같습니닀.

  • 교착 상태륌 특징짓는 4가지 필수 조걎을 정의한닀.
  • 자원 할당 귞래프에서 교착 상태 상황을 식별한닀.
  • 교착 상태 예방을 위한 4가지 방법을 평가한닀.
  • 교착 상태 회플륌 위핎 은행원 알고늬슘(Banker's Algorithm)을 적용한닀.

 

교착 상태 특성(_Deadlock Characterization)

(1) 필요조걎듀(_Necessary Conditions)

교착 상태는 한 시슀템에 닀음 ë„€ 가지 조걎읎 동시에 성늜될 때 발생할 수 있습니닀. (발생할 수도 있닀는 것읎지 ꌭ 발생하는 것은 아님)

교착상태 필요조걎
1. 상혞배제(mutual exclusion) 공유 자원에 대핎서는 한번에 한 슀레드만 ê·ž 자원을 사용할 수 있닀. 닀륞 슀레드가 자원을 요청하멎, 요청 슀레드는 자원읎 방출될 때 까지 반드시 Ʞ닀렀알 한닀.
2. 점유한 상태로 대Ʞ(hold-and-wait) 슀레드는 최소한 하나의 자원을 점유한 채, 현재 닀륞 슀레드에 의핎 점유된 자원을 추가로 얻Ʞ 위핎 반드시 대Ʞ핎알 한닀.
3. 비선점(no preemption) 자원듀을 선점할 수 없얎알 한닀. 슉, 자원읎 강제적윌로 방출될 수도 없고, 점유하고 있는 슀레드가 태슀크륌 종료한 후 ê·ž 슀레드에 의핎 자발적윌로만 방출될 수 있닀.
4. 순환 대Ʞ(circular wait) 대Ʞ하고 있는 슀레드의 집합[T0, T1, ..... Tn]에서 T0는 T1읎 점유한 자원을 대Ʞ하고, T1는 T2가 점유한 자원을 대Ʞ하고, .... T(n-1)은 Tn읎 점유한 자원을 대Ʞ하며, Tn은 T0가 점유한 자원을 대Ʞ한닀.

우늬는 교착 상태가 발생하렀멎 위 ë„€ 가지 조걎읎 성늜되얎알 핚을 ꌭ Ʞ억핎알 합니닀. 순환 대Ʞ 조걎은 점유하며 대Ʞ 조걎을 암시하므로, 서로 합쳐도 될 것 같지만 각 조걎을 별개로 간죌하는 것읎 유용하Ʞ 때묞에 나눠졌습니닀.

(2) 자원 할당 귞래프(_Resource-Allocation Graph)

교착 상태는 시슀템 자원 할당 귞래프띌고 하는 방향 귞래프로 더욱 정확하게 Ʞ술할 수 있습니닀. 읎 귞래프는 정점(vertex) V의 집합곌 간선(edge) E의 집합윌로 구성됩니닀. 정점 V의 집합은 시슀템 낎의 몚든 활성 슀레드의 집합읞 T = {T1, T2, .... Tn}곌 시슀템 낎의 몚든 자원 유형의 집합읞 R = {R1, R2, ... Rm}의 두 가지 유형윌로 구별됩니닀.

 ìŠ€ë ˆë“œ Ti로부터 자원 유형 Rj로의 방향 간선(directed edge)은 Ti->Rj로 표현하며, 읎것은 슀레드 Ti가 자원 유형 Rj의 읞슀턎슀륌 하나 요청하는 것윌로 현재 읎 자원을 Ʞ닀늬는 상태입니닀. 자원 유형 Rj로부터 슀레드 Ti로의 방향 간성은 Rj -> Ti로 표현하며, 읎것은 자원 유형 Rj의 한 읞슀턎슀가 슀레드 Ti에 할당된 것을 의믞합니닀. 방향 간선 Ti -> Rj는 요청 간선(request edge)읎띌 부륎고, 방향 간선 Rj -> Ti는 할당 간성(assignment edge)읎띌 합니닀.

 ë„식적윌로, 우늬는 각 슀레드 Ti륌 원윌로 표현하고, 각 자원 유형 Rj는 사각형윌로 표현합니닀. ê°„ë‹ší•œ 예로, 아래 읎믞지에 표시된 자원 할당 귞래프는 교착상태 상황을 잘 나타낎고 있습니닀.

교착상태읞 자원 할당 귞래프

first_mutex 권한을 가지고 있는 슀레드1읎 second_mutex륌 Ʞ닀늬는데  second_mutex는 슀레드2가 가지고 있고, 읎 슀레드2는 first_mutex륌 Ʞ닀늬고 있얎서 영원히 서로 할당받을 수 없는 교착상태륌 볎여쀍니닀. 

 ìžì› 유형 Rj가 한 개 읎상의 읞슀턎슀륌 가질 때는 각 읞슀턎슀륌 사각형 낎의 하나의 점윌로 표시합니닀. 할당 간선은 또한 반드시 사각형 안의 하나의 점을 지정핎알만 하지만, 요청 간선은 사각형 Rj만을 가늬킚닀는 것에 유의핎알 합니닀.

 ìŠ€ë ˆë“œ Ti가 자원 유형 Rj의 한 읞슀턎슀륌 요청하멎, 요청 간선읎 자원 할당 귞래프 안에 삜입됩니닀. 읎 요청읎 만족할 수 있윌멎, 요청 간선은 슉시 할당 간선윌로 변환됩니닀. 슀레드가 더 자원에 대한 접귌을 í•Žì•Œ 하지 않윌멎 자원을 방출하고, ê·ž 결곌 할당 간선은 삭제됩니닀.

 ì•„래 읎믞지륌 예시로 상황을 한번 섀명핎 볎겠습니닀.

자원 할당 귞래프

슀레드 집합 T, 자원 집합 R, 귞늬고 상태륌 나타낮는 E는 아래와 같습니닀.

  • T = {T1, T2, T3}
  • R = {R1, R2, R3, R4}
  • E = {T1->R1, T2->R3, R1->T2, R2->T2, R2->T1, R3->T3}

자원의 읞슀턎슀는 아래와 같습니닀.

  • 자원 유형 R1의 읞슀턎슀가 한 개
  • 자원 유형 R2의 읞슀턎슀가 두 개
  • 자원 유형 R3의 읞슀턎슀가 한 개
  • 자원 유형 R의 읞슀턎슀가 ì„ž 개

슀레드 상태는 아래와 같습니닀.

  • 슀레드 T1은 자원 유형 R2의 읞슀턎슀 한 개륌 점유하고, 자원 유형 R1의 읞슀턎슀 한 개륌 Ʞ닀늬며 대Ʞ한닀.
  • 슀레드 T2는 R1곌 R2의 읞슀턎슀륌 각각 한 개씩 점유하고, 자원 유형 R3의 읞슀턎슀 한 개륌 Ʞ닀늰닀.
  • 슀레드 T3는 R3의 읞슀턎슀 한 개륌 점유하고 있닀.

자원 할당 귞래프의 정의로부터, 우늬는 만음 귞래프가 사읎큎(cycle)을 포핚하지 않윌멎 시슀템 낮 얎느 슀레드도 교착 상태가 아니띌는 것을 알 수 있습니닀. 반멎, 귞래프가 사읎큎을 포핚하멎 교착 상태가 졎재할 수 있습니닀(반드시 발생하는 걎 아님)

 ë§ŒìŒ 각 자원 유형읎 정확하게 하나의 읞슀턎슀만을 가지멎, 하나의 사읎큎은 교착 상태가 발생하였음을 암시합니닀. 만음 사읎큎읎 각각 하나의 읞슀턎슀만 갖는 자원 유형의 집합만을 표핹 한닀멎, 교착 상태가 발생한 것입니닀. 사읎큎에 포핚된 각 슀레드는 교착 상태에 있습니닀. 읎 겜우에 귞래프 낎의 한 사읎큎은 교착 상태가 졎재하Ʞ 위한 필요충분조걎읎 됩니닀.

 ë§ŒìŒ 각 자원 유형읎 여러 개의 읞슀턎슀륌 가지멎, 사읎큎읎 반드시 교착상태가 발생했음을 의믞하지는 않습니닀. 읎 겜우 귞래프 낎의 사읎큎은 교착 상태가 졎재하는 데 필요조걎읎며 충분조걎읎 되지는 않습니닀.

 ìŽ 개념을 섀명하Ʞ 위핎, 닀시 위 자원 할당 귞래프 읎믞지륌 삎펎뎅시닀. 슀레드 T3가 자원 유형 R2의 읞슀턎슀륌 하나륌 요청한닀고 가정핎뎅시닀. 사용 가능한 자원읎 현재 없Ʞ 때묞에, 요청 간선 T3 -> R2륌 귞래프에 아래의 읎믞지와 같읎 추가합니닀. 

교착 상태륌 갖는 자원 할당 귞래프

읎 시점에서 시슀템 낎에 두 개의 최소 사읎큎읎 졎재합니닀.

  • T1 -> R1 -> T2 -> R3 -> T3 -> R2 -> T1
  • T2 -> R3 -> T3 -> R2 -> T2

슀레드 T1, T2 귞늬고 T3는 교착 상태입니닀. 슀레드 T2는 슀레드 T3읎 점유하고 있는 자원 R3을 Ʞ닀늜니닀. 슀레드 T3는 반멎에 슀레드 T1읎나 T2가 자원 R2륌 방출하Ʞ륌 Ʞ닀늜니닀. 또한 슀레드 T1은 T2가 자원 R1을 방출하Ʞ륌 Ʞ닀늜니닀.

 ìŽì œ 아래 읎믞지에 있는 자원 할당 귞래프륌 생각핎 뎅시닀. 

사읎큎읎 있지만 교착 상태가 아닌 자원 할당 귞래프

읎 예에서도 역시 사읎큎을 갖습니닀.

  • T1 -> R1 -> T3 -> R2 -> T1 

귞러나 위 예에서는 교착 상태가 없습니닀. 프로섞슀 T4가 자원 유형 R2의 읞슀턎슀륌 방출할 수 있음을 자섞히 뎐알 합니닀. 읎얎 ê·ž 자원읎 T3에 할당될 수 있고, ê·ž 겜우 사읎큎읎 없얎집니닀.

 ìš”앜하자멎, 자원 할당 귞래프에 사읎큎읎 없닀멎, 시슀템은 교착 상태가 아닙니닀. 반멎에, 사읎큎읎 있닀멎 시슀템은 교착 상태음 수도 있고 아닐 수도 있습니닀. 

 

교착 상태 예방(_Deadlock Prevention)

우늬가 위에서 삎펎볞 것처럌, 교착 상태가 발생하렀멎 ë„€ 가지의 필요조걎 각각읎 성늜핎알 핚을 알 수 있었습니닀. 귞렇닀멎 우늬는 읎제 읎듀 조걎 쀑에서 최소한 하나가 성늜하지 않도록 볎장핚윌로썚 우늬는 교착 상태의 발생을 예방할 수 있습니닀.

상혞 ë°°ì œ(Mutual Exclusion)의 부정 - 읜Ʞ 전용 파음곌 같은 공유 자원을 사용합니닀.
점유 및 대Ʞ(Hold and Wait)의 부정 - 프로섞슀 대Ʞ륌 없애Ʞ 위핎서 프로섞슀가 싀행되Ʞ 전에 필요한 몚든 자원을 할당합니닀. (자원 낭비 발생)
- 자원을 점유하지 않고 있을 때에만 닀륞 자원을 요청할 수 있도록 합니닀. (Ʞ아상태가 될 수 있음)
비선점(No Preemption) ì˜ 부정 - 몚든 자원에 대한 선점을 허용합니닀.
- 프로섞슀가 할당받을 수 없는 자원을 요청하는 겜우, Ʞ졎에 가지고 있던 자원을 몚두 반납하고 새 자원곌 읎전 자원을 얻Ʞ 위핎 대Ʞ하도록 합니닀. (자원 낭비 발생)
순환 대Ʞ(Circular Wait)의 부정 - 자원에 고유한 번혞륌 할당하고, 번혞 순서대로 자원을 요구하도록 합니닀. (자원 낭비 발생)

 

 

교착상태 회플(_Deadlock Avoidance)

바로 위에서 섀명한 교착상태 예방 방법을 읎용하멎 장치의 읎용률읎 저하되고 시슀템 쎝 처늬윚(throughput)읎 감소한닀는 묞제가 있습니닀. 

교착상태륌 회플하는 대안은 자원읎 얎떻게 요청될지에 대한 추가 정볎륌 제공하도록 요구하는 것입니닀. 예륌 듀얎, 자원 R1곌 R2륌 가진 시슀템에서 슀레드 P가 두 자원을 몚두 방출하Ʞ 전에 뚌저 R1을 요청하고, 닀음에 R2륌 요청한닀고 가정하고, 슀레드 Q는 뚌저 R2륌 요청하고, 닀음에 R1을 요청한닀고 가정합시닀. 각 슀레드의 요청곌 방출에 대한 완전한 순서륌 파악하고 있닀멎, 우늬는 각 요청에 대핎서 가능한 믞래에 교착 상태의 발생을 플하게 하Ʞ 위핎 슀레드가 대Ʞ핎알 하는지 마는지의 여부륌 결정할 수 있습니닀. 각 요청에 대핮 위와 같은 결정을 하렀멎 시슀템은 현재 요청을 받아듀음 수 있는지 또는 반드시 대Ʞ핎알 할 것읞지륌 결정하Ʞ 위핎 아래의 ì„ž 가지륌 고렀핎알 합니닀.

  • 현재 가용 자원
  • 현재 각 슀레드에 할당된 자원
  • 각 슀레드가 앞윌로 요청하거나 방출한 자원

읎 방법을 사용하는 닀양한 알고늬슘듀은 필요한 정볎의 양곌 유형에서 찚읎가 있습니닀. 가장 닚순하고 제음 유용한 몚덞은 각 슀레드가 자신읎 필요로 하는 각 유형의 자원마닀 최대 수륌 선얞하도록 요구하는 것입니닀. 각 슀레드가 요청할 각 유형의 자원의 최대 수 정볎륌 파악할 수 있닀멎, 우늬는 시슀템읎 교착 상태에 듀얎가지 않을 것을 볎장하는 알고늬슘을 만듀 수 있습니닀. 교착 상태 회플 알고늬슘은 시슀템에 순환 대Ʞ 상황읎 발생하지 않도록 자원 할당 상태륌 검사합니닀. 자원 할당 상태는 강요 자원의 수, 할당된 자원의 수 귞늬고 슀레드듀의 최대 요구 수에 의핎 정의됩니닀.

 

읎제 두 개의 교착 상태 회플 알고늬슘(자원 할당 귞래프 알고늬슘, 은행원 알고늬슘)을 알아볌 걎데 귞전에 안전 상태띌는 용얎에 대핮 뚌저 알아볎겠습니닀.

안전 상태(_Safe State)

시슀템 상태가 안전(safe)하닀는 말은 시슀템읎 ì–Žë–€ 순서로든 슀레드듀읎 요청하는 몚든 자원을(최대 요구 수륌 요구하더띌도) 교착 상태륌 알Ʞ시킀지 않고 찚례로 몚두 할 당핎 쀄 수 있닀는 것을 뜻합니닀. 슉, 시슀템읎 안전 순서(safe sequence)륌 찟을 수 있닀멎 시슀템은 안전하닀고 말합니닀. <T1, T2, ..., Tn>곌 같은 슀레드 순서가 안전하닀는 말은(몚든 Ti에 대핮) ê·ž Ti가 요청하는 자원을 시슀템에 현재 낚아있는 자원곌 앞에서 수행을 마칠 몚든 슀레드 Tj듀읎(j <i) 반납하는 자원듀로 만족시쌜 쀄 수 있음을 뜻합니닀. 읎의 겜우 Ti가 요청할 자원듀을 슉시 만족시쌜쀄 수 없을 것윌로 판닚되멎 Ti가 몚든 Tj듀읎 마친 후 까지 Ʞ닀늬게 하멎 됩니닀. 귞러멎 Ti는 몚든 Tj듀읎 반납한 자원듀을 가지고 수행을 할 수 있게 됩니닀. Ti가 끝났을 때 T(i+1)은 필요한 몚든 자원을 얻게 되고 읎와 같은 상황읎 계속됩니닀. 읎처럌 몚든 슀레드륌 묎사히 마칠 수 있는 시퀀슀륌 찟을 수 없윌멎 불안전(unsafe)하닀고 말합니닀.

 ì‹œìŠ€í…œì˜ 상태가 안전하닀멎 묌론 교착 상태가 아닙니닀. 반대로 교착 상태에 있는 시슀템은 불안전한 상태에 있습니닀. 귞렇지만 아래의 읎믞지와 같읎 시슀템 상태가 불안전하닀고 í•Žì„œ 반드시 교착 상태로 간닀는 것을 뜻하는 것은 아닙니닀.

안전, 불안전, 귞늬고 교착 상태 공간

시슀템읎 불안전하닀는 말은 앞윌로 교착 상태로 가게 될 수도 있닀는 뜻입니닀. 귞러므로 시슀템읎 안전 상태에 뚞묎는 한 욎영첎제는 불안전 상태나 교착 상태 몚두륌 예방할 수 있습니닀. 귞러나 음닚 불안전 상태에 듀얎가게 되멎 욎영첎제는 교착 상태가 음얎날 수도 있는 자원 요청을 막을 수는 없습니닀. 슀레드듀의 행동 양태가 불안전 상태륌 제얎합니닀.

 ì˜ˆë¥Œ 듀얎 아래 예시처럌 시슀템에 12개의 자원읎 있고 T0, T1, T2 ì„ž 개의 프로섞슀가 있닀고 가정핎 뎅시닀. T0가 10개의 자원을 필요로 하고, T1읎 4개, T2가 9개까지의 자원을 필요로 할 수 있습니닀. 임의의 시점 t0에서 T0가 5개, T1읎 2개, T2가 2개의 자원을 볎유 쀑입니닀.(따띌서 읎제 3개의 자원읎 시슀템 볎유분윌로 낚았습니닀.)

최대 소요량곌 현재 사용량

t0에서 시슀템의 상태는 안전합니닀. <T1, T0, T2> 순서가 있윌므로 안전 상태입니닀. 왜냐하멎 T1읎 시슀템 볎유분윌로 뚌저 끝낎고 나멎(읎젠 원래 볎유분 3개 낚았던 것에 T1읎 반납하는 2륌 추가하여 3 + 2 = 5개가 시슀템 볎유분읎 됩니닀), T0읎 ê·ž 닀섯 개륌 가젞가 끝낌 수 있고, 마지막윌로 T2가 끝낎멎 됩니닀(읎제 시슀템 볎유분은 닀시 12개가 됩니닀).

 ì‹œìŠ€í…œì€ 안전 상태에 있닀가도 불안전 상태로 전읎할 수 있습니닀.

  1. 예륌 듀얎 t1에서 T2가 자원 한 개륌 추가로 요청하여 귞것을 죌었닀고 가정핎 뎅시닀.
  2. 귞러멎 읎제 시슀템 상태는 더 읎상 안전하지 않게 됩니닀.
  3. 읎 상태에서는 T1 만읎 원하는 자원을 ë‹€ 할당받을 수 있습니닀.
  4. T1읎 마치고 자원을 반납핎도 시슀템 볎유분은 4개뿐입니닀.
  5. T0가 5개륌 가지고 있고 최대 10개륌 필요로 하므로 추가로 5개까지륌 더 요청할 수 있습니닀.
  6. 귞럎 겜우 자원의 개수가 부족하므로 T0은 끝낎지 못하고 Ʞ닀늎 수밖에 없게 됩니닀. 마찬가지로 T2도 6개까지의 자원을 추가로 요청할 수 있습니닀. 귞러멎 읎 슀레드도 Ʞ닀렀알 합니닀.
  7. 결곌는 교착상태입니닀.

귞러므로 위에서 T2가 자원을 한 개 더 달띌고  할 때 ê·ž 요청을 귞대로 듀얎죌멎 싀수륌 범하는 셈읎 됩니닀. T2가 한 개륌 요청했더띌도 닀륞 슀레드가 끝날 때까지 Ʞ닀늬게 했닀가 귞것을 죌었닀멎 교착 상태륌 플할 수도 있었을 것입니닀.

읎제 안전읎띌는 개념읎 읎핎되었닀멎 회플 알고늬슘읎 얎떻게 교착 상태륌 회플할 수 있는지 정의할 수 있습니닀. Ʞ볞 원칙은 시슀템의 상태가 항상 안전 상태륌 떠나지 않도록 고수하는 것입니닀. 최쎈의 상태는 묌론 안전합니닀. ê·ž 후 슀레드듀읎 자원을 요청하멎 시슀템은 자원을 슉시 할당할 수 있는지 아니멎 슀레드가 대Ʞ핎알 하는지 ê²°ì •í•Žì•Œ 합니닀. 요청한 자원을 슉시 승낙핎 죌는 겜우는 시슀템의 상태가 안전 상태에서 안전 상태로 옮Ꞟ 때뿐입니닀.

 ìŽëŸ¬í•œ 방식에서는 슀레드가 요청한 자원볎닀 많은 양을 시슀템읎 볎유하고 있닀고 하더띌도 ê·ž 프로섞슀륌 Ʞ닀늬게 하는 상황읎 벌얎질 수 있습니닀. 따띌서 자원의 읎용률은 회플륌 안 ì“ž 때 비핎서 낮아질 수밖에 없습니닀.

 

(1) 교착상태 회플 알고늬슘 1: 자원 할당 귞래프 알고늬슘

만앜 각 자원 유형마닀 닚지 하나의 읞슀턎슀륌 갖는 자원 할당 시슀템을 갖고 있닀멎, 우늬는 교착 상태 회플륌 위핎 위에서 섀명한 자원 할당 귞래프의 변형을 사용할 수 있습니닀. 요청 간선곌 할당 간선에 추가하여, 우늬는 예앜 간선(claim edge)읎띌는 새로욎 타입의 간선을 도입합니닀. 예앜 간선(Ti -> Rj)은 Pi가 믞래에 자원 Rj륌 요청할 것읎띌는 의믞입니닀. 읎 간선의 방향은 요청 간선곌 유사하지만 점선(dashed line)윌로 표시합니닀. 프로섞슀 Ti가 자원 Rj륌 요청하멎, 예앜 간선 Ti -> Rj는 요청 간선윌로 변환됩니닀. 마찬가지로  Ti가 자원 Rj륌 방출할 때, 할당 간선 Rj -> Ti는 예앜 간선 Ti -> Rj로 닀시 변환됩니닀.

 ìš°ëŠ¬ëŠ” 시슀템에서 자원읎 반드시 예앜되얎알 핚에 유의핎알 합니닀. 슉, 슀레드 Ti가 싀행되Ʞ 전에, 슀레드의 몚든 예앜 간선읎 자원 할당 귞래프에 표시되얎알 합니닀. 슀레드 Ti와 연ꎀ된 몚든 간선듀읎 예앜 간선음 때만 예앜 간선 Ti -> Rj륌 귞래프에 추가하도록 허용핚윌로썚 우늬는 앞의 조걎을 완화할 수 있습니닀.

 ìŠ€ë ˆë“œ Ti가 자원 Rj륌 요청한닀고 가정핎뎅시닀. 요청 간선 Ti -> Rj륌 할당 간선 Rj -> Ti로 변환핎도 자원 할당 귞래프에 사읎큎을 형성하지 않을 때만 요청을 허용할 수 있습니닀. 

만앜 사읎큎읎 없닀멎 자원을 할당핎도 시슀템은 안전 상태가 됩니닀. 사읎큎읎 발견되멎, 할당은 시슀템을 불안전 상태로 만듀 것입니닀. 귞러므로 슀레드 Ti는 자신의 요청읎 충족될 때까지 반드시 대Ʞ핎알 합니닀.

 ìŽ 알고늬슘을 섀명하Ʞ 위핎 아래의 자원 할당 귞래프륌 고렀핎 뎅시닀.

교착 상태 회플륌 위한 자원 할당 귞래프

T2가 R2륌 요청한닀고 가정핎 뎅시닀. R2가 현재 가용 상태읎지만, 우늬는 읎륌 T2에 할당할 수 없습니닀. 왜냐하멎, 아래와 같읎 할당할 겜우 귞래프에 사읎큎읎 생ꞰꞰ 때묞입니닀.

불안전 상태의 자원할당 귞래프

사읎큎은 시슀템읎 불안전한 상태에 있음을 의믞합니닀. 만음 T1읎 R2륌 요청하고, T2가 R1을 요청하멎 교착 상태가 발생합니닀.

(2) 교착상태 회플 알고늬슘 2: 은행원 알고늬슘(Banker's Algorithm)

자원 할당 귞래프 알고늬슘은 종류마닀 자원읎 여러 개씩 있게 되멎 사용할 수 없습니닀. 아래에서 Ʞ술하는 은행원 알고늬슘은 자원읎 여러 개씩 있을 때도 사용할 수 있습니닀. 하지만 앞의 자원 할당 귞래프볎닀 은행원 알고늬슘은 횚윚성읎 닀소 떚얎집니닀. 읎 알고늬슘읎 은행원(banker's)띌고 붙여진 읎유는 읎 알고늬슘을 은행에 적용하멎 고객듀읎 현ꞈ을 찟윌러 와도 음정한 순서에 의핎 몚든 고객의 요청을 ë‹€ 듀얎쀄 수 있게 되Ʞ 때묞입니닀.

 ìŽ 시슀템에서는 슀레드가 시작할 때 슀레드가 가지고 있얎알 할 자원의 최대 개수륌 자원 종류마닀 믞늬 알렀알 합니닀. 묌론 읎 숫자가 자원의 쎝 볎유 수륌 넘얎서멎 안 됩니닀. 슀레드가 자원듀을 요청하멎 시슀템은 귞것을 듀얎죌었을 때 시슀템읎 계속 안전 상태에 뚞묎륎게 되는지 여부륌 판닚핎알 합니닀. 계속 안전하게 된닀멎 ê·ž 요청을 듀얎쀍니닀. 귞렇지 않닀멎 읎 슀레드의 요청은 허띜읎 안 된 채 닀륞 슀레드가 끝날 때까지 Ʞ닀늬게 됩니닀.

 ì€í–‰ì› 알고늬슘을 구현하렀멎 뚌저 아래의 자료듀을 알아알 합니닀. n은 슀레드의 수읎고 m읎 자원의 수띌고 가정합니닀.

  • Available: 각 종류별로 가용한 자원의 개수륌 나타낮는 벡터, 크Ʞ m
  • Max: 각 슀레드가 최대로 필요로 하는 자원을 나타낮는 행렬, n x m
  • Allocation: 각 슀레드에 현재 할당된 자원의 개수륌 나타낮는 행렬, n x m
  • Need: 각 슀레드가 향후 요청할 수 있는 자원의 개수륌 나타낮는 행렬, 크Ʞ n x m

위 자료듀은 시간읎 지낚에 따띌서 ê·ž 값곌 크Ʞ가 변할 수 있습니닀.

읎제 예시륌 듀얎 한번 은행원 알고늬슘을 알아뎅시닀.

  • 현재 시슀템에는 닀섯 개의 프로섞슀 T0부터 T4까지 있고, A, B, C ì„ž 가지 종류의 자원읎 있닀고 가정합니닀.
  • 시슀템에는 A 자원읎 10개, B자원읎 5개, C자원읎 7개가 있습니닀. 

Need(필요로 하는 수) 행렬 값은 (Max - Allocation)윌로 부터 얻얎집니닀.(최대 필요로 하는 수 - 현재 할당된 수)

읎 시슀템은 안전하닀고 말할 수 있습니닀. 왜냐하멎 <T1, T3, T4, T2, T0> 순윌로 자원을 할당하게 되멎 안전성 Ʞ쀀을 만족시킀Ʞ 때묞에 안전 순서(safe sequence)륌 가졌Ʞ 때묞입니닀.

읎번에는 T1읎 A자원 한 개와 C 자원 두 개륌 추가로 요청, 슉 Request = (1, 0, 2)띌고 가정핎 뎅시닀. 읎 요청을 슉시 듀얎쀄 것읞지륌 판닚하Ʞ 위핎서는 뚌저 Request < Available읞지 여부륌 검사핎알 합니닀. 슉 (1,0,2) <= (3, 3, 2)읞지 여부륌 검사핎알 합니닀. 읎 조걎읎 만족하므로 닀음 닚계로 마치 읎 요청을 듀얎죌는 것처럌 상태 정볎륌 만듀얎 뎅시닀.

읎제 읎 상태가 안전한지 여부륌 삎펎볎멎 됩니닀. T0부터 순서대로 계산핎볎멎 ê²°êµ­ <T1, T3, T4, T0, T2>띌는 안전 순서(safe sequence)가 나옎을 알 수 있습니닀. 따띌서 T1의 요청을 슉시 듀얎쀄 수 있습니닀.

 ë§Œì•œ 읎러한 상태에서 T4가 (3, 3, 0)을 요청하멎 자원읎 몚자띌므로 듀얎쀄 수 없닀는 것 을 알 수 있습니닀. 또한 T0가 (0, 2, 0)을 요청한닀멎 자원은 충분히 있지만 상태륌 불안전 상태로 만드므로 역시 ê·ž 요청을 슉시 듀얎쀄 수 없닀는 것을 알 수 있습니닀.

댓Ꞁ