운영체제

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

5n0wman 2023. 12. 1. 00:46

안녕하세요 눈사람입니다. 운영체제를 학습하면서 풀어본 연습문제 답을 공유하고자, 포스트합니다.

해당 포스트는 직접 풀어보면서 작성한 글이므로 정답이 아닐 수 있습니다.


6장 연습문제(개념체크)

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

1. 스레드 동기화

 

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

1. 상호배제

 

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

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

1. 상호배제

 

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

1. CPU 명령

 

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

4. 스핀락

 

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

- TSL ax, lock

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

-> TSL ax, lock은 mov ax, lock과 mov lock,1을 합친 명령이다.

 

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

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

 

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

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

-> 현재는 하드웨어적 방법을 사용하며 그중에서 '원자명령'을 활용하는 방법을 사용

 

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

2. 스핀락

 

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

2. 스핀락

 

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

2. 스핀락

 

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

2. 스핀락

 

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

2. 스핀락

 

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

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

 

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

2. sleep-waiting

 

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

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

 

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

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

 

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

4. N:1 매핑

 

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

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

 

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

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

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

 

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

(1) 보기 (1)에서 임계구역의 코드를 적어라.  sum = sum + 10;

 

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

 

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

 

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

-> (3) 코드는 x에 대한 접근은 동기화하고 있지만, sum에 대한 최종 수정에서 동기화가 부족하다. 이는 여러 스레드가 동시에 sum에 접근하여 값을 변경할 때 동기화가 실패할 가능성이 있다.

 

 

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

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

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

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

    공유버퍼 : 비디오 버퍼

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

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