Process Synchronization
reentrant code: 여러 process들에 의해 동시에 호출되거나 이전 호출이 완료되기 전에는 반복 호출되어도 올바르게 수행되는 코드이다.
critical section: 이 구간에서는 하나의 프로세스만 수행될 수 있고 mutual exclusion의 성질을 갖고 있어야 한다.
interrupt는 너무 강력하기 때문에 semaphore를 mutual exclusion mechanism으로 쓴다.
Semaphore: synchronization을 제공해주는 정수형 변수이다. resource가 있는 방의 key로 비유할 수 있다.
P operation: 열쇠 줘. 사용하는 거니까 lock을 한다. wait()로도 불린다.
V operation: 열쇠 반납. 사용 끝났으니까 unlock을 한다. 다른 애 깨우니까 signal()로도 불린다. 열쇠를 생성한다.
mutual exclusion말고도 scheduling까지도 할 수 있다.
share되는 resource의 종류만큼 semaphore가 있어야 한다.
그 resource의 instance가 몇 개이냐가 semaphore의 초깃값이다.
resource가 생성되면 V()를 쓰고 없어지면 P()를 쓴다.
Semaphore는 unstructured programming construct이기 때문에 P()가 있으면 반드시 V()가 있어야 하는 게 아니고 이 때문에 컴파일러를 이용한 디버깅이 어렵다.
critical section: 이 구간에서는 하나의 프로세스만 수행될 수 있고 mutual exclusion의 성질을 갖고 있어야 한다.
interrupt는 너무 강력하기 때문에 semaphore를 mutual exclusion mechanism으로 쓴다.
Semaphore: synchronization을 제공해주는 정수형 변수이다. resource가 있는 방의 key로 비유할 수 있다.
P operation: 열쇠 줘. 사용하는 거니까 lock을 한다. wait()로도 불린다.
V operation: 열쇠 반납. 사용 끝났으니까 unlock을 한다. 다른 애 깨우니까 signal()로도 불린다. 열쇠를 생성한다.
mutual exclusion말고도 scheduling까지도 할 수 있다.
share되는 resource의 종류만큼 semaphore가 있어야 한다.
그 resource의 instance가 몇 개이냐가 semaphore의 초깃값이다.
resource가 생성되면 V()를 쓰고 없어지면 P()를 쓴다.
Semaphore는 unstructured programming construct이기 때문에 P()가 있으면 반드시 V()가 있어야 하는 게 아니고 이 때문에 컴파일러를 이용한 디버깅이 어렵다.
댓글
댓글 쓰기