기어가더라도 제대로

[운영체제-김덕수 교수님] 프로세스 동기화, 상호 배제 - Spinlock(4/7) 본문

CS/운영체제

[운영체제-김덕수 교수님] 프로세스 동기화, 상호 배제 - Spinlock(4/7)

Damagucci-juice 2022. 8. 3. 18:27

HW 솔루션도 Busy Waiting 문제가 있다는 것을 알게됨

Spinlock

  • 정수 변수
    • S = a + 1
      • 위와 같은 연산은 불가
  • 초기화, P(), V() 연산으로만 접근 가능
    • 위 연산들은 indivisible(or atomic) 연산
      • OS support 보장
      • 전체가 한 Instruction cycle 에 수행 됨

‏‏‎ ‎

  • S = 물건의 개수
  • P() 물건을 꺼내가는 것
    • 자물쇠를 거는것
  • V() 물건을 집어 넣는 것
    • 자물쇠를 푸는 것

프로세스 동기화 상호배제(4/7) image

‏‏‎ ‎

프로세스 동기화 상호배제(4/7) image

  • active 라는 변수를 가정해 보겠습니다.
    • 1
      • 물건이 있다.
      • 있어야 다른 프로세스가 실행 가능
    • 0
      • 물건이 없다.
  • P = 잠는 것 - 잠그고 일을하다 끝나면 나올 때 푼다.
  • V = 푸는 것

프로세서가 하나인 경우

  • Pi 가 active 를 0 으로 만들고 열심히 일을 하고있다.
  • Pi가 끝나면, Pj가 들어간다.
  • 만약 Pj가 루프에 걸린다면?
  • Pi는 다시 들어갈 수가 없다.

‏‏‎ ‎

멀티 프로세서 시스템에서만 사용가능

  • Busy waiting 존재

‏‏‎ ‎

이를 해결하기 위해 Semaphore 가 등장했다.

‏‏‎ ‎

Comments