기술 정리 & CS/기술면접 대비

[기술면접 대비] Operating System 2 - Mutex, Semaphore, DeadLock

yubi5050 2024. 6. 16. 13:22

DeadLock , 임계영역

👉 Deadlock (교착상태)의 개념과 막는 방법

Deadlock은 서로 필요한 자원 사용을 위해 상대방의 종료를 기다리며, 무한 대기에 빠지는 상황

ex) 첫 번째 스레드는 두 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리고, 두 번째 스레드도 첫 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리는 상황

 

  • 예방 : 기존 deadlock이 프로세스들 끼리 자원 사용시 서로 상호 배제한단 것이 문제가 되었으니, 자원을 공유하게 하여, 대기에 빠지지 않도록 함
  • 회피 : 프로세스에 대한 교착 상태 가능성을 미리 판단하는 것, 예로 은행원 알고리즘 처럼 사전에 필요로 하는 최대 자원을 파악하여 교착상태를 최대한 피함
  • 탐지 및 회복 : deadlock이 발생함을 확인하고, 회복
    (ex. DB Transaction 끼리 deadlock이 발생했다면 1개의 transaction을 rollback 시키, db에서 발생이유는 서로 lock을 걸어 작업을 수행하기 때문)

 

👉 임계영역(critical section) 이란?

임계 구역은 공유 자원으로 교착상태가 발생 할 수 있어 둘 이상의 스레드가 동시에 접근해서는 안되는 자원 영역.

 

👉 임계영역을 해결하기 위한 방법은?

뮤텍스를 통해 해당 임계영역을 공유하는 스레드들이 서로 겹치지 않고 실행되게 함 (0, 1)

세마포어 변수를 통해 리소스의 상태를 나타내고, 공유 자원에 접근하면 wait 함수를 자원 해제하면 signal 작업 을 수행

 

뮤텍스 & 세마포어

👉 뮤텍스와 세마포어, 스핀락이란?

 

mutex vs semaphore 이미지 출처 : https://heeonii.tistory.com/14

 

뮤텍스(Mutex, 상호배제, Mutual + exclusion)

  • 임계영역(Critical Section)을 가진 쓰레드들의 Running time간 서로 겹치지 않고 단독으로 실행되게 하는 기술
  • 다중 스레드들의 공유 리소스에 대한 접근을 조율하기 위해 Boolean 타입의 Lock 변수 사용
  • 다른 스레드가 공유 자원 접근시 Blokcing 후 대기 큐로 보냄 (locking, unlocking)
  • 즉 뮤텍스 객체를 두 스레드가 동시에 사용할 수 없다.

 

세마포어(Semaphore)

  • 세마포어 변수(0이상 정수)를 통해 리소스의 상태를 나타내고, Wait 및 Signal 함수로 공유 자원에 대한 접근 처리
  • 프로세스가 공유 자원에 접근하면 세마포어에서 wait() 수행, 자원 해제하면 세마포어에서 signal() 작업 수행
  • 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것 (상호 배제 달성)
  • 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값(세마포어 변수)을 이용해 상호배제 달성
  • 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용. 각 프로세스는 세마포어의 값을 확인하고 변경 가능 

 

스핀락

  • 기본적으로 뮤텍스와 유사하며, 기다리면서 Busy-waiting 하며 대기 큐를 갖지 않고, 계속 자주 노티하는 방법
  • Mutex-nonblocking 모델 (상호 배제 되지만, 제어권을 가지진 않음 non-blocking)
  • SpinLock을 언제? (컨텍스트 스위칭 시간이 더 짧을때, 멀티 코어 프로세스일 때)

 

👉 뮤텍스와 세마포어의 차이점

동기화 대상의 개수가 다름 (Mutex는 1개의 Thread 대상, Semaphore는 여러 Thread/Process 대상)

  • Mutex는 자원 소유 책임 있음 (Lock), Semaphore는 자원 소유 책임 없음 (누구든지 Semaphore 변수 접근 가능)
  • Semaphore는 파일 시스템상에 걸쳐 지고 (프로세스니까) 파일상 존재, Mutex는 프로세스 범위에 걸쳐져 프로세스 종료시 초기화 됨

 

👉 크리티컬 섹션 vs 뮤텍스 vs 세마포어

  • 크리티컬 섹션 : 한 프로세스 내의 스레드 사이에서 동기화
  • 뮤텍스 : 여러 프로세스의 스레드 사이에서 동기화  → 프로세스 다중 실행을 막는 등에 사용
  • 세마포어 : 지정된 수 만큼의 스레드가 동시에 실행되도록 동기화

 

👉 race condition 이란?

Race Condition이란 두 개 이상의 프로세스(or 스레드)들이 하나의 자원에 접근하기 위해 동시적으로 경쟁하는 상태

 

다른 글

[기술면접 대비] Operating System 1 - Process, Thread

https://yubi5050.tistory.com/192

 

[기술면접 대비] Operating System 1 - Process, Thread

프로세스 & 스레드 👉 프로세스와 스레드의 차이 프로세스(Process) : OS로 부터 자원을 할당 받아 독립적으로 실행되고 있는 객체(프로그램) 프로세스별로 각각 독립된 메모리 영역(Code, Data, Stack,

yubi5050.tistory.com

 

[기술면접 대비] Operating System 3 - 메모리, 명령어

https://yubi5050.tistory.com/233

 

[기술면접 대비] Operating System 3 - 메모리, 명령어

메모리, 메모리 관리 전략 👉 메모리 영역 4가지 Code : 실행 명령과 코드를 포함 Data : 전역변수, 정적변수 (Static 변수나 Global 변수) Heap : 사용자가 동적으로 할당한 메모리를 위함 Stack : 지역변수

yubi5050.tistory.com