1. TestAndSet(TAS) instruction
- Test와 Set을 한 번에 수행하는 기계어
- Busy waiting
- Inefficient
1) 기계어 (Machine instruction)
- Atomicity, Indivisible
- 실행 중 interrupt를 받지 않음 (preemption 되지 않음)
2) TAS 명령어
- target 값을 반환하면서 target 값을 true로 변경한다.
- 이 과정을 한 번에 진행함 (MI이기 떄문)
3) ME with TAS Instruction
- lock이라는 변수의 초기 값은 False
- TAS(lock)
- 기존 lock value인 false가 반환되고, lock을 true값으로 변경
- CS 진입
- Pj라는 프로세스 등장
- TAS(lock)이 true값을 반환하기 때문에, (현재 lock 값이 true여서) while 대기 하다가
- 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는 다음과 같다.
2. HW Solution
1) 장점
- 구현이 간단하다
2) 단점
- Busy waiting
- Inefficient
- 이를 해결하기 위한 상호배제 기법 : Semaphore (대부분의 OS들이 사용하는 기법)
'CS > OS' 카테고리의 다른 글
6. 프로세스 동기화 & 상호배제 (5) - Semaphore (0) | 2021.05.14 |
---|---|
6. 프로세스 동기화 & 상호배제 (4) - Spinlock (0) | 2021.05.13 |
6. 프로세스 동기화 & 상호배제 (2) - sw solutions (0) | 2021.05.12 |
6. 프로세스 동기화 & 상호배제 (1) - 개요 (0) | 2021.05.12 |
5. 프로세스 스케줄링 (4) (0) | 2021.05.10 |