동캄의 코딩도장

운영체제 [동기화- OS supported SW solution] 본문

CS/운영체제

운영체제 [동기화- OS supported SW solution]

동 캄 2022. 1. 18. 11:11

OS supported SW solution 


Spinlock

- 정수변수
- 초기화, P(), V() 연산으로만 접근가능
- OS가 연산이 한번에 처리되는 것을 보장 

P(): 자원을 사용하는 함수
V(): 자원을 반환하는 함수 

-멀티 프로세서 시스템에서만 사용가능
- busy waiting 문제 발생

 

Semaphore

- 음이 아닌 정수형 변수(S), 초기화 연산,P(),V()로만 접근 가능
- 임의의 S 변수 하나에 ready queue 하나가 할당 됨
- P()연산을 실행할 수 없으면 ready queue에 대기
- busy waiting 문제 해결
- Semaphore queue 대한 wake-up 순서는 비결정적--> starvation problem


Semaphore로 해결 가능한 동기화 문제

-상호배제 문제
- 프로세스 동기화 문제
- 생산자-소비자 문제
- Reader-Writer 문제
- Dining philosopher problem


Mutual exclusion

-spin lock과 유사하지만, ready queue를 이용


process synchronization

- P()연산 대기--> 동기화 가능


생산자-소비자 문제

- semaphore를 두 개 생성하여 생산자 소비자 side에서 생성/소비를 확인
- N개의 버퍼가 존재한다면, ME를 보장한 뒤, 진행


Reader-Writer problem

- 데이터 무결성 보장 필요
- Reader들은 동시에 접근가능
- Writer들은 상호배제 필요
- reader preference solution/ writer preference solution 으로 해결

 

Eventcount/Sequencer

- No busy waiting
- No starvation
- Semaphore 보다 더 low-level control이 가능


Sequencer

- 정수형 변수
- 생성시 0으로 초기화, 감소하지 않음
- 발생 사건들의 순서 유지
- ticket() 연산으로만 접근 가능 (ticket(S), 현재까지 ticket() 연산이 호출 된 횟수를 반환)


Eventcounter

- 정수형 변수
- 생성시 0으로 초기화, 감소하지 않음
- 특정 사건의 발생 횟수를 기록
- read(E), advance(E), await(E,v) 연산으로만 접근 가능


read(E)
- 현재 Eventcount 값 반환

 

advance(E)
- E+=1
- E를 기다리고 있는 프로세스를 깨움 (wake-up)

await(E,v)
- V는 정수형 변수
- if(E<v)이면 E에 연결된 Queue에 프로세스 전달 및 CPU scheculer 호출