동캄의 코딩도장
운영체제 [동기화- OS supported SW solution] 본문
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 호출
'CS > 운영체제' 카테고리의 다른 글
운영체제 [Deadlock] (0) | 2022.01.19 |
---|---|
운영체제 [동기화- language level solution] (0) | 2022.01.18 |
운영체제 [동기화 -HW solution] (0) | 2022.01.18 |
운영체제 [동기화 - SW solution] (0) | 2022.01.17 |
운영체제 [프로세스 스케줄링 기법] (0) | 2022.01.17 |