본문 바로가기

운영체제

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

생능출판사 명품 운영체제

 

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

 

[개념체크]

 

1. 컴퓨터 시스템에서 주소를 발생시킬 수 있는 하드웨어를 있는대로 골라라.

CPU

 

2. CPU의 주소 선이 총 24개가 있다면 이 CPU가 액세스 할 수 있는 메모리의 최대 크기는?

16MB : 2^24 = 16MB

 

3. 캐시 메모리가 있는 컴퓨터에서 CPU가 실행할 명령어와 코드가 반드시 있어야 하는 곳은?

캐시메모리

 

4. 다음 CPU 레지스터 속에 저장된 값의 의미는 무엇인가?

(1) PC 레지스터 : 다음 실행할 기계 명령의 메모리 주소

(2) IR 레지스터 : 실행을 위해 메모리에서 읽어온 명령이 저장된 레지스터

(3) SP 레지스터 : 스택의 꼭대기 메모리 주소 저장

 

5. 현재 실행 중인 프로그램에 관한 일체의 실행 상황 정보를 부엇이라고 하는가?

컨텍스트

 

6. 컨텍스트 스위칭이란?

현재 실행중인 프로그램을 중단시키고 CPU에게 다른 프로그램을 실행시키는 행위

 

7. 운영체제가 지원하는 서비스를 응용프로그램이 활용할 수 있도록 해주는 소프트웨어 인터페이스를 무엇이라고 부르는가?

 시스템호출

 

8. 다음 중 운영체제의 목적이 아닌 것은?

컴퓨터에 장착된 여러개의 CPU를 다 활용하지 않고 최소 개수의 CPU로 프로그램을 실행시켜 CPU를 아껴 사용할 수 있도록 한다

 

9. 운영체제를 구성하는 요소가 아닌 것은?

④ 컴파일러

 

10. 디바이스 드라이버에 대한 설명 중 틀린 것은?

① 디바이스 드라이버는 호환성이 뛰어나서 Windows에서 작성된 마우스 드라이버를 리눅스에서도 사용할 수 있다

 

11. 메모리 공간을 사용자 공간과 커널 공간으로 나누는 이유는?

① 응용프로그램이 적재되는 공간과 커널 공간을 분리하여 커널 공간에 대한 응용프로그램의 직접 접근을 막아 보호하기 위해

 

12. 사용자 공간과 커널 공간에 대해 말한 것중 틀린 것은?

④ 응용프로그램이 커널 공간에 쓰는 것은 금지되어 있지만 읽는것은 허용된다 (둘다 안됨)

 

13. 응용프로그램이 커널에 작성된 코드를 활용할 수 있는 방법은 무엇인가?

① 시스템 호출

 

14. 사용자 모드와 커널 모드에 대한 설명 중 틀린것은?

③ 사용자 모드에서는 커널코드 중 허용된 코드만 엑세스 할 수 있다.

 

15. 다음은 무엇에 대한 설명인가?

<입출력 장치나 타이머, 인터럽트 처리, 시스템 중단 등 사용자 모드에서는 사용할 수 없고, 커널 모드에서 사용할 수 있는 특별한 CPU 기계 명령>

③ 특권명령

 

16. 특권 명령이 사용되는 경우가 아닌 것은?

시스템 호출 명령

 

17. 다음 중 같지 않은 용어는?

감독자 호출(인터럽트)

 

18. C 프로그램에서  printf("hello"); 의 실행에 대헤 잘못 설명한 것은?

③ printf()는 직접 디스플레이어에 출력하는 함수다

 

19. 인터럽트에 대한 설명 중 틀린 것은?

① 인터럽트가 발생하면 CPU의 실행모드를 굳이 커널모드로 변경할 필요없이 현재 모드에서 인터럽트 서비스 루틴이 실행 된다

 

20. 운영체제의 커널코드를 장치와 무관하게 개발할 수 있도록 하는것은 어느요소의 역할 인가?

③ 디바이스 드라이버

 

21. 응용프로그램을 운영체제와 무관하게 작성할 수 있도록 하는것은 어느 요소의 역할인가?

① 표준 라이브러리

 

22. 시스템호출에 대한 설명중 틀린 것은?

③ 응용프로그램은 시스템 호출을 통해 커널 프로세스에게 커널코드를 실행해 줄것을 요청한다

 

23. 시스템 호출에 대해 잘못 설명한 것은?

④ 시스템 호출은 커널코드를 실행시키기 때문에 응용프로그램 개발자의 입장에서 프로그램의 실행 속도를 높이는 매우 좋은 방법이다.

 

24. 표준라이브러리 함수와 시스템 호출 함수들에 대한 설명으로 틀린것은?

④ 응용프로그램 개발시 표준라이브러리 함수보다 시스템 호출 함수를 사용하면 응용프로그램의 실행속도를 높일 수 있다

 

[복합문제]

 

1. 응용프로그램을 작성할 때 표준 라이브러리 함수(예 : printf())를 호출하는 것이 시스템 호출 함수(예 : write())를 호출하는 것보다 나은 방법인 이유를 설명하라.

시스템호출에는 긴 시간이 걸린다. 코드에 따라 표준라이브러리 함수를 이용하는것이 시스템 호출을 더 적게 사용할 수 가 있다

 

2. 인터럽트 서비스 루틴이 커널영역에 있어야 하는 이유가 무엇일까?

인터럽트가 입출력장치와 CPU가 동시에 각자의 일의 실행을 요청하기 위해 CPU가 직접 요청받기 때문이다

 

3. 컴퓨터 시스템과 운영체제의 목표는 CPU의 활용률을 극대화 하는데 있다. 인터럽트는 이 목적을 달성하게 하는데 중요한 역할을 한다. 인터럽트가 어떤식으로 CPU 활용률을 높이는데 기여하는가?

인터럽트가 있어서 CPU에게 다른 프로세스를 실행하도록 하고, 인터럽트를 통해 입출력의 완료를 인지하면 입출력을 기다리는 프로세스를 준비상태로 깨워 다음 스케줄 때 실행시키는 전형적인 다중프로그래밍 구현가능. 인터럽트는 입출력장치와 CPU가 동시에 각자의 일을 실행하게 하여 컴퓨터 시스템이 효율적으로 작동하게 한다. CPU를 보다 효율적으로 사용하여 CPU 활용률을 높이고 시스템 처리율을 높인다

 

4. 탐구 2-2의 소스 코드를 수정하여 디스플레이에 "I love OS"를 출력하는 프로그램을 작성하고 실행시켜라. 프로그램을 ilove.os 파일에 작성하고 다음과 같이 컴파일하고 실행하면 된다.

$ gcc -c iloveos..s && ld iloveos.o
$./a.out
I love OS
$

 

hello.s 를 수정한 내용