/////
Search
📝

5월27일(월)

SW 기반 솔루션

문제점

속도가 느림 구현 복잡 선점 발생 가능
여기까진 복습
ch6_part3 부터 시작

HW Instructions

Test-and-Set Instruction

Interrupt를 받지 않는 것을 보장 (Preemption 되지않는다) Busy waiting
1. 자동으로 실행(Execution) 2. 전달받은 인자의 원본을 반환 3. 전달받은 인자의 값을 true로 set하고 return
한번에 수행 target의 현재값을 리턴하고, 값을 true로 변경

ME with TAS

ME : Mutual Exclusion TAS : Test And Set
lock 초기값 false → TAS의 리턴값은 false → CS진입 이후 lock값이 true로 변환 → Pi가 CS에서 일을 하는 동안, 다른 프로세스가 진입 → Pi의 lock값이 true이므로 while문에서 대기 Pi가 일을 끝내고 나오면서 lock값을 false로 변환

Solution using test_and_set() (TAS를 이용한 상호배제)

shared boolean variable lock : initialized to false
문제점 : 3개 이상의 프로세스에서는 Bounded Waiting 위배 가능

ME with TAS : N-process ME

Compare-and-Swap Instruction

HW Solution

장점 구현이 단순
단점 Busy Waiting(Bounded Waiting 위배) Busy Waiting 문제 해결을 위한 ME 기법 : Semaphore(대부분의 OS에서 사용하는 기법)

Atomic Variables

atomic : 더 이상 쪼갤 수 없는 상태. uninterruptible

Mutex

자원 활용을 위한 key

Solution to Critical-section Problem Using Locks

acquire lock : lock값을 받음 사용후 release lock : lock 사용 해제

SpinLock

- 정수 변수
- 초기화, P(), V() 연산으로만 접근 가능
1.
위 연산들(초기화, P, V)은 atomic 연산 (OS 자원이며, 전체가 한 사이클에서 수행됨)
2.
P(),V() 연산들을 진행하는 동안, 선점 발생X
- Multiprocessor 시스템에서만 가능
1.
왜?(조사해서 공부하기)

Semaphore

- Dijkstra
- Busy Waiting 문제 해결
- 정수형 변수 S (Semaphore >= 0)
초기화, P(), V() 연산들 (spinlock과 유사)
P : 진입 전 검사 V : CS에서 나오면서 검사
S 하나에 Ready Queue 하나 할당

Semaphore Usage

Counting Semaphore

Binary Semaphore

초기화 연산

P(), V() 연산

P연산에서, 마지막 줄 코드가 Spinlock과는 달리, 레디큐에서 기다리게 된다(== 하드웨어의 도움을 받는다)

ME 해결법

Syncronization(프로세스 동기화) 해결법