새소식

인기 검색어

컴퓨터공학/운영체제

2장 컴퓨터 시스템과 운영체제 - 후반부

  • -

Q1 : 사용자 모드와 커널 모드에 대해 간단히 설명하라. 커널 모드가 있는 이유는 무엇인가 ?

 

A1 :

사용자 모드 : CPU의 모드 비트가 0인 상태

 

CPU의 메모리 액세스 범위가 사용자 공간에 한정(커널 공간 액세스 불가)

CPU의 하드웨어 액세스 불가

특권명령을 제외한 모든 CPU 명령을 CPU가 처리 가능

오류 발생시 사용자 응용프로그래만 종료

 

커널 모드 : CPU의 모드 비트가 1인 상태

 

CPU의 메모리 액세스 범위가 커널 공간을 포함한 모든 메모리 공간

CPU가 모든 하드웨어 액세스 가능

특권 명령을 포함한 CPU의 모든 명령을 CPU 가 처리 가능

오류 발생시 시스템에 심각한 오류가 발생했기 때문에 시스템 종료

 

커널모드가 있는 이유는 응용프로그램으로부터 커널 코드와 데이터에 대한 보안과 보호를 위해서이다.

 

 

Q2 : 사용자 응용프로그램의 크기란 어떤 크기를 말하는가 ? 다른 말로 무엇을 합친 크기인가 ?

 

A2 : 코드 공간, 데이터공간, 힙 공간, 스택 공간을 모두 합친 크기

 

 

Q3 :  32비트 Windows 운영체제에서 하나의 응용프로그램 크기가 2GB보다 클 수 있는가 ? 답에 대한 이유를 설명하라.

 

A3 : 32비트 Windows 운영체제의 주소 송간은 사용자 공간이 2GB, 커널 공간이 2GB이므로 응용프로그램의 크기가 사용자 공간의 크기인 2GB 클 수 없다.

 

 

Q4 :  사용자 모드와 커널모드, 그리고 사용자 공간과 커널 공간을 두는 이유는 무엇인가 ? 그리고 CPU가 사용자 모드에서 커널 모드로 바뀌는 경우는 어떤 경우인가 ?

 

A4 :  커널 코드와 데이터를 악의적인 응용프로그램이나 프로그램 오류로부터 지키기 위해 응용프로그램이 적재되는 사용자 공간과 커널 코드와 데이터가 저장되는 커널 공간으로 분리시켰다. 사용자 모드에선 사용자 공간만 커널 모드에선 사용자 공간, 커널 공간 모두 접근할 수 있게 해 응용프로그램으로부터 커널 코드와 데이터를 보호한다. 사용자 모드와 커널 모드로 나누어 놓으면 응용프로그램에서 오류가 발생하더라도 시스템을 중단시키는 일은 발생하지 않는다. 시스템 호출과 인터럽트가 발생할 때 사용자모드에서 커널모드로 변경된다.

 

 

Q5 : 특권 명령은 어떤 유형의 명령인지 한줄로 말하고, 커널모드에서만 사용하도록 하는 이유는 무엇인가 ?

 

A5 : 특권 명령이란 하드웨어나 시스템 관련 처리와 같이 특별한 목적으로 설계된 CPU 명령이다. 특권명령은 커널모드에서만 실행하도록 하는 이유는 자원에 관한 모든 접근을 커널(운영체제)에만 부여하여 응용프로그램이  I/O명령, 인터럽트 플래그를 켜고 끄는 명령등을 실행하여 자원에 접근하는 것을 막기 위해서이다.

 

 

Q6 : 현재 CPU가 사용자모드보다 커널모드에서 많이 실행되고 있다면 컴퓨터의 실행상황은 어떠한 경우라고 생각이 드는가 ? 

 

A6 : 응용프로그램에 의해 요구된 시스템 호출을 실행하는 경우

인터럽트가 발생되어 인터럽트 서비스 루틴이 실행되는 경우

실행되는 프로세스가 없어 idle(유휴) 프로세스가 실행중인 경우

 

 

Q7 : 학생은 오늘 게임회사 넥슨에서 면접을 보고 있다. 커널이 무엇인가라고 질문 받을 때 학생의 답을 기술하라. 정확하고 충분히 답을 못하면 면접에서 떨어진다.

 

A7 : 커널이란 운영체제의 핵심 부분으로 부팅 시에 커널공간에 적재된 함수들의 집합이다. 커널은 CPU관리, 메모리관리, I/O 장치관리, 보안관리등의 기능들로 이루어져 있고 컴파일된 바이너리 형태로 하드디스크의 운영체제가 설치된 영역에 저장되어 있다가 부팅시 메모리의 커널공간에 적재된다.

 

 

Q8 : 시스템 호출이 일어나는 과정을 나름대로 그림을 그리고 설명하라.

 

A8 : 

 

 

Q9 : 응용프로그램에서 시스템호출을 많이 사용할수록 좋은가 나쁜가, 아니면 관계없는지 간단히 결론과 이유를 말하고, 표준라이브러리 함수 fread() 와 시스템호출 함수 read()를 사용하는 사례를 들어 설명하라.

 

A9 : 시스템호출을 사용하면 함수호출보다 많은 시간과 비용이 들기 때문에 많이 사용할수록 나쁘다. 표준라이브러리 함수 fread()와 시스템호출 함수 read()를 비교하여 설명하면 fread()를 처음 호출하게되면 라이브러리 내에 버퍼가 비어있기 때문에 read()함수를 호출하여 라이브러리 내의 버퍼를 채우게 된다. 이때 라이브러리 버퍼에서 요청한 크기만큼 복사가 이루어지므로 라이브러리의 버퍼가 비거나 부족하기 전까지는 fread()를 재호출 하더라도 read()함수를 호출하지 않는다. 즉 fread()는 최초로 호출되거나 또는 버퍼가 비어있을때만 시스템호출 함수 read()를 호출하여 사용자모드에서 커널모드로 바뀌지만 read()함수는 라이브러리 버퍼를 거치지 않고 디스크에서 바로 읽기때문에 호출될때마다 사용자모드에서 커널모드로 바뀌어야 하므로 여러번 호출된다고 가정하면 fread()함수보다 read()함수가 더 많은 시간과 비용이 들게된다.

 

Q10 : 인터럽트가 처리되는 하드웨어 과정을 그리고 각 단계별로 설명하라.

 

A10 : 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.