Deadlock Avoidance
데드락이 발생할 가능성이 있는 상황이면 safe
로 아니라면 unsafe
로 분류합니다.
Deadlock Avoidance 전략은 unsafe
상태에 있으면 자원을 할당하지 않기 때문에, unsafe
상태로 들어가지 않는것을 보장합니다.
- 관련된 알고리즘
- 자원 할당 그래프 알고리즘
- Banker's 알고리즘
Banker's 알고리즘
Banker's 알고리즘
은 프로세스가 최대로 요청할 자원 개수를 알고있다고 가정합니다.
Allocation 은 할당된 자원이고, Max는 최대로 요청할 자원 개수인데요.
이 표를 통해 앞으로 얼마만큼의 자원을 더 요청할 것인지 추측할 수 있습니다.
Max - Allocation 의 결과인데요, 이게 더 요청할 가능성이 있는 자원 양입니다.
이때 이 만큼의 자원을 모두 줄 수 있다면 자원을 할당하고, 아니라면 자원을 할당해주지 않습니다.
그래서 절대로 Deadlock 이 발생하지 않습니다.
그래서 위 그림에서는 P1 과 P3 만 자원을 할당받을 수 있습니다.
자원 할당 그래프
자원 할당 그래프
는 자원과 프로세스의 관계를 그래프로 표시하는 방법입니다.
그래프에서 사이클
이 생성되는지 여부에 따라 교착상태가 발생하는지를 확인합니다.
Deadlock Ignorance
운영체제가 Deadlock 의 발생에 대해 아무런 조치도 취하지 않는 전략입니다.
사실 Deadlock 이라는 상황 자체가 드물게 발생하는 상황이기 때문에 운영체제에서 처리하지 않습니다.
범용 운영체제에서 주로 사용되는 방법입니다.
Logical Address & Physical Address
Logical Address
가상 주소(Virtual Address) 라고도 하며, 프로세스가 실제로 사용하는 주소입니다.
Physical Address
실제 하드웨어 메모리에 저장되는 주소 입니다.
Address Binding
프로세스는 Logical Address
를 사용하는데, 실제 데이터는 Physical Address
에 저장됩니다.
이 차이를 때문에 주소 변환이 필요한데요, 이 작업은 하드웨어의 도움을 받아서 처리됩니다.
Memory-Management Unit
이전 내용에서 Logical Address
를 Physical Address
로 변환하는데 사용되는 하드웨어 입니다.
- 구성요소
- base register : 프로세스가 저장된 실제 메모리의 시작 주소를 저장합니다.
- limit register : 프로세스에 할당된 메모리 크기를 저장합니다.
위 두 레지스터를 통해 프로세스가 실제 메모리에 저장된 실제 주소를 알 수 있습니다.
Dynamic Loading
Dynamic Loading
은 프로세스 전체를 메모리에 올리지 않고, 런타임에 동적으로 메모리에 올라가는 방법입니다.
Overlays
프로세스가 실행되는데 필요한 최소한의 정보만 메모리에 올립니다.
이는 프로그램이 실행될 때, 개발자가 직접 필요한 정보를 메모리에 올리도록 구현해야 하는 방법입니다.
Swapping
Swapping
은 우선순위가 낮은 프로세스를 메모리에서 쫒아내고, 새 프로세스에게 할당해주는 방법입니다.
쫒겨난 프로세스는 Swap area
에 저장되며, 디스크가 주로 Swap area
로 사용됩니다.