본문 바로가기

운영체제

명품운영체제 연습문제 6장

생능출판사 명품 운영체제

 

본 연습문제들은 작성자 본인이 푼것이라 틀릴 수 도 있습니다.

 

[개념체크]

 

1. 여러 스레드가 공유 변수를 접근하려고 경쟁할 때 공유 변수의 값이 훼손되는 상황이 발생할 수 있다. 공유 변수가 훼손되지 않도록 스레드 사이에 공유 변수에 대한 접근 시간과 방법 등을 조절하는 기법을 무엇이라고 하는가.

① 스레드 동기화

 

2. 멀티스레드가 동시에 공유 데이터를 접근할 때 데이터가 훼손되지 않도록 막는 기법의 핵심 정책은 무엇인가?

상호배제

 

3. 다음은 무엇에 대한 정의인가?

다수의 스레드로부터 공유 데이터의 훼손을 막기 위해 임계구역이 오직 한 스레드만 배타적 독점적으로 사용하도록 관리하는 기술

 상호배제

 

4. 원자명령(atomic instruction)이란?

① CPU 명령

 

5. Test and Set Lock 혹은 TSL 명령에 대한 설명이 틀린 것은?

스핀락

 

6. 다음 원자명령에 대한 설명으로 옳은 것은?

TSL ax, lock

 lock 변수 값을 ax 에 읽어오고 lock 변수에 1을 저장한다.

 

7. 원자명령과 가장 거리가 먼 것은?

④ 원자명령은 거의 모든 CPU에 있으며 CPU를 막론하고 이름이 동일하다

 

8. 임계구역에 대한 설명으로 틀린 것은?

 대부분의 운영체제는 임계구역에 진입할 때 다른 스레드가 진입하지 못하도록 인터럽트를 금지시키고, 나올 때 인터럽트를 허용하는 방법을 사용한다(오늘날에는 원자명령을 활용한다)

 

9. 멀티스레드의 동기화 기법 중 멀티코어 CPU를 가진 현대의 시스템에 적합한 것은?

스핀락

 

10. 멀티스레드의 동기화 기법 중 요청한 자원을 사용할 수 있을 때 까지 대기하는 큐를 사용하지 않는 방법은?

 스핀락

 

11. 임계구역의 실행 시간이 매우 짧을 경우에 적합한 멀티스레드의 동기화 기법은?

 스핀락

 

12. 커널 코드나 인터럽트 서비스 루틴 등에서 임계 구역에 접근할 때 멀티스레드 동기화를 위해 사용되는 기법은?

 스핀락

 

13. 멀티스레드 동기화 기법 중 오랜 시간 동안 공유 자원을 접근하지 못하는 기아가 발생할 수 있는 것은?

 스핀락

 

14. 멀티스레드의 동기화는 왜 필요한가?

② 여러 스레드가 동시에 동일한 변수를 읽고 쓸 때 발생하는 문제를 해결하기 위해

 

15. 다음 중 CPU 사용 시간을 심하게 낭비하는 것이 아닌 것은?

② sleep-waiting

 

16. 다음 중 동기화가 발생하는 공간에 대한 것 중 옳은 것은?

사용자 공간과 커널 공간 모두 동기화 필요

 

17. 우선순위 역전에 대한 설명 중 틀린 것은?

우선순위 역전은 낮은 순위의 스레드가 기아 상태에 빠지는 것을 막기 위한 매우 효율적인 방법이다

 

18. 공유 자원과 가장 거리가 먼 단어는?

N:1 매핑

 

19. 생산자 소비자 문제에 대해 잘 설명한 것은?

공유 버퍼를 사이에 두고 공유 버퍼에 데이터를 저장하는 스레드와 공유 버퍼로부터 데이터를 읽어가는 스레드 사이에 공유 버퍼에 대한 동시 접근 문제이다

 

20. 생산자 소비자 문제인 것은 모두 골라라.

① 마이크로부터 연속하여 들어오는 오디오 샘플을 큐에 넣는 스레드와 큐의 오디오 샘플을 스피커로 출력하는 스레드

