상세 컨텐츠

본문 제목

[OS] 교착상태와 데드락, 뮤텍스와 세마포어

Computer Science/OS

by G_Batman 2025. 4. 24. 01:24

본문

728x90

임계영역(Critical Section)

임계영역(Critical Section)이란 여러 프로세스 또는 스레드가 동시에 자원에 접근할 경우 문제가 발생할 수 있는 코드 영역을 말합니다.

임계영역에서는 아래 3가지 조건을 만족해야 교착상태를 피할 수 있습니다

  • 상호 배제(Mutual Exclusion)
    하나의 프로세스가 임계영역에 있다면, 다른 프로세스는 들어갈 수 없다.
  • 진행(Progress)
    임계영역에 아무도 없는 상태라면, 진입을 요청하는 프로세스 중 어느 것이 들어갈지를 적절히 결정해주어야 한다.
  • 한정 대기(Bounded Waiting)
    한 프로세스가 계속해서 임계영역에 들어가지 못하는 일이 없도록 보장해야 합니다.

뮤텍스(Mutex)

뮤텍스(Mutual Exclusion Object)는 임계영역에 대한 접근을 제어하는 락(Lock)입니다.

  • 하나의 스레드만 락을 획득할 수 있으며, 락을 획득한 스레드만 해제할 수 있습니다.
  • 락을 통해 동시성 제어를 하며, 동시에 하나의 스레드만 접근 가능하도록 만듭니다.

 

세마포어(Semaphore)

세마포어는 뮤텍스보다 유연한 동기화 도구입니다. 자원의 동시 접근 가능 개수를 제어할 수 있습니다.

  • counting semaphore: 0 이상의 값을 가질 수 있음 → 동시에 여러 스레드 접근 가능
  • binary semaphore: 0 또는 1만 가짐 → 뮤텍스처럼 동작하지만 역시나 제어권은 스레드에 있다.

특징

  • 세마포어는 다른 스레드가 signal로 값을 증가시킬 수 있음
  • wait() → 자원 접근 대기
    signal() → 자원 해제 및 다른 프로세스에 접근 허용

 

교착상태(Deadlock)

교착상태란 여러 프로세스가 서로가 가진 자원을 기다리며 무한 대기에 빠지는 상태입니다.

 

교착 상태 발생 조건 (점순이 비상ㅋ)

  1. 상호 배제(Mutual Exclusion)
    자원은 한 번에 하나의 프로세스만 사용할 수 있어야 함
  2. 점유와 대기(Hold and Wait)
    자원을 가진 상태에서 다른 자원을 기다리는 상태
  3. 비선점(No Preemption)
    자원을 강제로 빼앗을 수 없음
  4. 원형 대기(Circular Wait)
    프로세스 간 자원 요청이 원형 구조를 이룸

교착 상태 해결 방법

  • 예방(Prevention)
    위 조건 중 하나를 사전에 제거하여 발생 자체를 막음
  • 회피(Avoidance)
    대표 알고리즘: 은행가 알고리즘(Banker's Algorithm)
    시스템 상태를 계속 평가하여 안전한 경우에만 자원 할당
  • 발생 후 회복(Recovery)
    교착상태가 감지되면
    프로세스를 종료하거나 자원을 강제로 회수
728x90

'Computer Science > OS' 카테고리의 다른 글

[OS] CPU 스케줄링 알고리즘  (2) 2023.06.22
[OS] CPU 스케줄링  (0) 2023.06.21
[OS] 스레드(Thread)  (0) 2023.06.20
[OS] 프로세스의 연산  (0) 2023.06.19
[OS] 프로세스(Process)  (3) 2023.01.05

관련글 더보기

댓글 영역