- Bounded-Buffer problem(Producer/Consumer 간에 같은 버퍼 공간 사용 시, Instruction이 Atomic X -> Race Condition 문제 발생)
- Synchronization이 필요한데, Multi-Thread 에서는 변수 공유를 하기에 더욱 필요, Kernel의 경우 선점문제
- Critical Section 문제(ES-CS-ES-RS), 솔루션의 3가지 요구사항(상호배제, 진행, 기다림 제한)
- Strict Alternation(상호배제는 o, Progress는 x(원하지 않더라도 반복))
- Peterson's Algorithm(flag, turn 두 가지 변수를 활용해 원하는지도 체크, 나올 때 flag false 준다)
- 상호 배제(무조건 하나만), Progress(flag를 통해 원하는 것만 들어옴, 지연x, Starvation도 해결)
- HW support(인터럽트 끄는 방법, Atomic Instruction)
- test_and_set(있던 값 반환하고 true로 바꾼다), lock 변수를 처리해주고 CS 다음에 lock을 다시 0으로
- compare_and_swap(있던 값 반환하고 0이면 1로 바꾼다)
- Bounded-Buffer 문제를 test_and_set으로 해결 (waiting과 key), 다음사람 (i+1)%5 처리, 내 차례면 lock 0 초기화
- Mutext_lock은 보다 일반적으로 쉽게 처리(acquire, release)
- Semaphore 좀더 powerful 개념(Wait, Signal) 0이면 대기
- Binary, Counting Semaphore, 순서도 지정가능(semaphore 0 초기화 P1 다음 signal P2는 waiting)
- Semaphore 구현(wait 에서 busy waiting -> Queue에 넣고 block() 처리) 단 먼저 ++,-- (0 미만이면 큐 넣고, 0이상이면 큐 빼기)
- 교착상태 문제(dead lock)
- Reader-Writer 문제(데이터 일관성, reader는 여러 개 들어와도 됨)
- read_count에 쓰일 mutex, read_count가 0 또는 1 일때 쓰일 rw_mutex , 두 개로 각각 처리
- Dining Philosopher 자원 두개 처리하는데 교착 상태 가능성(사용자 1명 빼기, 동시 처리, 홀수 왼오 짝수 오왼)
'Archived(CSE) > 운영체제' 카테고리의 다른 글
Chap 8. Memory Management (0) | 2019.06.02 |
---|---|
Chap 7. Deadlock (0) | 2019.06.02 |
Chap 5. Process Scheduling (0) | 2019.04.13 |
Chap 4. Thread (0) | 2019.04.12 |
Chap 3. Process (0) | 2019.04.12 |