CS/OS

6. 프로세스 동기화 & 상호배제 (4) - Spinlock

🥭맹2 2021. 5. 13. 03:13

강의 링크 : https://www.youtube.com/watch?v=33OqgesF-mM&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=15

1. Spinlock

1) 특징

  • 정수 변수
  • 초기화, P(), V() 연산으로만 접근 가능
    • 위 연산들은 indivisible(or atomic) 연산
    • -> preemptive 없음 (OS support로 인해)
    • 전체가 한 instruction cycle에 수행 됨

P(), V()연산

  • P(S) : S는 물건의 갯수를 뜻함, P(S)는 물건을 꺼내가는 상황이라고 생각하자.
  • V(S) : S는 물건의 갯수를 뜻함, V(S)는 물건을 반납하는 상황이라고 생각하자.

2) 로직

spinlock이란 ~!

  1. active는 물건의 유무를 나타내는 상태
    • 1인 경우 물건 존재 / 0인 경우 물건이 존재하지 않음
  2. Pi가 먼저 진행되는 상황을 가정하면, P(active)를 진행했을 때, 물건이 있으니까 물건을 꺼내가게 되고, 이 때 active는 0으로 바꿔준다. 그리고 CS에 진입
  3. Pi가 CS에 진입하면서 active가 0으로 바뀌었기 때문에, Pj는 active가 0이어서 P()연산을 하지 못하고, 무한 대기 중
  4. Pi가 V(active)하면 (물건을 반납하면), active가 다시 1이 되어 Pj가 P(active)연산을 할 수 있게 되고 CS에 진입할 수 있게 된다.
  5. 이 때, P()부터 V()까지 OS의 도움으로 non preemptive가 보장되기 때문에 문제 상황(상호배제, ME의 조건을 어기는 상황)이 발생하지 않음.

3) 특징(단점)

  • 멀티 프로세서 시스템에서만 사용 가능
    • 단일 프로세서인 경우, Pi가 CS영역에 진입해있는 상황에서 멈추고, Pj가 P()연산을 진행한다면, while문에서 넘어가지 못한다. 즉, P(active)에서 계속해서 active가 1이 되는 상황을 기다린다. 이 때, Pi가 V()연산을 하려고 하는데, 단일 프로세서인 경우 이미 Pj가 CPU를 할당받은 채로 P()연산 내부의 while문을 진행하고 있기 때문에 결국 둘 다 일을 못하게 된다.
    • -> 따라서 CPU가 여러 개 있어야 spinlock 가능
  • Busy waiting
    • while 문 내부에서 뺑뺑 돌고 있는 상황