일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Docker
- tour of go
- 코딩
- JUCE라이브러리
- JUCE
- BOJ
- c++ heap
- C++
- JUCE 튜토리얼
- go channel
- a tour of go
- C++ library
- go
- JUCE library
- Nebula
- OS
- 자료구조
- C언어
- 공룡책
- 백준
- 알고리즘
- 운영체제
- LOB
- gui
- 프로그래밍
- C++ gui 라이브러리
- 연결리스트
- C++ gui
- vim-go
- 리듬게임
- Today
- Total
CafeM0ca
[OS] 공룡책 챕터4 연습문제 본문
챕터4 연습문제
1번 : 멀티스레딩이 싱글스레딩 보다 성능이 좋은 프로그래밍 예시 3가지를 드시오
- 독립된 일들을 각각 스레드에게 맡길 때 task의 밸런스를 맞출 수 있고 데이터의 의존성을 식별할 수 있다.(network I/O, UI 렌더링 같은 일을 동시에 처리할 때) (테스크 병렬)
- 응답성, 자원 공유, 경제성, 규모성
- data 단에서 데이터를 나눠서 스레드로 처리할 때 (데이터 병렬)
2번 : 암달의 법칙을 사용해서 어플리케이션이 60% 병렬 컴포넌트를 갖고 있을 떄 (a)2개의 프로세스 코어를 사용할 때와 (b)4개의 프로세르 코어를 사용할 때 값을 계산하세요.
(a) 1 / ((1 - 60%) + 0.6 / 2) = 1 / (0.4 + 0.3) = 1 / (0.7) = 10 / 7 = 1.43 = 43%의 성능향상
(b) 1 / (0.4 + 0.15) = 1 / 0.55 = 1.82 = 82% 성능향상
3번 : Section 4.1에 설명된 멀티스레드 웹 서버는 task 병렬인가 data 병렬인가?
web page, image, video, sound 단위로 되어 있으니 task 병렬이다.
4번 : user-level 스레드와 Kernel-level 스레드의 차이점은? 어떤 상황에서 한 유형이 다른 유형보다 낫습니까?
답은 아래 3개
a: user-level 스레드는 커널에 대해 알 수없는 것에 반해 커널에서만 커널 스레드를 알 수 있다.
b: 시스템이 다대일이나 다대다 모델을 메핑하여 사용할 때, 사용자 스레드는 스레드 라이브러리에 의해 스케쥴되고, 커널 스레드는 커널에 의해 스케쥴된다.
c: 커널 스레드는 프로세스로부터 분리되어있다. 반면에 모든 사용자 스레드는 프로세스에 포함되어 있다. 커널 스레드는 유저 스레드보다 비용이 비싸다. 커널 스레드는 무조건 커널 자료구조로 표현되어야한다.
5번 : 커널에서 커널스레드가 어떻게 context-switch 하는지 설명하세요.
커널 스레드가 switch 되기전에 스레드의 CPU 레지스터를 저장하고 새로운 스레드가 스케쥴링 되면서 레지스터를 복구한다.
6번 : 스레드가 생성될 때 어떤 리소스가 사용되는가? 프로세스가 생성될 때 어떤 자원이 사용되는가? 두개의 차이점은?
스레드가 생성될 때는 프로세스가 갖고 있는 스레드 자원과 메모리 자원(stack, heap 등)이 사용되고
프로세스가 생성될 때는 CPU 코어 자원이 사용된다. PCB도 포함.
7번 : 다대다 모델을 사용하고 운영체제가 user-level 스레드를 kernel-level 스레드에 매핑하고 매핑이 LWP를 통해 완료된다고 가정하정하자. 시스템이 개발자에게 실시간 스레드를 실시간 시스템에서 만들 수 있게 허용하자. 실시간 스레드를 LWP에 bind해야하는지 설명하시오.
스레드를 사용려면 LWP에 붙여한다.
근데 리얼타임에서는 I/O나 뮤텍스같은게 들어오면 스레드가 멈추게 되어 LWP를 나중에 다시 붙여야 한다.
문제는 LWP 스레드를 붙일 때 비용을 무시할 수 없다.
따라서 LWP에 스레드를 바인딩한다면 비용을 아낄 수 있다.
8번: 멀티스레딩이 필요없는 경우
context-switch의 비용이 더 큰 경우.
9번: 싱글프로세스의 싱글 스레드 솔루션보단 멀티스레드 다중 커널스레드 솔루션이 어느 경우에서 성능이 좋은가?
작업을 분할할 수 있을 때
10번: 멀티스레딩 프로세스 프로그램에서 스레드끼리 뭘 공유하는가?
a. Register values
b. Heap memory
c. Global variables
d. stack memory
b, c
11번: 멀티프로세스 멀티스레딩이 싱글프로세스 멀티스레딩보다 더 나은 작업을 수행할 수 있는가? 예시를 드시오.
답: x
멀티프로세스든 싱글프로세스든 단일 프로세스에 한하여 하나의 프로세스밖에 점유할 수 없기 때문에 더 나은 작업을 수행할 수 없다.
12번: 구글 브라우저의 chrome tab은 멀티 프로세스로 돌리는데 이를 멀티 쓰레딩으로 바꾸면 이점이 있는가?
없다.
13번: 병렬은 아닌데 동시성을 가질 수 있는가?
가능하다
14번: 암달의 문제
넘어갑니다.
15번: 다음의 문제가 task parallelism인지 data parallelism인지 구분하세오.
- using a separate thread to generate a thumbnail for each photo in a collection
- data paralleism
- Transposing a matrix in parallel
- data paralleism
- A networked application where one thread reads from the network and another writes to the network
- task paralleism
- the fork-join array summation application described in section 4.5.2
- task paralleism
- The grand central dispatch system
- task paralleism
'OS > 공룡책' 카테고리의 다른 글
[공룡책] 챕터7 동기화 예시 (0) | 2021.03.05 |
---|---|
[공룡책] 챕터5 CPU 스케쥴링 (0) | 2021.02.05 |
[OS] 공룡책 Chapter4 스레드 (0) | 2021.01.21 |
[OS] 공룡책 Chapter 3 연습문제 풀이 10th edition (0) | 2021.01.14 |
[OS] 공룡책 Chapter3 정리 프로세스, PCB, 스케쥴링 큐, context switch, IPC, RPC, PIPE (0) | 2021.01.07 |