글 작성자: juyoungit

운영체제 (Operating System)

프로그램을 실행할 수 있는 환경을 제공함으로써 사용자와 하드웨어 사이의 중재자 역할을 수행하는 특수한 소프트웨어

위의 정의처럼 운영체제가 제공하는 가장 중요한 역할은 "프로그램을 실행할 수 있는 환경을 제공한다"라는 점입니다. 프로그램을 실행할 수 있는 환경을 제공함은 응용프로그램을 개발하는 개발자가 CPU, 메모리, 기타 저장소 등 물리적인 컴퓨터 시스템을 구성하는 하드웨어를 직접 다루지 않고, 이를 인터페이스화된 형태로 사용할 수 있음을 의미합니다.

교회 방송실에서 많이 봐왔던 아날로그 오디오 믹서

이는 "오디오 믹서"를 생각하면 이해할 수 있습니다. 이 오디오 믹서를 사용하면 특정 채널에 연결된 음향장비 (마이크, 컴퓨터, 악기 등등)의 볼륨, 이퀄라이져, 모니터 스피커 출력 유무 등 오디오 신호의 흐름과 출력을 몇 개의 버튼을 사용하여 쉽게 제어할 수 있습니다. 만약 이러한 오디오 믹서가 없다면 우리는 스피커에 연결되는 모든 마이크, 악기 등의 음향을 일일이 제어하는 법을 알아야하고, 이 각각을 활용하는 것이 매우 번거로워 집니다. 이 상황을 다음과 같이 대입해서 이해할 수 있습니다.

1. 오디오 믹서의 각 버튼 - 컴퓨터 하드웨어에 접근하여 사용할 수 있도록 하는 인터페이스
2. 오디오 믹서 사용자 - 운영체제를 사용하는 사용자

그렇기 때문에 OS를 사용함으로서 사용자는 더 쉽게 컴퓨터 시스템을 사용할 수 있으며, 이를 더 효율적으로 활용할 수 있습니다. 여기서 효율적으로 활용할 수 있다는 것은 "컴퓨터 하드웨어 리소스가 최대한 놀지 않고 활용되도록 하는 것"을 의미하며 이를 "Utilization"의 최대화라고도 표현합니다. 이 Utilization을 최대화 하는 것은 OS가 다루는 주요 Issue 중 하나이며, 중요하기 때문에 나중에 뒤에서 다루는 주제 입니다.

 

커널(Kernal)

실제로 OS는 종류가 매우 다양하고 각 OS마다 설계된 목적 등이 모두 다르기 때문에 OS를 정확히 정의하는 것은 조금 어려운 문제일 수 있습니다. 하지만 OS를 가장 명확하게 정의할 수 있는 방법은 바로 "커널(Kernal)" 이라는 용어를 사용하여 정의하는 것입니다. 이 용어를 사용하여 OS를 정의할 경우 다음과 같이 정의할 수 있습니다.

커널(Kernal)과 커널이 아닌 추가적인 프로그램들의 집합

그렇다면 OS가 커널과 커널이 아닌 프로그램들의 집합이라고 표현할 수 있는 이유는 무엇이고, 커널과 커널이 아닌 프로그램을 구분하는 기준은 무엇일까요? 우선 앞에서 이야기한 것처럼 OS는 컴퓨터 시스템 하드웨어에 엑세스할 수 있는 명령을 직접 실행할 수 있는 권한을 가진 특수한 소프트웨어이며, 이러한 권한을 가진 파트를 우리는 "커널(Kernal)" 이라고 부릅니다. 하지만 우리가 많이 사용하는 Windows나 Mac OS를 생각해보면 OS는 기본적으로 지원하는 응용프로그램이 있습니다 (메모장, 그림판 등등). 그래서 위와 같이 우리는 OS를 커널과 커널이 아닌 추가적인 프로그램들의 집합이라고 표현할 수 있는 것 입니다. 그리고 위에서 언급한 것처럼 "컴퓨터 하드웨어에 직접 엑세스할 수 있는 권한을 가진 소프트웨어"를 가리켜 "커널"이라고 표현하며, 반대로 이러한 권한을 가지지 않는 소프트웨어들은 커널에 해당하지 않는다고 표현합니다.

 

