동기화는 서로 영향을 주는 실행 흐름에서 공유 자원 접근이나 실행 순서를 관리하는 기술이다. 예를 들면, race condition 같은 문제를 동기화를 통해 해결할 수 있다.
CPU가 인터럽트에 반응하지 않도록 상태를 변경시키는 방법. 일반적으로 interrupt 상태(on/off)를 건드리지 않는다. 다른 동기화 기술을 사용해 해결한다. pintos에서는 timer interrupt를 끄기 위해서 자주 사용된다.
스레드가 인터럽트 핸들러와 자원을 공유할 경우, 해당 코드 블록은 인터럽트 핸들러는 꺼둔다. 이유는 스레드 내에서 교착상태를 피하기 위해서다.
인터럽트는 스레드 내에서 실행되는 의존적 실행 흐름이다. 인터럽트 핸들러가 실행되는데 락이 없어 진행할 수 없다면, 이는 스레드 내에서 교착상태가 발생한것이다. 락을 취득할때까지 핸들러는 교착상태만 유발하므로, 일시적으로 인터럽트에 반응하지 않도록 만드는것이다. 그 외 교착상태는 다른 동기화 기술을 사용한다.
세마포어는 허가 개수를 관리하고, 갯수가 0이라면 대기시키는 동기화 도구다. down을 통해 허가 개수가 줄어들고, 호출시 0이였다면 대기한다. 작업을 마쳤을때는 up을 호출해 허가 개수를 증가시킨다.
락은 오직 하나의 흐름만 접근을 허용하며, 접근한 흐름은 락을 갖는다. 락을 얻지 못한 흐름은 대기하는 동기화 도구이다.
semaphore와 비슷하지만 조금 차이가 있다.