본문 바로가기

운영체제(OS)/프로세스 관리

동기화 처리 및 데드락

Process Synchronization

  • 협력하는 프로세스들 사이에서 실행 순서 규칙을 정하여 공유된 자원의 일관성 (consistency)을 보장하는 것
  • 하나의 프로세스가 공유된 자원에 접근하고 난 뒤에 다른 프로세스가 쓰도록 만들어주어야 함

Critical Section (Shared Resource)

n개의 프로세스들이 있을 때, 이 프로세스들은 공유된 자원을 사용하기 위해 경쟁한다 (race condition). 각각의 프로세스에는 “code segment”라는 것이 있는데 일반적으로 “Critical Section (CS)”이라고 불린다. CS을 통해 공유된 자원에 접근할 수 있다.

CS resource that “allows only one user at a time”.

  • 위의 문장과 같이 한 번에 하나의 프로세스만 허용
  • Race condition이 일어나지 않기 위해 사용

Solutions for CS problem

  • Mutual exclusion (상호 배제)
    • 하나의 프로세스가 CS 내에서 실행 중일 때 다른 프로세스는 CS으로 진입할 수 없음
  • Progress (진행)
    • CS에서 실행 중인 프로세스가 없다면 CS으로 진입하려는 프로세스들 중 하나는 반드시 유한한 시간 내에 진입해야함
  • Bounded waiting (한정된 대기)
    • 다른 프로세스의 starvation (기아)를 방지하기 위해 CS에 한 번 접근했던 프로세스는 다시 CS에 들어갈 때 제한을 둠
    • 즉, CS에 대한 진입 요청 후 무한히 기다리지 않도록 함

Mutex와 Semaphore

  • Synchronization 방법 중 여러 프로세스나 스레드가 공유 자원에 접근하는 것을 제어하기 위한 방법들

Mutex

  • “Mutual Exclusion”의 약자로서 CS를 가진 프로세스 (or 스레드)들에 의해 소유될 수 있는 key와 lock, unlock을 기반으로 한 상호 배제 기법
  • 오직 1개만의 프로세스 (or 스레드)만 접근 가능
  • Mutex는 semaphore가 될 수 없음
  • Mutex 구현의 문제: starvation (기아) - 무한 대기
    • 높은 우선순위의 프로세스가 계속 들어오면 무한히 대기만 하는 상황이 발생
    • 시간이 지날 수록 우선순위를 높여주는 방법으로 해결 (aging)

Semaphore

  • Signaling mechanism. 현재 공유 자원에 접근할 수 있는 프로세스 (or 스레드)의 수를 나타내는 값을 두어 상호 배제를 달성하는 기법
  • Semaphore의 정수형 변수인 S 만큼 프로세스 (or 스레드)가 접근할 수 있음
  • Semaphore는 mutex가 될 수 있음
  • Semaphore 구현의 문제: busy waiting
    • Lock의 해제를 기다리는 동안 빈 반복문을 계속 도는 것을 반복하기 때문에 context switching이 발생
    • 따라서 block()을 통해서 프로세스를 대기 상태로 전환하고 CPU 스케줄링을 실행

Reference


Deadlock

  • 두 개 이상의 프로세스가 서로 lock을 해제하기만을 기다리는 상황으로써 서로의 작업이 끝나기만을 기다리고 있는 상태. 결과적으로 아무것도 완료되지 못하는 상태
  • CS에 아무것도 들어있지 않은데 deadlock이 걸려서 아무도 들어갈 수 없는 상태
  • Multi-programming에서 흔히 발생할 수 있는 문제

Deadlock의 발생 조건

  • Mutual exclusion (상호 배제): 자원은 한 번에 하나의 프로세스만이 사용할 수 있어야 함
  • Hold and wait (점유 대기): 하나의 프로세스가 최소한 하나의 자원을 점유하고 있으면서도 다른 프로세스에 할당되어 있는 자원을 추가로 점유하기 위해 대기하고 있어야 함
  • No preemption (비선점): 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음
  • Circular wait (순환 대기): 프로세스의 집합 {P_0, P_1}이 있다고 했을 때, P_0의 프로세스는 P_1의 프로세스가 점유한 자원을 대기하고, P_1의 프로세스는 P_0의 프로세스가 점유한 자원을 대기해야 함

 

 

https://includestdio.tistory.com/12

'운영체제(OS) > 프로세스 관리' 카테고리의 다른 글

프로세스 구조 및 관리 기법  (0) 2020.08.17