일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Security
- stride
- 메카님
- 유스케이스
- frequency-domain spectrum analysis
- OWASP
- MLFQ
- SJF
- link layer
- 게임개발
- Unity #Indie Game
- DSP
- OSI 7계층
- DP
- protection
- 운영체제
- Waterfall
- 게임 개발
- AINCAA
- polymorphism
- 배경 그림
- MAC
- Trap
- information hiding
- 유니티
- unity
- 컴퓨터 네트워크
- FIFO
- SDLC
- STCF
- Today
- Total
다양한 기록
데드락 본문
컨커런시 버그 (타이밍 버그)
발생할 수도 있고 아닐 수도 있음
종류
논 데드락 버그
원자성 위배
- 스레드들이 동시에 동작할 경우 문제가 됨
- 락으로 해결
오더링 문제
- 특정 스레드 이후에 실행되는게 보장되어야 문제가 없는 경우
- 조건변수나 세마포 사용
데드락 (교착 상태)
2개 이상의 스레드가 발생하지 않을 사건을 기다리게 되는 사건
4가지 조건을 모두 만족해야 발생
1. Mutual exclusion
2. Hold-and-Wait
3. No preemption for resource
4. Circular wait
데드락의 대처
1. 데드락 예방
2. 데드락 회피
3. 데드락 발견 및 회복
데드락 예방
1. Hold-and-Wait 없애기
모든 락을 한번에, 원자적으로 잡아야 함
-> 큰 락을 잡고 락1, 락2.. 를 잡을 수 있게하기
2. Preemption 하기
락을 못잡으면 다시 놔주기
* 트라이락: 못잡으면 놔줌
문제: 라이브락 발생 가능
3. 환형 대기 없애기
락을 잡는 순서를 적절하게 맞춰서 환형으로 대기하는 현상이 발생하지 않도록 해야 함
4. 상호 배제를 아예 안쓰기
락 프리 어프로치
원자성을 보장하면서 락을 안쓰는 방법..
-> 하드웨어 명령어를 사용
보통 Compare and Swap을 사용
단점: 쓸 수 있는 때가 제한적.. 락, 언락이 제네럴한 방법
데드락 회피
스케줄링을 잘 해서 데드락이 발생하지 않도록 함
Thread 1 | Thread 2 | Thread 3 | Thread 4 | |
Lock 1 | yes | yes | no | no |
Lock 2 | yes | yes | yes | no |
홀드-앤-웨이트는 두 개 이상의 락을 잡아야 해당되는 문제
Thread1과 Thread2를 같은 CPU에 올리면 둘이 동시에 실행되지 않으니 회피 가능
** 그래도 스케줄링이 선점형이면 데드락은 발생 가능, 회피할 뿐이고 데드락이 아예 안되는게 아님
Banker's algorithm
은행원이 돈을 빌려주는 것과 비슷하게 동작
프리한 상태의 리소스를 가지고 모든 스레드를 종료시킬 수 있으면 세이프, 아니면 언세이프
갚을 수 있는 애한테 자원을 빌려주는 방식
데드락 발견 및 회복
데드락의 발생은 허용하나 발생하면 탐지하고 리커버리
자원 할당 그래프를 사용
자원 -> 프로세스 : 가짐
프로세스 -> 자원: 가지고 싶음
프로세스가 종료 가능하면 엣지를 지움
계속해서 엣지를 지우고 다 지우면 데드락이 없는 것
반면, 지울 수 없는 엣지가 있으면 데드락 탐지
보통 수행한 지 얼마 안된 걸 죽임(언두)
가장 최근이 언두할게 적을 것임
혹은 락을 가장 적게 가지고 있는 걸 죽임
undo 오버헤드가 가장 적을 만할 걸 골라서 죽임
데이터베이스는 기록자, 판독자 문제.. 여러가지 상황에서 컨커런시 문제는 고려됨
세가지 팁
1. 가능하면 심플
2. 문제가 안되면 내버려 두는 것이 맞다
3. 맵 리듀스 처럼 공유자원을 안쓰면 락도 안써도 됨 (OS는 어쩔 수 없이 해야되긴 한다)
'운영체제' 카테고리의 다른 글
Hard Disk Drive / Time io, Time rate / Disk Scheduling (0) | 2024.05.19 |
---|---|
I/O Device, Device Driver (0) | 2024.05.06 |
Semaphore (세마포) (0) | 2024.04.18 |
조건 변수, 생산자/소비자 문제 (0) | 2024.04.18 |
Lock-based Concurrent Data Structure (0) | 2024.04.18 |