Q3 : 프로그램이 실행될 때 운영체제에 의해 할당되는 공간은 4가지가 있다. 각 공간은 어떤 용도로 사용되는 것인가 ? 그리고 이들 각 공간은 프로그램이 시랳ㅇ되는 동안 크기가 변하는가 변하지 않는가 ?
A3: 프로그램이 실행될 때 운영체제에 의해 할당되는 4가지공간은 코드(code)공간, 데이터(data)공간, 힙(heap)공간, 스택(stack)공간이다.
코드 공간 : 프로그램의 코드가 적재되는 공간이다.
데이터 공간 : 전역 변수들이 적재되는 공간이다.
힙 공간 : 프로그램이 실행될 때 동적 데이터를 저장하기 위한 공간이다.
스택 공간 : 함수가 호출될 때 매개변수와 지역변수, 리턴 값 등을 저장할 공간이다.
이 네가지 공간중 코드공간과 데이터공간은 프로그램이 컴파일될 때 정해지므로 프로그램이 실행되는 동안 크기가 변하지 않지만 힙공간과 스택공간은 프로그램이 실행되는 동안 동적으로 공간을 할당 받거나 함수를 호출 시 매개변수 값이나 리턴 값 등이 저장되는 공간이므로 프로그램 실행중 크기가 변한다.
Q4 : 컨텍스트란 무엇인가 ? 운영체제가 컨텍스트를 다루는 이유는 무엇인가 ? 컨텍스트 스위칭이란 어떤 행위이며, 이때 왜 CPU레지스터들을 저장하는가 ? 컴퓨터마다 운영체제마다 컨텍스트의 크기가 서로 다를 것인지 논리적으로 자신의 의견을 말하라.
A4 : 컨텍스트란 실행중인 프로그램에 대한 일체의 상황 또는 정보를 말한다.
그 일체의 상황은 메모리와 CPU레지스터들에 담겨 있는데 메모리에는 프로그램의 코드와 데이터들이 CPU레지스터에는 현재 실행중인 코드의 메모리 주소나 계산에 필요한 데이터값들이 저장되어있다. 이 정보는 하드웨어인 메모리와 CPU레지스터에 저장되어 있기 때문에 운영체제가 컨텍스트를 다룬다.
현재 실행중인 프로그램A의 컨텍스트를 저장해두고 다른 프로그램B를 실행시키기 위해 프로그램B의 저장된 컨텍스트를 CPU로 옮기는 것을 컨텍스트 스위칭이라고 한다.
운영체제가 현재 실행중인 프로그램을 일시중단하고 다른 프로그램을 실행시키고자 한다면 운영체제는 현재 실행중인 프로그램의 컨텍스트를 다른곳에 복사해두고 다시 프로그램이 실행될 때 이 정보를 이용해야하는데 이때 메모리에 저장되어 있는 정보들은 그대로 있기 때문에 CPU레지스터값들만 복사해두면 된다.
CPU마다 레지스터의 개수와 크기가 다르고 저장 방식이 운영체제마다 다르므로 컨텍스트의 크기가 다를 것이다.
Q5 : 운영체제가 없는 경우 발생하는 문제점을 은행에서 은행직원이 없는 경우로 비유하여 나름대로 설명을 전개해보라.
A5 : 만약 은행에 은행원이 없다면 관리자가 없기 때문에 은행업무를 보러온 고객들끼리 서로 은행업무를 먼저 보기 위하여 충동이 일어날 수 있고, 고객 모두가 금고에 접근할 수 있기 때문에 보안이 취약해질 것이다. 또한 고객은 은행안에서 어떻게 돈을 찾아야하고 그 정보가 어디 저장되는지 등 은행업무가 어떻게 처리되는지 자세히 알고 있어야 은행업무를 볼 수 있다. 하지만 은행원이 있게 된다면 고객들은 은행업무가 어떻게 처리되는지에 대해서는 몰라도 은행직원을 통해 은행업무를 볼 수 있고 관리자가 생겼기 때문에 금고에 접근할 수 있는 사람이 제한되었기 때문에 보안이 강해질 것이고 고객들끼리 서로 충돌할 일도 없어지게 된다.
Q6 : 광의의 의미로 운영체제를 구성하는 요소들은 무엇인지 간단히 설명하라.
A6 : 커널 + 툴 프로그램/GUI + 디바이스 드라이버
Q7 : 사용자, 툴, 애플리케이션, 라이브러리, 커널, 디바이스 드라이버, 하드웨어 등으로 구성되는 전체 컴퓨터 시스템을 그림으로 그리고, 각 요소의 기능을 간단히 설명하라. 이 그림으로 볼 떄 운영체제는 어떤목적이라고 생각드는가?
A7 :
툴 / 응용프로그램 : 사용자가 편리하게 컴퓨터를 사용할 수 있도록 제공되는 프로그램, 운영체제에 포함되어있다.
라이브러리 : 개발자가 작성하기 힘든 기능을 제공하여 응용프로그램의 개발 시간을 단축시켜준다. 응용프로그램이 하드웨어에 접근하거나 컴퓨터 자원에 접근하는 경우에 커널에 있는 함수를 대신 호출하는 역할을 한다. 표준 라이브러리와 시스템 호출 라이브러리로 나뉜다. 표준 라이브러리에 포함된 함수들은 동일한 프로그래밍 언어에 대해서는 운영체제나 컴퓨터 하드웨어에 상관없이 이름과 사용방법이 같지만 시스템 호출 라이브러리는 운영체제 커널과 밀접한 관계가 있기 때문에 함수들의 이름이 운영체제마다 다르다.
커널 : 시스템 관리 기능을 하도록 만들어진 함수들과 데이터이다. 시스템 호출 핸들러와 여러 커널 함수들의 집합으로 이루어져 있다.
디바이스 드라이버 : 장치를 제어하고 입출력을 담당하는 소프트웨어로 운영체제가 하드웨어 장치들을 제어, 입출력 할 수 있도록 한다. 하드웨어 제조사가 배포한다.
사용자가 하드웨어 대한 지식이 없어도 컴퓨터를 사용할 수 있게 한다. 자원을 독점 관리하여 응용프로그램끼리의 충돌을 방지하여 컴퓨터의 자원을 효율적으로 관리하여 컴퓨터의 처리율을 높인다.
Q8 : 커널은 위로 응용프로그램, 아래로 장치들과 연결된다. 커널은 어떤 인터페이스를 통해 이들과 접속하는가 ? 인터페이스를 말하고 간단히 설명하라.
A8 : 커널은 두가지 인터페이스를 제공한다. 첫째 커널과 응용프로그램 사이의 인터페이스인 '시스템 호출(System Call)' 과 커널과 하드웨어 장치 사이의 인터페이스인 '인터럽트(Interrupt)'이다. 시스템 호출은 응용프로그램에서 커널 기능을 사용할 유일한 방법이고, 인터럽트는 장치들이 입출력 완료등과 같은 비동기적 사건을 CPU에게 알리는 행위이다. 인터럽트에넌 2가지 종류가 있는데 입출력 장치들이 CPU에게 전기적으로 신호를 보내는 하드웨어 인터럽트와 프로그램내에서 CPU의 기계명령으로 인터럽트 과정을 진행시키는 소프트웨어 인터럽트가 있다.