DeadLock , 임계영역
👉 Deadlock (교착상태)의 개념과 막는 방법
Deadlock은 서로 필요한 자원 사용을 위해 상대방의 종료를 기다리며, 무한 대기에 빠지는 상황
ex) 첫 번째 스레드는 두 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리고, 두 번째 스레드도 첫 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리는 상황
- 예방 : 기존 deadlock이 프로세스들 끼리 자원 사용시 서로 상호 배제한단 것이 문제가 되었으니, 자원을 공유하게 하여, 대기에 빠지지 않도록 함
- 회피 : 프로세스에 대한 교착 상태 가능성을 미리 판단하는 것, 예로 은행원 알고리즘 처럼 사전에 필요로 하는 최대 자원을 파악하여 교착상태를 최대한 피함
- 탐지 및 회복 : deadlock이 발생함을 확인하고, 회복
(ex. DB Transaction 끼리 deadlock이 발생했다면 1개의 transaction을 rollback 시키, db에서 발생이유는 서로 lock을 걸어 작업을 수행하기 때문)
👉 임계영역(critical section) 이란?
임계 구역은 공유 자원으로 교착상태가 발생 할 수 있어 둘 이상의 스레드가 동시에 접근해서는 안되는 자원 영역.
👉 임계영역을 해결하기 위한 방법은?
뮤텍스를 통해 해당 임계영역을 공유하는 스레드들이 서로 겹치지 않고 실행되게 함 (0, 1)
세마포어 변수를 통해 리소스의 상태를 나타내고, 공유 자원에 접근하면 wait 함수를 자원 해제하면 signal 작업 을 수행
뮤텍스 & 세마포어
👉 뮤텍스와 세마포어, 스핀락이란?
뮤텍스(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 3 - 메모리, 명령어
https://yubi5050.tistory.com/233
'기술 정리 & CS > 기술면접 대비' 카테고리의 다른 글
[기술 면접 대비] Operating System 4 - CPU Scheduling (1) | 2024.09.22 |
---|---|
[기술 면접 대비] Operating System 3 - 메모리, 명령어 (2) | 2024.06.16 |
[기술면접 대비] Operating System 1 - Process, Thread (2) | 2024.06.16 |
[기술면접 대비] Python & 자료구조 (0) | 2023.06.18 |
[기술면접 대비] Database 3 - Index, Replication (1) | 2022.12.13 |