Post

[운영체제/복합문제] 2장 컴퓨터 시스템과 운영체제

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

printf()는 표준 라이브러리 함수로 현재 버퍼가 가득 차거나 ‘\n’을 만나면 시스템 호출 함수인 write()를 호출한다.

printf()는 먼저 버퍼에 쓰고 한 번에 write()를 진행하기 때문에 매번 시스템 호출이 되는 write()로 작성하는 것보다 성능에서 우위를 가진다.

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

ISR은 커널과 하드웨어 사이 인터페이스로 인터럽트가 발생 했을 때 실행되는 함수로 시스템의 핵심 부분에 접근하고 제어하기 때문에 커널 영역에 두어 사용자로부터 보호해야한다.

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

인터럽트가 없다면 CPU는 입출력 중인 프로세스가 I/O 작업을 마쳤는지 확인하기 위해 CPU 시간을 할애하여 이를 확인해야한다. 하지만 인터럽트를 통해 I/O 작업이 종료 되었을 때 CPU에게 알려준다면 CPU는 이를 확인할 필요 없이 다른 작업을 수행하면 되기 때문에 CPU의 활용률을 높일 수 있다.

※ 참고 : cpu polling

4. 탐구 2-2의 소스 코드를 수정하여 디스플레이에 “I love OS”를 출력하는 프로그램을 작성하고 실행시켜라. 프로그 램을 iloveos.s 파일에 작성하고 다음과 같이 컴파일하고 실행하면 된다. $ gcc -c iloveos.s && Id iloveos.o $ ./a.out I love OS $

        .global _start
        .text
_start:
        mov $1, %rax
        mov $1, %rdi
        mov $msg, %rsi
        mov $10, %rdx
        syscall 

        mov $60, %rax
        xor %rdi, %rdi
        syscall

msg:
        .ascii "I love OS\n"
This post is licensed under CC BY 4.0 by the author.