Q.spin lock이 critical section 문제를 해결하기 위한 O.S solution이라고 하는데, 왜 이 강의에서는 busy waiting의 또 다른 표현으로 일컫는거지?
spin lock은 운영체제에 정의되어 있고 제공되는 동기화 메커니즘의 한 종류가 맞다. 멀티스레드 환경에서 사용되는 동기화 메커니즘이다. 프로세스 동기화에는 다른 메커니즘이 사용된다. 또한 한편으로는 critical section에 진입할 수 없을 때 대기하도록 하는 방식이기 때문에 busy waiting을 일컫는 표현 중 하나로 볼 수 있다.
이 강의에서는 굳이 semaphore와 spin lock으로 구분하는 것이 아니라 busy wating 방식의 semaphore(spin lock)과 block & wake-up 방식의 semaphore로 구분해서 설명하고 있는 거 가튼디
Q.그럼 spin lock은 이 강의에서는 다루지 않고 있는데 어떻게 구현된 메커니즘이야?
Q.semaphore를 왜 사용하는거지? 그 전에 사용했던 것들과 어떤 차이점이 있지?
정수형 변수 S와 block 상태에서 대기 중인 프로세스의 리스트로 구현한 Semaphore
P연산: 자원을 사용 가능한지를 나타내는(S.value)를 감소시키고, 사용 가능한 자원이 남았는지 확인, 0 미만이면 이미 모든 자원이 사용중이라는 의미이므로 block을 통해 suspend 상태로 만듦
V연산: S.value를 증가시키고 만약 해당 값이 0이하이면, 자원이 없는 상태에서 S.value를 감소시킨 다른 프로세스들이 큐에서 대기중인 것을 의미하므로 프로세스를 wake up 시킴
여기서 S.value는 자원의 개수가 아니라 자원을 사용 가능한지, 깨울 프로세스가 있는지 확인하는 용도
Q. 다시 한 번 semaphore, mutex, counting, spin lock은 각각 어떻게 구분되는가, 개념의 상호 연관성이 어떻게 되는가..?
프로세스가 각각 semaphore Q와 S를 모두 필요로 할 때, P0이 S를 획득하고 P1에게 CPU를 빼앗기고, P1이 Q를 획득한 상황이면 둘 모두 서로가 필요한 다른 semaphore를 쥐고 있어 영원히 조건을 충족하지 못하는 dedalock 상태에 빠지게 됨
두 프로세스 모두 semaphore를 얻는 순서를 동일하게 한다면 CPU를 빼앗긴다고 해도 deadlock에 빠질 수가 없음
좋은 글 잘 읽었습니다, 감사합니다.