CS/운영체제
[운영체제-김덕수 교수님] 프로세스 동기화, 상호 배제 - Spinlock(4/7)
Damagucci-juice
2022. 8. 3. 18:27
HW 솔루션도 Busy Waiting 문제가 있다는 것을 알게됨
Spinlock
- 정수 변수
- S = a + 1
- 위와 같은 연산은 불가
- S = a + 1
- 초기화, P(), V() 연산으로만 접근 가능
- 위 연산들은 indivisible(or atomic) 연산
- OS support 보장
- 전체가 한 Instruction cycle 에 수행 됨
- 위 연산들은 indivisible(or atomic) 연산
- S = 물건의 개수
- P() 물건을 꺼내가는 것
- 자물쇠를 거는것
- V() 물건을 집어 넣는 것
- 자물쇠를 푸는 것
- active 라는 변수를 가정해 보겠습니다.
- 1
- 물건이 있다.
- 있어야 다른 프로세스가 실행 가능
- 0
- 물건이 없다.
- 1
- P = 잠는 것 - 잠그고 일을하다 끝나면 나올 때 푼다.
- V = 푸는 것
프로세서가 하나인 경우
- Pi 가 active 를 0 으로 만들고 열심히 일을 하고있다.
- Pi가 끝나면, Pj가 들어간다.
- 만약 Pj가 루프에 걸린다면?
- Pi는 다시 들어갈 수가 없다.
멀티 프로세서 시스템에서만 사용가능
- Busy waiting 존재
이를 해결하기 위해 Semaphore 가 등장했다.