일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- gui
- 연결리스트
- C언어
- tour of go
- a tour of go
- 백준
- 공룡책
- JUCE
- Docker
- OS
- go
- 운영체제
- 리듬게임
- BOJ
- 자료구조
- JUCE 튜토리얼
- Nebula
- C++ gui
- go channel
- 알고리즘
- c++ heap
- C++
- C++ gui 라이브러리
- 프로그래밍
- JUCE library
- 코딩
- vim-go
- JUCE라이브러리
- C++ library
- LOB
- Today
- Total
CafeM0ca
[공룡책] 챕터7 동기화 예시 문제풀이 본문
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는 덧셈연산
'OS > 공룡책' 카테고리의 다른 글
[공룡책] 챕터7 동기화 예시 (0) | 2021.03.05 |
---|---|
[공룡책] 챕터5 CPU 스케쥴링 (0) | 2021.02.05 |
[OS] 공룡책 챕터4 연습문제 (0) | 2021.01.22 |
[OS] 공룡책 Chapter4 스레드 (0) | 2021.01.21 |
[OS] 공룡책 Chapter 3 연습문제 풀이 10th edition (0) | 2021.01.14 |