Interview_Synchronization/ Semaphore/ Deadlock
✅ 병행성(동시성)에대해 설명해주세요
- concurrency
- CPU는 한번에 한 개의 작업만 처리 가능
- 빠른 속도로 여러 작업을 번갈아 처리하여 사용자 입장에서는 동시에 여러 작업이 처리되는 것처럼 느껴짐
- ⚠️ 공유 자원에 대해 문제가 생길 수 있어
synchronization필요
✅ 병렬성에 대해 설명해주세요.
- parralelism
- 실제로 동시에 여러 작업 처리
- multi processor
- CPU multi-thread
Concurrency problem 🆚 Race condition
- Concurrency problem: 동시에 여러 작업이 번갈아 처리되다보니 공유 자원이 의도치않게 변경
- Race condition: 프로세스가 자원을 동시에 처리하려고 경쟁하다보니 자원이 의도치않게 변경
✅ 프로세스 동기화에 대해 설명해 주세요.
- 여러 프로세스가 같은 자원에 동시에 접근하더라도 결과가 일정하도록 보장
consistent하도록race condition방지- 프로세스가 순서 지켜서 작업하도록
- 예를 들어
lock을 걸기(mutex,semaphore)
✅ Critical Section에 대해 설명해주세요.
- 공유 자원에 접근하는 코드
- 공유 자원에 접근한다 🟰
Critical Section에 진입한다 - 이 코드에 진입하기 전
lock을 걸고, 나오면서unlock하는 방식으로 동기화 가능
✅ Race Condition이 무엇인가요?
- 여러 프로세스가 동시에 공유 자원에 접근하는 상태
- 동시에 자원을 쓰려고 하다 보니 공유 데이터가 예상치 못하게 처리되는 문제가 있음
- 만약 공유 자원에 동시에 접근한다면 프로세스 수행 순서에 따라 결과가 달라질 수 있다.
synchronization필요
✅ Race condition이 발생하는 이유
- 자원에 대한
read,write,save과정이atomic하게 실행되지 않아서
✅ Race condition은 언제 발생하나요?
kernel mode에서 수행 중에interrupt➡️ISRkernel mode에서 수행 중에system call, 그래서context switching발생- multi processor 환경
✅ Race Condition을 어떻게 해결할 수 있나요?
- mutual exclusion
lock을 걸기- 프로세스 간 작업 순서를 정하기
✅ Mutual Exclusion에 대해 설명해주세요.
- 단 하나의 프로세스만
CS, 즉공유자원에 접근할 수 있다. - 어떤 프로세스가 자원에 접근하고 있으면 다른 프로세스들은 기다려야 한다.
✅ Process Synchronization 문제를 풀기 위한 조건 3가지는?
- mutual exclusion
- progress:
CS가 비어있고CS에 들어가고자 하는 프로세스가 있으면 들어가게 해 줘야 한다. - bounded waiting: 프로세스가
CS에 들어가기 위해 기다리는 횟수가 제한되어야 한다. - 동일 속도 가정
✅ Mutual Exclusion을 할 수 있는 방법은?
- SW:
Peterson's Algorithm - HW:
TAS - OS:
semaphore,mutex,block/wakeup - language-level:
monitor
✅ Busy waiting(spin lock)이란?
- 프로세스가
CS에 들어가지 못하는 상황에서도 while문을 돌며 계속 들어갈 수 있는지 체크하며 기다리는 것- 👎🏻 CPU, memory를 계속 쓰면서 기다린다
✅ Peterson's Algorithm에 대해 설명해주세요.
turn: 프로세스 순서 번호boolean flag:CS에 들어가고자 하는 의사 표현boolean flag들어 의사 표현하고,만약
flag들고있는 프로세스가 2개 이상이라면turn을 확인하여 순서 정하기- 👎🏻 busy waiting(spin lock)
✅ TAS 에 대해 설명해주세요.
Test And Set이라는 함수read, lock, write과정을atomic하게 실행
✅ 뮤텍스(Mutex)에 대해 설명해주세요.
- 공유 자원을
lock,unlock하는 방식으로 자원에 대한 접근 제한 - 공유 자원을 쓰기 전에
lock CS에서 나오면서unlock해서 다른 자원이 사용할 수 있도록
✅ 세마포어에 대해 설명해주세요.
synchronization을 제공하는 추상 자료형semaphore variable: 자원 개수- 자원의 개수를 세고 남은 개수만큼 프로세스에게 할당
P(자원 할당,S--),V(자원 반납,S++)연산을 atomic하게 실행- 👎🏻 spinlock문제는 해결 못함
- 👎🏻 프로그래머가
P,V연산을 실수하면 모든 자원에 대해deadlock - 💊 고수준 동기화 기능을 제공하는 monitor
✅ 자원의 개수를 세는 걸 굳이 세마포어 변수로 하는 이유는?
P연산과V연산이 atomic하게 실행된다고 가정하기 때문
뮤텍스(Mutex) 🆚 이진 세마포어의 차이에 대해 설명해주세요.
- 뮤텍스는 공유 자원에
lock을 건 프로세스만unlock할 수 있고 - 이진 세마포어는
lock,unlock하는 프로세스가 다를 수 있음
✅ 세마포어의 종류
- counting semaphore
- binary semaphore
✅ block/wakeup에 대해 설명해주세요.
- 세마포어 ➕ Busy waiting(spin lock) 문제 해결
- 세마포어를 일종의
list처럼 만들고 - 프로세스는
CS에 들어갈 수 있는지 확인 - 못 들어간다고 판단되면
block되어queue에서 기다리다가 - 여유 자원이 생겨 들어갈 수 있게 되면
wakeup - 👍🏻 자원 기다릴 때 CPU, memory 소모 ❌
Busy wait 🆚 Block/wakeup
- 일반적으로
block/wakeup이 효율적 - 만약
CS에 대한 경쟁이 많이 없다면Busy wait해도 됨
✅ 모니터에 대해 설명해주세요.
synchronization을 더 쉽게 구현하고자,language level에서 synchronization을 제공- 모니터 내부에
공유 자원,공유 자원 접근 procedure이 있고 - 모니터 내부에는 단 하나만의 프로세스만 존재 가능
- 모니터 진입 가능 여부에 따라
큐에 프로세스 대기시키고, 깨우기
- 모니터가 공유 자원 접근을 관리, 책임
- 👍🏻 프로그래머가
lock,P, V연산등 신경쓸 필요가 없음, 간편하게synchronization문제 해결!
✅ 동기화의 고전적인 문제
- Bounded Buffer Problem(Consumer, Producer problem)
- Readers and writers Problem
- Dining Philosophers Problem
✅ 데드락이 무엇인가요?
- 프로세스가 자신이 가진 자원은 내놓지 않으면서 다른 자원을 요청할 때
- 다른 프로세스는 내 프로세스가 가진 자원을 요청하면서
- 프로세스 실행이 block
✅ Deadlock example
- 자원1, 자원2를 가져야 수행 가능한 프로세스1, 프로세스2
- 프로세스 1은 자원1을 가지고, 프로세스2는 자원2를 가지고
- 서로가 자원을 반납할 때를 기다리는데
수행 완료 전에는 자기 자원을 절대 내놓지 않음
- 💊 자원 얻는 순서 정하기
- 💊 둘 다 가질 수 있는 상황에서만 가지기
✅ 데드락에서 말하는 자원이란?
- 하드웨어, 소프트웨어 자원 등 포함
✅ 프로세스가 자원을 얻고 사용하는 절차
- Request
- Allocate
- Use
- Release
✅ Deadlock이 생기는 이유?
- 공유 자원에는 한 번에 한 개의 프로세스만 접근 가능하고
- 프로세스는 자신의 자원을 내놓지 않으며
- 프로세스의 자원을 강제로 빼았을 수 없기 떄문
✅ 데드락 발생 조건 4가지를 설명해 주세요.
- mutual exclusion: 한번에 한 프로세스만 자원 접근 가능
- hold and wait: 할당된 자원을 가진 상태에서 다른 자원 요청
- non-preemption: 프로세스에게 할당된 자원은 뺴앗을 수 없음
- circular wait: 점유와 대기하는 프로세스가 순환 형태를 이룬다
✅ Resource allocation graph란?
- 자원 할당을 그래프로 표현
- 자원 당 인스턴스 1개 ➡️ cycle 있으면
deadlock - 자원 당 인스턴스 여러개 ➡️
deadlock일 수도 있음
✅ 데드락을 막는 방법에 대해 설명해주세요.
- deadlock prevention: 4가지 조건 중 하나라도 불만족
- deadlock avoidance:
deadlock이 생기지 않는 상황에서만 자원 할당
✅ deadlock prevention 방법에 대해 설명해주세요
- 앞선 데드락 발생 조건 4가지 중 한개라도 위배
- mutual exclusion: 위배 불가
- hold and wait: 실행 불가하면 반납하기 💊 시작할 때 모든 자원 할당 💊 추가요청할 떄는 가진 자원 내려놓고 다시 요청
- non-preemption: 실행 불가하면 빼앗기기 👎🏻 모든 자원을 preempt할 수는 없음
- circular wait: 자원 할당 순서 정하기
✅ deadlock avoidance 방법에 대해 설명해주세요
- 프로세스의 미래 최대 자원 사용량을 미리 알고
deadlock이 생기지 않는다고 판단될 때만 자원 할당 safe state에 있을 때만 할당,safe sequence가 있는 상태safe sequence: 현재 가용자원 ➕ 미래 반납될 자원으로 프로세스 모두 처리 가능한가?- 자원 당 인스턴스 1개:
Resource allocation graph의 점선도 포함해서safe한지 판단 후 할당 - 자원 당 인스턴스 여러개:
Bankers algorithm사용해서safe한지 판단 후 할당
✅ deadlock detection and recovery 방법에 대해 설명해주세요.
deadlock발생 허용, 감지 후 회복Resource allocation graph또는banker's algorithm을 사용해deadlock을detect하고terminate,preemption을 통해deadlock recovery- 👎🏻 starvation 발생 가능
✅ Bankers algorithm이란?
- allocation: 현재 프로세스에게 할당된 자원
- max: 최대 자원 사용량
- available: 현재 가용 자원
need: 각 프로세스가 미래에 추가 요청할 수 있는 자원량
deadlock avoidance에서는available > need일 때만 자원 할당
✅ deadlock ignorance 방법에 대해 설명해주세요.
deadlock방치- 대부분 OS가 채택하는 방식
- 사람이 프로세스를 멈추는 등 사람이 해결하도록 한다.
✅
✅
✅
✅
This post is licensed under CC BY 4.0 by the author.