컴퓨터 시스템의 구성요소

운영체제를 포함한 컴퓨터 시스템의 구조를 다음과 같이 그려볼 수 있습니다.

위의 그림과 같이 운영체제는 컴퓨터 하드웨어를 직접 제어하는 권한을 가집니다. 여기서 기억하면 좋은 점은 "운영체제가 실행되는 동작모드와 일반 응용프로그램이 실행되는 동작모드가 다르다" 라는 점 입니다. 위의 구성요소에서 사용자가 직접 사용하는 일반 응용프로그램의 경우 컴퓨터 하드웨어 리소스에 직접 엑세스할 수 있는 명령을 실행할 수 없습니다. 응용프로그램은 이러한 명령의 실행이 금지되며, 하드웨어 엑세스가 필요한 경우 OS의 도움을 받아 이를 처리하게 됩니다.

 

물론, 임베디드와 같이 시스템 구조가 매우 간단한 상황이라면 OS가 없어도 괜찮을 수 있습니다. 하지만 OS를 사용하지 않는다면 해당 시스템 위에서 실행되어야 하는 모든 프로그램들은 각각, 그리고 직접 시스템 하드웨어에 접근해야하기 때문에 모든 것이 어려워집니다.

 

 

시스템 관점에서 OS가 하는 기능들

1. 컴퓨터 하드웨어 리소스를 적절하게 할당해주는 것 (Resource Allocation)

컴퓨터에서 이뤄지는 모든 I/O (메모리, 스토리지 등등)에 대한 엑세스는 100%는 운영체제를 통해서 이뤄집니다. 기본적으로 컴퓨터 시스템은 제한된 리소스를 여러 프로그램들이 공유(Sharing)해서 사용하기 때문에 동시에 공유하는 리소스에 대해서 서로 다른 둘 이상의 프로그램이 동시에 접근하는 상황이 발생할 수 있으며 이러한 상황을 "Conflict"라고 표현합니다. OS는 이러한 Conflict가 발생하지 않도록 지원하며 이는 공유하는 리소스에 대해서 "독점적인 사용권을 요청"하는 방식으로 처리됩니다. OS는 공유되는 리소스에 대한 사용상황을 확인하고 이를 적절히 사용할 수 있도록 할당해주는 데 이 과정을 가리켜서 "Resource Allocation" 이라고 표현합니다.

2. 프로그램을 제어하는 것

여기서의 제어는 "운영체제 위에서 실행되는 각각의 프로그램들이 서로의 영역을 침범하지 않도록 통제함"을 의미합니다. 뒤에서 프로세스에 대해서 정리하겠지만 운영체제 위에서 실행되는 프로그램은 각각 메모리 공간을 할당받아 사용하게 되며, 이 공간은 일반적인 상황에서 서로 침범할 수 없음이 보장되어야 합니다. 만약 이를 위반하는 동작을 수행하는 프로그램이 존재하는 경우 운영체제는 해당 프로그램을 강제 종료시킴으로서 허용되지 않은 범위의 리소스를 사용하는 것을 제한합니다.

 

 

최종 정리

그래서 운영체제는 정확히 무엇을 하는 가? 라는 질문을 받는다면 다음과 같이 간단하게 정리해볼 수 있습니다.

1. 프로그램이 실행될 수 있는 환경을 제공
2. 컴퓨터 시스템의 리소스를 관리함 (Utilization이 최대화 되도록)

그리고 여기서 Utilization을 최대화 하기 위해서 Sharing과 Scheduling 이라는 이슈를 다루게 되며, 이와 관련된 내용은 나중에 뒤에서 다루게 될 것입니다.