chapter 9. 운영체제 시작하기

운영체제를 알아야 하는 이유

운영체제란

프로그램 실행에 마땅히 필요한 요소들을 가리켜 시스템 자원, 혹은 줄여서 자원이라고 한다. 지금까지 앞에서 배운 CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들은 모두 자원이라고 볼 수 있다. 즉, 모든 프로그램은 실행되기 위해 반드시 자원이 필요하다. 여기서 실행할 프로그램에 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이 바로 운영체제이다.

**응용 프로그램(application software)**은 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램. 일상적으로 사용하는 워드프로세서, 인터넷 브라우저, 메모장, 게임 등과 같은 프로그램이 모두 응용프로그램이다.

운영체제(OS; operating system)는 인터넷 브라우저, 게임과 같은 프로그램이다. 그래서 운영체제 또한 여느 프로그램과 마찬가지로 메모리에 적재되어야 한다. 다만 운영체제는 매우 특별한 프로그램이기 때문에 항상 컴퓨터가 부팅될 때 메모리 내 커널 영역(kernel space)이라는 공간에 따로 적재되어 실행된다. 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역을 사용자 영역(user space)라고 한다. 즉, 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.

메모리 영역.png

운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리한다.

메모리 주소가 겹치지 않도록 적당한 공간에 프로그램들을 적재하고, 응용 프로그램이 실행되려면 cpu가 반드시 필요한데 여러 프로그램 중 어떤 프로그램부터 cpu를 사용하게 할지, 얼마나 오랫동안 cpu를 이용할지를 운영체제가 해결한다. 어느 한 프로그램이 cpu를 독점하면 다른 프로그램들은 올바르게 실행될 수 없기 때문에 최대한 공정하게 여러 프로그램에 cpu 자원을 할당한다. 이처럼 운영체제는 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 맡는다.

운영체제를 흔히 정부에 비유하는데, 운영체제는 응용 프로그램에 자원을 효율적으로 배분하고, 실행할 프로그램들이 지켜야 할 규칙을 만들어 컴퓨터 시스템 전체를 관리한다. 또한 정부에 여러 부서가 나누어져 있는 것처럼 운영체제 또한 자원별로 기능이 나누어져 있다.

운영체제.png

운영체제를 알아야 하는 이유

문제 해결 능력과 연결되는데 만든 프로그램은 결국 하드웨어가 실행하고, 그 하드웨어를 조작하는 프로그램이 운영체제이다. 그래서 운영체제는 프로그램이 하드웨어 상에서 어떻게 작동하는지를 먼저, 더 자세히 알고 있기 때문이다. 그리고 운영체제는 딱딱한 하드웨어가 아닌 프로그램이기 때문에 대화로 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있다. ex) 운영체제와의 대화 예시는 오류 메세지가 있다.

운영체제의 큰 그림

운영체제는 사용자를 위한 프로그램이 아닌 사용자가 실행하는 프로그램을 위한 프로그램이다. 즉, 사용자가 실행하는 응용 프로그램이 올바르게 실행되도록 돕고 필요한 자원을 할당해 주는 프로그램이다.

**커널(kernel)**은 운영체제의 핵심 서비스를 담당하는 부분을 말한다.

운영체제가 설치된 모든 기기에는 커널이 있다. 커널은 마치 사람의 심장, 혹은 자동차의 엔진과도 같다. 어떤 커널을 사용하는지에 따라 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상이 달라지고, 결과적으로 컴퓨터 전체의 성능도 달라질 수 있다.

커널.png

운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스, 사용자 인터페이스(UI; User Interface)는 윈도우의 바탕 화면과 같이 사용자가 컴퓨터와 상호 작용할 수 있는 통로이다.

운영체제가 제공하는 사용자 인터페이스 종류에는 그래픽 유저 인터페이스(GUI; Graphical User Interface)와 커맨드 라인 인터페이스(CLI; Command Line Interface)가 있다.

**그래픽 유저 인터페이스(GUI)**는 윈도우 바탕화면이나 스마트폰의 화면처럼 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스이다.

**커맨드 라인 인터페이스(CLI)**는 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스이다.

운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. 만약 응용 프로그램이 CPU, 메모리, 하드 디스크 등에 마음대로 접근하고 접근할 수 있다면 자원이 무질서하게 관리될 것이고, 응용 프로그램이 조금만 실수해도 컴퓨터 전체에 큰 악영향을 끼칠 수 있다. 그래서 운영체제는 응용 프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록 해 자원을 보호한다. 비유하자면 운영체제는 일종의 문지기인 셈. 응용 프로그램이 자원에 접근하기 위해서는 운영체제에 도움을 요청해야 한다. 이때 ‘운영체제에 도움을 요청한다’는 말은 ‘운영체제 코드를 실행하려고 한다’는 말과 같다. 응용 프로그램의 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행한다.

이러한 운영체제의 문지기 역할은 이중 모드로써 구현된다. **이중 모드(dual mode)**란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다. CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널 모드로써 실행할 수 있다.

**사용자 모드(user mode)**는 운영체제 서비스를 제공받을 수 없는 실행 모드. 즉, 커널 영역의 코드를 실행할 수 없는 모드이다. 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다. 사용자 모드로 실행 중인 cpu는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없다. 그래서 사용자 모드로 실행되는 일반적인 응용 프로그램은 자원에 접근할 수 없다.