CS/운영체제
[4주차] 프로세스 동기화, 교착 상태
mint*
2024. 9. 5. 23:17
728x90
프로세스 동기화
병행성(동시성)에 대해 설명해주세요.
- 작업이 동시에 실행되는 것처럼 보인다.
- 싱글 코어 : 시분할 기법(time-slicing)을 사용하여 cpu 시간을 나누어 사용한다.
- 멀티 코어: 물리적으로 병렬로 동작할 수 있다. (실제 병렬 처리 가능)
병행 프로세스
- 프로세스 여러개가 실제로 동시에 실행되는 것
- 각 프로세스는 독립적으로 작업을 수행하거나 다른 프로세스와 협력하면서 특정 기능을 수행한다.
병행 프로세스
는 제한된 자원을 공유하기 위해 자주 상호작용한다.- 상호작용하는 프로세스들은 순서에 맞게 실행되도록
동기화
시켜야한다.
- 영역
- 진입 영역 : 해당 자원의 임계영역에 들어갈 수 있는지 요청
- 임계 영역 : 공유 자원 접근 순서에 따라 실행 결과가 달라지는 부분
- 출구 영역: 임계영역에서 수행을 마치고 나갈 프로세스를 선택하는 부분
- 잔류 영역: 임계영역을 마치고 나와 수행
병렬성에 대해 설명해주세요.
- 실제로 여러 작업이 동시에 처리되는 것
- 멀티 코어 프로세서나 분산 시스템에서 구현된다.
병행성은 작업을 동시에 다루는 것에 관한 것이고, 병렬성은 작업을 동시에 실행하는 것에 관한 것이다.
Race Condition(경쟁 조건)이 무엇인가요?
- 2개 이상의 프로세스가 공유 자원을 병행해서 읽거나 쓸 때, 자원에 대한 접근 순서에 따라 실행 결과가 달라지는 상황
- 공유 자원에 최종적으로 남는 데이터의 결과를 보장할 수 없다.
Race Condition(경쟁 조건)을 어떻게 해결할 수 있나요?
- 경쟁 조건(상태)를 방지하려면 병행 프로세스들이 동기화되어 실행되어야한다.
- 뮤텍스, 세마포어, 락 등을 통해 해결할 수 있다.
- 뮤텍스 : 공유 자원에 접근할 때 뮤텍스를 이용해 한 번에 하나의 스레드만 접근하도록 한다.
- 세마 포어: 여러 스레드가 동시에 접근할 수 있는 자원의 수를 제한한다.
- 락 : 특정 코드 블록을 실행할 때 락을 획득하고 실행 후 해제하는 방식으로 동기화한다.
프로세스 동기화에 대해 설명해 주세요.
- 프로세스들 사이의 수행 시기를 맞추는 것
-
실행 순서 제어
: 프로세스를 올바른 순서대로 실행하기
상호 배제
: 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기
- 공유 자원을 동시에 사용하지 못하게 실행을 제어하는 기법
-임계 구역
을 설정하여상호 배제
한다.
-
Critical Section(임계 구역)에 대해 설명해주세요.
- 공유 자원에 접근하는 코드 중 동시에 실행하면 문제(경쟁 조건)가 발생하는 코드 영역
- 프로그램에서
임계자원
을 이용하는 부분- 임계 자원 : 둘 이상의 프로세스가
공유할 수 없는 자원
- 임계 자원 : 둘 이상의 프로세스가
- 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
- 위 그림에서 각 프로세스가
전역 변수를 사용하는 부분(예금 확인->입금->저장)
이 임계구역이다.
- 위 그림에서 각 프로세스가
- 프로그램에서
- 임계 구역에서는 프로세스들이 동시에 작업하면 안된다.
- 한 번에 하나의 프로세스만 임계 구역에 진입할 수 있어야 한다.
임계구역 문제 : 생산자-소비자 문제
- 임계구역에 관련된 전통적인 문제이다.
- 생산자는 물건을 계속 생산해서 버퍼에 넣고, 소비자는 버퍼에서 물건을 계속 가져온다. (공유변수
sum
) - 생산자와 소비자 코드가 동시에 수행되면 전역 변수 값을 덮어쓰게 되어 실행 순서에 따른 결과 차이(경쟁 조건) 가 발생한다.
임계 구역
은 버퍼이다.
public class ProducerConsumerProblem {
private static final int BUFFER_SIZE = 5;
private static int[] buffer = new int[BUFFER_SIZE];
private static int in = 0, out = 0;
private static int counter = 0;
static class Producer implements Runnable {
public void run() {
int nextp = 0;
while (true) {
if ((in + 1) % BUFFER_SIZE != out) { // 버퍼가 꽉 차지 않았는지 확인
buffer[in] = nextp;
in = (in + 1) % BUFFER_SIZE;
counter++;
System.out.println("생산: " + nextp + ", Counter: " + counter);
nextp++;
}
}
}
}
static class Consumer implements Runnable {
public void run() {
int nextc;
while (true) {
if (in != out) { // 버퍼가 비어있지 않은지 확인
nextc = buffer[out];
out = (out + 1) % BUFFER_SIZE;
counter--;
System.out.println("소비: " + nextc + ", Counter: " + counter);
}
}
}
}
public static void main(String[] args) {
Thread producerThread = new Thread(new Producer());
Thread consumerThread = new Thread(new Consumer());
producerThread.start();
consumerThread.start();
}
}
생산자-소비자 문제 해결 방법: 상호배제와 동기화가 필요하며 세마포어를 이용해 구현할 수 있다.
임계 구역 문제 해결 조건
상호 배제
: 한 프로세스가임계 구역
에 들어가면 다른 프로세스는임계 구역
에 들어갈 수 없어야 한다.한정 대기
: 어떠한 프로세스도 임계 구역에 들어가지 못해 무한 대기하지 않아야 한다.진행의 융통성
: 한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다.
Mutual Exclusion(상호배제)에 대해 설명해주세요.
- 한 프로세스가
임계 구역
에 들어가면 다른 프로세스는임계 구역
에 들어갈 수 없어야 한다.- 임계 구역에 들어가기를 원하는 프로세스는
진입 상호배제
를 수행해야한다.진입 상호배제
: 프로세스 하나가 임계 구역에 있으면 다른 프로세스가 임계영역에 들어가지 못하게 하는 것출구 상호배제
: 임계 구역을 떠나는 프로세스가 다른 프로세스의 진입을 허용하는 것
- 임계 구역에 들어가기를 원하는 프로세스는
- 목적 : 특정 공유 자원을 한 순간에 한 개의 프로세스만 사용할 수 있도록 한다.
- 프로세스들이
충돌 없는 연산(데이터 읽기 연산)
을 수행하는 경우에는 공유 데이터를 동시에 접근할 수 있다. - 여러 프로세스가 사용하는
공통 변수
나파일
은 각 프로세스가 하나씩 차례대로 읽거나 쓰도록 해야한다.
- 프로세스들이
상호 배제를 수행하면 교착상태와 기아상태가 발생한다.
Mutual Exclusion(상호배제)를 구현하는 방법은?
- 검사와 지정, 피터슨, 데커 알고리즘이 있다.
- 뮤텍스, 세마포어, 모니터 등을 사용할 수 있다.
임계 구역 문제를 고려한 코드 설계
상호 배제 조건을 충족하지 않는 경우
- 새롭게 임계구역을 진입하는 프로세스는 잠금을 걸고 작업을 하며, 작업을 마치면 다른 프로세스가 사용할 수 있도록 잠금을 해제한다.
lock=true
로 설정 직전, 문맥교환이 발생하면 둘 다 임계구역에 진입하게 된다.
한정 대기를 충족하지 않는 경우
- 임계 구역에 진입하기 직전에 잠금을 설정하고, 다른 프로세스가 잠금을 설정하지 않았다면 임계구역에 진입한다.
lock=true
후 문맥 교환이 발생하면 둘 다 임계구역에 진입하지 못하고 무한 대기하는 상황이 발생한다.교착 상태
(프로세스가 살아있으나 작업이 진행되지 못하는 상태)가 발생한다.
진행의 융통성 문제
- 공유 변수
lock
을 통해 다른 프로세스가 임계구역에 없으면 진입한다. - 문제: 서로 번갈아가면서 실행된다.
- 프로세스의 우선순위에 상관없이 번갈아 진행하기때문에 한 프로세스가 다른 프로세스의 진행을 방해한다.
하드웨어로 해결하는 방법: 검사와 지정 (test-and-set)
- 임계 영역에 진입하기 전에 플래그를 검사하고 설정하는 방식이다.
- 하드웨어 지원을 받아
while(lock==true)
: 잠금 검사 와lock=true
: 검사 후 잠금 설정 문을 한꺼번에 실행한다.- 명령어 실행 중간에 타임아웃이 걸려 임계구역을 보호하지 못하는 문제가 발생하지 않는다.
- 임계 구역 문제를 해결할 수 있다.
- 편리하지만 바쁜 대기를 사용하여 검사하므로 자원 낭비가 발생한다.
피터슨 알고리즘
- 두 프로세스 간의 상호 배제를 보장하는 알고리즘
lock1
,lock2
와turn
공유 변수를 사용한다.- 임계구역에 진입하기 전에 잠금을 걸고 turn을 설정한다.
- turn은 두 프로세스가 동시에 잠금을 걸고 임계구역에 못들어가는 상황에 대비하기 위한 장치다.
- 임계 구역 문제의 3가지 조건을 모두 만족하지만 2개의 프로세스만 사용가능하다는 한계가 있다.
데커 알고리즘
- 잠금을 걸고 다른 프로세스도 동시에 잠금을 걸었다면 차례(turn)을 확인한다.
- 임계 구역 문제의 3가지 조건을 모두 만족하지만 프로세스가 늘어나면 변수도 늘어나고 전체 알고리즘도 복잡해진다.
피터슨 vs 데커
- 피터슨 알고리즘 : 조건 검사 전 turn 값을 상대방에게 먼저 넘겨준다.
- 데커 알고리즘 : 임계 영역 실행 후 turn 값을 상대방에게 넘겨준다.
- 공통점 : 소프트웨어적으로 상호 배제를 구현한 알고리즘
피터슨과 데커 알고리즘은 구조가 복잡하여 현재 잘 사용되지는 않는다.
뮤텍스(Mutex)
에 대해 설명해주세요.
- 하나의 공유 자원에 접근하는 프로세스들을 위한 동기화 도구
- 임계 구역을 잠금으로써 프로세스 간의 상호 배제를 이룬다.
lock
: 자물쇠 역할, 프로세스들이 공유하는 전역 변수acquire
: 임계 구역이 잠겨있는지 확인하고 열려 있다면 잠그는 역할release
: 임계 구역의 잠금을 해제하는 역할
- 임계 구역이 잠겨 있는지를 반복적으로 확인하는
바쁜 대기
를 수행한다.
세마포어에 대해 설명해주세요.
기존 임계구역 문제 해결 알고리즘의 문제점
- 앞서 살펴본 임계구역 문제 해결 알고리즘은
바쁜 대기
를 사용하여 자원을 낭비하거나, 알고리즘이 너무 복잡하다.- 세마포어는 간단하고 사용하기 쉽다.
뮤텍스 vs 세마 포어
- 뮤텍스 : 하나의 공유 자원에 접근하는 프로세스를 상정한 동기화 도구
- 세마 포어: 공유 자원이 여러 개 있을 경우에도 적용이 가능한 동기화 도구
세마포어란?
- 공유 자원이 여러 개 있는 임계 구역 문제도 해결할 수 있는 동기화 도구
- 프로세스가 임계구역에 진입하기 전에 사용중이라고 표시하고(
P()
) 임계구역에 들어간다. - 프로세스가 작업을 마치고 임계구역을 나올때 비었다고 표시한다. (
V()
)- 세마포어는 다음 프로세스에 임계구역을 사용하라는
동기화 신호
를 보낸다.
- 세마포어는 다음 프로세스에 임계구역을 사용하라는
임계 구역 문제를 해결하는 간단하고 사용하기 쉬운 알고리즘이다.
작동 과정
Semaphore(n)
: 현재 사용 가능한 자원의 수(n
)가 저장된다.P() 연산 (또는 wait())
:잠금을 수행
하는 코드로, RS가 0보다 크면 1만큼 감소시키고 임계구역에 진입하며 0보다 작으면 대기한다(block()
).wake_up()
신호를 보낼때까지 대기한다.
V() 연산 (또는 signal())
:잠금 해제
와동기화
를 수행하는 코드로, RS 값을 1 증가시키고 세마포어에서 기다리는 프로세스에 임계구역에 진입해도 좋다는wake_up()
신호를 보낸다.- 대기하는 프로세스는
세마포어 큐
에 저장되어 있다가wake_up()
신호를 받으면 큐에서 나와 임계구역에 진입한다.
- 대기하는 프로세스는
P()와 V()의 내부 코드는 검사와 지정을 사용하여 완전히 실행되도록 구현한다.
상호 배제를 위한 큐와 조건 변수에 대한 큐는 다르다.
상호 배제를 위한 큐
: 모니터에 진입하기 위해 삽입된다.조건 변수에 대한 큐
: 실행이 중단된(대기하는) 프로세스들이 삽입된다.
세마포어를 이용해 임계 구역 보호하기
세마포어는 공유 자원이 여러개일때도 사용할 수 있다.
- 2개의 공유자원에 대해 3개의 프로세스가 작업하는 상황
뮤텍스(Mutex)와 이진 세마포어의 차이에 대해 설명해주세요.
- 뮤텍스는 소유권 개념이 있고, 이진 세마포어는 소유권 개념이 없다.
- 뮤텍스 : 락을 획득한 스레드만이 락을 해제할 수 있다.
- 이진 세마포어: 어떤 스레드라도 락을 해제할 수 있다.
모니터에 대해 설명해주세요.
세마포어의 문제점
- 세마포어는 잘못 사용할 경우 임계구역을 보호하지 못하는 문제가 있다.
- 프로그래머가 실수로 P()나 V() 연산을 누락하거나 잘못된 순서로 사용할 경우 심각한 동기화 문제가 발생할 수 있다.
모니터
- 공유 자원을 사용할 때
임계구역 보호
와동기화
를 자동으로 처리하는 고수준의 동기화 도구 - 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공한다.
- 세마포어의
P()
와V()
를 직접 사용할 필요가 없다. - 임계구역의 보호와 프로세스의 동기화가 모니터 내부에서 처리되므로 사용자는 인터페이스의 메서드만 호출하면 된다.
- 세마포어의
- 세마포어에 비해 사용자가 사용하기 편리한 동기화 도구
- 조건 변수를 사용한다.
모니터는 세마포어의 단점을 보완하고 더 안전하고 편리한 동기화 메커니즘을 제공한다.
작동 과정
- 임계 구역에 접근하고자 하는 프로세스는 직접
P()
나V()
를 사용하지 않고 모니터에 작업 요청을 한다. - 모니터는 요청받은 작업을
모니터 큐
에 저장한 후 순서대로 처리하고 그 결과만 해당 프로세스에 알려준다.
모니터 내부 코드 예시
public class SharedBalanceMonitor {
private int balance = 10;
private boolean busy = false;
public synchronized void increase(int amount) {
while (busy) {
try {
wait(); // 큐에서 기다림
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
busy = true;
balance = balance + amount;
busy = false;
notify(); // 다음 프로세스 깨움
}
public synchronized void decrease(int amount) {
while (busy) {
try {
wait(); // 큐에서 기다림
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
busy = true;
balance = balance - amount;
busy = false;
notify(); // 다음 프로세스 깨움
}
public synchronized int getBalance() {
return balance;
}
public static void main(String[] args) {
SharedBalanceMonitor monitor = new SharedBalanceMonitor();
Thread increaseThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
monitor.increase(10);
System.out.println("New balance: " + monitor.getBalance());
}
});
Thread decreaseThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
monitor.decrease(5);
System.out.println("New balance: " + monitor.getBalance());
}
});
increaseThread.start();
decreaseThread.start();
}
}
교착 상태
데드락(교착 상태)
이 무엇인가요?
- 2개 이상의 작업이 동시에 이루어지는 경우, 다른 작업이 끝나기만 기다리며 작업을 더이상 진행하지 못하는 상태
- 시스템 자원을 사용하거나 잠금을 사용할 때 발생한다.
시스템 자원 사용
: 공유할 수 없는 자원을 할당받은 후 양보하지 않은 경우잠금
: 한 변수를 할당받은 상태에서 다른 변수를 기다리면 교착 상태가 발생한다.
아사현상(기아현상) vs 데드락
아사현상
: 잘못된 정책으로 특정 프로세스의 작업이 지연되는 문제데드락
: 여러 프로세스가 작업을 진행하다보니 발생하는 자연적인 현상- 교착 상태가 발생하면 강압적으로 해결해야한다.
자원 할당 그래프
- 어떤 프로세스가 어떤 자원을 사용하고 있고, 어떤 자원을 기다리고 있는지 표현하는 그래프
- 규칙
- 프로세스는 원으로, 자원의 종류는 사각형으로 표현한다.
- 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현한다.
- 프로세스가 어떤 자원을
할당
받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시한다. - 프로세스가 어떤 자원을
기다리고 있다면
프로세스에서 자원으로 화살표를 표시한다.
- 교착 상태는 자원 할당 그래프를 통해 표현할 수 있다.
데드락(교착 상태) 발생 조건 4가지를 설명해 주세요.
- 상호 배제, 비선점, 점유와 대기, 원형 대기의 네가지 조건을
동시에 만족
해야만 교착 상태가 발생한다.
상호 배제(교착 상태)
- 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야한다.
임계 구역
으로 보호되므로 다른 프로세스가 동시에 사용할 수 없다.
점유와 대기
- 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야한다.
비선점
- 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야한다.
순환(원형) 대기
- 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야한다.
데드락(교착 상태)을 막는 방법에 대해 설명해주세요.
- 교착 상태를 해결하는 방법은
예방
,회피
,검출
이며 자원을회복
하는 방법도 있다.
교착 상태 예방
- 교착 상태를 유발하는 4가지 조건을 무력화한다.
- 실효성이 적어 잘 사용되지 않는다.
상호 배제 예방
- 시스템 내의 모든 자원을 공유하도록 하면 된다.
- 하지만 현실적으로 모든 자원을 공유할 수 없으며 상호 배제를 적용하여 보호하는 자원이 있다.
- 시스템 내에는 공유할 수 없는 자원이 있다.
- 상호 배제를 무력화하는 것은 사실상 어렵다.
비선점 예방
- 모든 자원을 빼앗을 수 있게 만드는 방법이다.
임계 구역
을 보호하기 위해 잠금을 사용하면 자원을 빼앗을 수 없을 뿐만 아니라상호 배제
도 보장할 수 없다.- 선점은 아사 현상을 일으킨다.
- 비선점을 무력화하는 것은 사실상 어렵다.
점유와 대기 예방
- 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법이다.
- 전부 할당하거나 아예 할당하지 않는 방식을 적용한다. (
all-or-nothing
)
- 전부 할당하거나 아예 할당하지 않는 방식을 적용한다. (
- 프로세스는 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나, 그렇지 못할 경우 자원을 모두 반납해야한다.
- 단점
- 프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다.
- 자원의 활용성이 떨어진다.
- 많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다.
- 결국 일괄 작업 방식으로 동작한다.
원형 대기 예방
- 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법이다.
- 자원을 한 방향으로만 사용하도록 설정함으로써 원형 대기를 예방할 수 있다.
- 단점
- 프로세스 작업 진행에 유연성이 떨어진다.
- 자원을 한 방향(숫자가 큰 방향으로만)으로 할당하므로 자원 사용에 제약이 따른다.
교착 상태 예방 정리
- 자원을 보호하기 위해 상호 배제와 비선점을 예방하기 어렵다.
- 점유와 대기, 원형 대기는 프로세스 작업 방식을 제한하고 자원을 낭비하기 때문에 사용할 수 없다.
교착 상태 예방은 실제로 구현하기 어렵다.
교착 상태 회피
- 교착 상태가 발생하지 않는 수준으로 자원을 할당한다.
- 자원을 할당하다가 교착 상태를 유발할 가능성이 있다고 판단되면 자원 할당을 중단하고 지켜본다.
- 자원을 얼마만큼 할당해야 교착 상태가 발생하지 않는다는 보장이 없기 때문에 실효성이 적다.
안정 상태와 불안정 상태
- 자원의 총수와 현재 할당된 자원의 수를 기준으로 시스템을
안정 상태
와불안정 상태
로 나눈다.- 할당된 자원이 적으면 안정 상태가 크고, 할당된 자원이 늘어날수록 불안정 상태가 커진다.
- 불안정 상태가 커질 수록 교착 상태가 발생할 가능성이 높아진다.
- 안정 상태를 유지할 수 있는 범위 내에서 자원을 할당함으로써 교착 상태를 피한다.
은행원 알고리즘
- 자원의 총수와 현재 할당된 자원의 수를 기준으로 시스템을
안정 상태
와불안정 상태
로 나누고, 시스템이 안정 상태를 유지하도록 자원을 할당한다. - 은행이 대출을 하는 방식과 유사하기 때문에
은행원 알고리즘
이라 불린다.- 은행은 대출 금액이 대출 가능한 범위 내(
안정 상태
)이면 대출하고, 그렇지 않으면 거부한다.
- 은행은 대출 금액이 대출 가능한 범위 내(
- 용어
가용 자원
: 시스템 내 현재 사용할 수 있는 자원의 수 (전체 자원-전체 프로세스 할당 자원)최대 자원
: 각 프로세스가 선언한 최대 자원의 수할당 자원
: 프로세스에 현재 할당된 자원의 수기대 자원
: 각 프로세스가 앞으로 사용할 자원의 수 (최대 자원-할당 자원)
- 각 프로세스의
기대 자원
과 비교하여가용 자원
이 하나라도 크거나 같으면 자원을 할당한다. 안정 상태
: 각 프로세스의 기대 자원과 비교하여 가용 자원이 크거나 같은 경우가 한번 이상인 경우
불안정 상태
: 현재 남은 자원으로는 어떤 프로세스도 끝낼 수 없다.
교착 상태 문제
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다.
- 시스템의 전체 자원 수가 고정적이어야 한다.
- 실제로는 새로운 자원이 추가되거나 일시적인 고장이 빈번하므로 시스템의 자원 수가 유동적이다.
- 자원이 낭비된다.
- 모든 불안정 상태가 교착 상태가 되는 것은 아님에도 불구하고 자원을 할당하지 않는 것은 낭비이다.
교착 상태 회피는 구현할 수는 있지만 자원을 낭비하는 문제가 있다.
교착 상태 검출
과 회복
- 교착 상태 검출 :
자원 할당 그래프
를 사용하여 교착 상태를 발견한다.- 교착 상태가 발생하면 교착 상태 회복 단계가 실행된다.
- 교착 상태 회복 : 교착 상태를 검출한 후 해결한다.
교착 상태 검출
- 타임아웃 이용
- 일정 시간동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리한다.
- 문제
- 교착 상태가 아닌 다른 이유로 작업이 진행되지 않은 엉뚱한 프로세스가 강제 종료될 수 있다.
- 모든 시스템에 적용할 수 없다.
- 분산 데이터베이스라면 네트워크 문제로 작업이 진행되지 않을 수도 있다.
- 작업이 간단하여 대부분의 데이터베이스나 운영체제에서 선호한다. (
가벼운 교착상태 검출
)
- 자원 할당 그래프 이용
- 사이클이 존재하면 운영체제는 교착 상태가 발생한 것으로 판단한다.
- 자원 할당 그래프를 유지하고 갱신하고 사이클을 검사하는 추가 작업으로 인해 오버헤드가 발생한다. (
무거운 교착상태 검출
)
교착 상태 회복
선점을 통한 회복
: 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식이다.프로세스 강제 종료를 통한 회복
: 교착 상태를 유발한 프로세스를 강제로 종료한다.-
- 교착 상태를 일으킨 모든 프로세스를 동시에 종료
- 교착 상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료
-
+ 교착 상태 무시 (타조 알고리즘)
- 교착 상태를 아예 무시하는 방법
728x90