CafeM0ca

[공룡책] 챕터7 동기화 예시 문제풀이 본문

OS/공룡책

[공룡책] 챕터7 동기화 예시 문제풀이

M0ca 2021. 3. 5. 19:52
반응형

7.1 윈도우와 리눅스가 multiple locking 매커니즘을 구현했는지 설명하시오. spinlock, mutex lock, semaphore, condition variable이 사용되는 상황을 설명하시오. 각각의 경우에 메커니즘이 왜 필요한지 설명하세요.

multiple locking 매커니즘으로 spinlock,mutex lock, semaphore, condition variable을 제공한다.

  • spinlock : 주로 바쁜 대기에 사용함. 구현이 편리. 바쁜대기가 sleep queue에 진입하는 것 보다 오버헤드가 낮음.
  • mutex lock : 한 프로세스에서 여러 스레드가 리소스에 접근하는데 이 때 리소스를 잠그는데 유용하다.
  • semaphore : 프로세스간 공유 리소스에 대해 접근할 때 사용한다. named semaphore와 unnamed semaphore가 있다는 것을 기억하자.
  • conditional variable : 메시지를 통한 스레드 동기화에 사용된다. 한 스레드가 메시지 발신자 역할을 하면 다른 스레드는 수신자가 된다. 전형적으로 발신자-수신자 또는 생산자-소비자 흐름에 쓴다.

세마포어와 조건변수는 리소스를 장기간 유지(spinlock 처럼 빈번한 것이 아닌)에 적합하다.

결국 개발자의 필요에 따라 구현하기 위해 제공.

7.2 x

7.3 binary semaphore 대신 mutex lock을 사용할 수 있도록 그림 7.1과 7.2에서 생산자와 소비자 프로세스에 필요한 변경 사항을 설명하시오.

binary semaphore는 세마포어 값으로 0 또는 1을 갖는 것을 의미한다.

뮤텍스와 세마포어는 서로 튜링 동치(Turning equivalence)다.

7.1과 7.2에서 wait(mutex) 대신에 acquire(mutex)로, signal(mutex) 대신에 release() API로 대체한다. (API 사용의 차이)

 

튜링 동치 : 컴퓨터에서 Q가 있고 P가 있으면 Q가 P를 (구현) 흉내낼 수 있고 P가 Q를 흉내낼 수 있으면 튜링 동치라 한다. 뮤텍스로 세마포어를 흉내낼 수 있고 세마포어로 뮤텍스를 흉내낼 수 있다.

반응형

7.4 식사하는 철학자 문제에서 deadlock이 왜 발생하는지 설명하세요.

철학자가 식사를 하기 위해서는 왼쪽과 오른쪽 젓가락 2개를 집어야한다. 5명의 철학자와 5개의 젓가락이 있을 때 동시에 왼쪽 젓가락을 집으면 오른쪽 젓가락이 없어지기 때문에 모두가 오른쪽 젓가락을 집을 때 까지 기다리게 된다(deadlock).

7.5 윈도우 디스페처 오브젝트에서 signaled와 non-signaled의 차이점을 설명하세요.

  • signaled : 디스패처 객체가 사용 가능하고 스레드가 객체를 획득 할 때 block 하지 않는다.
  • nonsignabled: 디스패처 객체를 사용 불가능하고 스레드가 객체를 획득(접근) 할 때 block 한다.

signaled 상태에서 lock을 획득하면 non-signled 상태로 된다. non-signled 상태에서 lock을 해제하면 signled 상태가 된다.

7.6 다음 atomic 연산을 계산하세요.

10 - 8 + 1 + 1 + 6 - 3 = 7

처음 val = 10, sub은 빼기연산, inc는 1증감연산, add는 덧셈연산

반응형
Comments