본문 바로가기

Archived(CSE)/운영체제

Chap 6. Synchronization

- 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