CS/OS

6. 프로세스 동기화 & 상호배제 (3) - HW solution

🥭맹2 2021. 5. 12. 04:04

1. TestAndSet(TAS) instruction

  • Test와 Set을 한 번에 수행하는 기계어
  • Busy waiting
    • Inefficient

1) 기계어 (Machine instruction)

  • Atomicity, Indivisible
  • 실행 중 interrupt를 받지 않음 (preemption 되지 않음)

2) TAS 명령어

TAS 명령어 ~!

  • target 값을 반환하면서 target 값을 true로 변경한다.
    • 이 과정을 한 번에 진행함 (MI이기 떄문)

3) ME with TAS Instruction

로직 두두등장

  • lock이라는 변수의 초기 값은 False
  1. TAS(lock)
    • 기존 lock value인 false가 반환되고, lock을 true값으로 변경
  2. CS 진입
  3. Pj라는 프로세스 등장
    1. TAS(lock)이 true값을 반환하기 때문에, (현재 lock 값이 true여서) while 대기 하다가
    2. Pi가 CS에서 빠져나오면서 lock 값이 false가 되면 그 순간 TAS(lock)에서 false값을 반환하면서 lock값이 true가 되면서 Pj가 CS로 진입

이런 로직이다.

근데 문제점이 있다.

3개 이상의 프로세스의 경우 한 프로세스가 계속해서 밀릴 수 있다.

예를 들면 Pi가 CS에 진입해 있을 경우, Pj가 현재 계속 대기하고 있는데, Pk도 대기하고 있을 경우 Pk가 먼저 진입을 하게 되는데, 또 새로운 프로세스인 Pz가 등장하고 Pk가 CS에서 빠져나오자 Pz가 들어가고... 이런식으로 진행된다면 Pj는 무한하게 대기할 수 있음

-> Bounded waiting 조건에 위배됨

이를 해결하기 위해 프로세스가 여러개일 때 ME는 다음과 같다.

 

프로세스가 n개일 때는 이렇게 ~!

2. HW Solution

1) 장점

  • 구현이 간단하다

2) 단점

  • Busy waiting
    • Inefficient
    • 이를 해결하기 위한 상호배제 기법 : Semaphore (대부분의 OS들이 사용하는 기법)