③ 프린트할 파일이 생길 때 마다 큐에 넣은 스레드와 큐에 있는 파일을 프린터로 출력하는 스레드

 

21. pthread 라이브러리를 이용하여 작성된 다음 4개의 보기에 대해 물음에 답하라. 보기에서 worker() 함수는 스레드가 실행하는 코드이다.

(1) 보기 (1)에서 임계구역의 코드를 적어라. 

sum = sum + 10;

(2) worker()를 실행하는 10개의 스레드가 동시에 실행될 때 4개의 보기 중 가장 실행 속도가 느린 코드는? 

 

(3) worker()를 실행하는 10개의 스레드가 동시에 실행될 때 4개의 보기 중 가장 실행 속도가 빠른 코드는? 

(4) worker()를 10개의 스레드가 동시에 실행될 때 스레드 동기화가 실패할 가능성이 있는 코드는? 

 

22. 다음은 비디오 플레이어 응용프로그램의 구조를 간략히 묘사한 것이다. 물음에 답하라.

(1) 이 응용프로그램을 개발하기 위해서는 생산자 소비자 문제를 해결해야 한다. 생산자 소비자 문제는 생산자 스레드, 소비자 스레드, 스리고 공유 버퍼로 구성되는데 이들이 각각 그림의 어느 부분에 해당하는지 밝혀라.

생산자 스레드 = 입력스레드

소비자 스레드 = 재생스레드

공유버퍼 = 비디오 버퍼

(2) 이 응용프로그램에서 입력스레드와 재생스레드가 생산자와 소비자로서 비디오를 재생하는 과정을 간단히 설명하라.

입력스레드는 네트워크로 부터 한 프레임씩 읽어 비디오 버퍼에 저장하는 일을 반복하고, 재생스레드는 비디오 버퍼에 도착하는 프레임을 읽고 디코딩하여 디스플레이에 출력하는 작업을 반복한다.

 

[복합 문제]

 

1. 응용프로그램 개발자는 어떤 코드를 임계구역으로 설정해야 하는가?

공유 데이터를 액세스하는 코드 블록을 임계구역으로 묶고, 임계구역에 대한 상호배제가 이루어지도록 작성해야 한다.

 

2. 다음 코드는 lock 변수를 이용하여 임계구역에 멀티스레드의 상호배제를 이루려고 한다. lock은 0이나 1 값을 가지는 변수이다. 질문에 답하라.

1       loop:
2                mov ax, lock
3                mov lock, 1
4                cmp ax, 0
5                jne loop
6                --------------
---             임계구역
100            --------------
101            mov lock, 0

(1) lock 변수의 역할은 무엇인가? 임계구역에 들어갈때 변수에 1을 쓰고 나올때 0을 쓴다. 1일때는 임계구역에 들어갈수 없다.

(2) 스레드 A가 임계구역의 코드를 실행하다 중단된 경우, 스레드 B가 1번 라인부터 실행하게 되면 스레드 B는 어떤 코드를 실행하게 되는가? lock 변수가 1이라 임계구역으로 들어가지 못하고 loop으로 돌아가 lock 이 0이 될 때까지 lock 변수를 읽고 0과 비교하는 코드를 반복 실행한다. 

(3) 이 코드는 임계구역에 대한 상호배제를 이룰 수 있는 코드인가? 상호배제에 실패하는 코드인가? 실패하는 코드이다.

(4) 질문 (3)의 이유를 설명하라. 만약 스레드 A 가 먼저 lock 변수 값 0을 ax로 읽은 후 스레드 B 로 컨텍스트 스위칭이 되고, 스레드 B 가 lock 변수를 읽고 lock변수를 1로 변경하고 임계구역에 진입후 임계구역 내에서 스레드 A 로 컨텍스트 스위칭이 일어난다면 스레드 A 와 B 둘다 임계구역에 있는 충돌 상황이 발생한다.

(5) 만일 질문 (3) 에서 상호배제가 실패하는 코드라면, 상호배제가 성공하도록 해결 방법을 제시하라. 상호배제가 실패하게 만드는 원인인 mov ax, lock 와 mov lock, 1 을 두개로 합치면 된다.