운영체제가 하는 역할이 무엇인지에 대해 간략하게 알아보겠습니다. 각 사항에 대한 자세한 내용은 추후 공부를 진행하면서 자세하게 정리해볼 계획입니다.
운영체제의 역할은 크게 두 가지로 나눌 수 있습니다. 사용자를 위한 역할, 하드웨어를 위한 역할입니다.
운영체제는 사용자에게 컴퓨터 시스템을 편리하게 사용할 수 있는 인터페이스를 제공합니다. GUI와 CLI가 대표적인 예시입니다.
GUI와 CLI
운영체제의 가장 핵심적인 기능은 각종 하드웨어를 관리하는 일입니다. 이에 운영체제를 resource manager라고 부르기도 합니다. 즉, 운영체제는 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할을 합니다.
운영체제가 하는 일은 많지만 본 글에서는 대표적인 기능 몇 가지만 짤막하게 소개하고 추후 각 기능이나 개념에 대해 자세히 다뤄보겠습니다.
컴퓨터를 사용할 때 브라우저를 쓰면서 노래를 듣고 게임까지 하는 경우를 생각해봅시다. 브라우저, 음악, 게임은 모두 프로세스에 해당합니다. 컴퓨터의 CPU가 하나인 경우 CPU는 한 번에 한 프로세스만을 처리할 수 있는데도 불구하고 이를 동시에 하고 있다고 느낄 수 있는 이유는 운영체제에서 적절한 방식으로 프로세스들을 관리해주기 때문입니다. 이와 관련된 내용으로는 시분할 방식, CPU 스케쥴링과 같은 개념들이 있습니다.
메모리는 CPU가 직접 접근할 수 있는 컴퓨터 내부의 기억 장치입니다. 모든 프로그램은 메모리에 올라와서 실행됩니다. 오늘날에는 여러 프로그램을 동시에 실행시키기 때문에 메모리 관리를 하지 않으면 프로그램끼리 메모리 침범 이슈와 같은 문제들이 생기게 됩니다. 따라서 이러한 문제 해결을 위해 운영체제에서 메모리를 관리해줍니다. 또한 한정된 메모리 공간을 가지고 어떤 프로그램에 얼마만큼 메모리를 할당해줄 것인지 역시 관리합니다. 물리적 메모리 관리 방식으로는 고정 분할 방식, 가변 분할 방식, 가상 메모리 방식 등이 있습니다.
운영체제는 사용자의 하드웨어에 대한 직접 접근을 막습니다. 예를 들어 사용자가 하드디스크의 특정 영역에 데이터를 직접 저장하려는 경우 중요한 데이터를 덮어써 버릴 위험이 있습니다. 또한 누군가의 악의적인 공격으로 컴퓨터 시스템에 문제를 일으킬 수 있습니다. 따라서 운영체제는 하드웨어 관리를 직접 하여 사용자의 실수를 방지하고 고의적인 공격에 대한 방어를 합니다. 또한 하드 디스크의 많은 파일들을 효율적으로 저장하고 관리해주는 역할도 수행합니다.
위에서 살펴본 것처럼 다양한 기능을 수행하는 운영체제의 구조를 간략히 살펴보겠습니다.
운영체제처럼 큰 규모의 프로그램이 메모리에 모두 올라간다면 한정된 메모리 공간의 낭비가 심하게 됩니다. 따라서 항상 필요한 부분만을 컴퓨터 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때만 메모리에 올리게 됩니다. 이때 메모리에 항상 상주하는 운영체제의 부분을 커널이라고 합니다. 커널은 운영체제 코드 중에서도 가장 핵심적인 부분이고 커널 자체를 좁은 의미에서의 운영체제라고 부르기도 합니다. 반면 커널 뿐 아니라 각종 주변 시스템 유틸리티(파일 복사 기능 등)를 포함한 개념이 커다른 의미에서의 운영체제입니다.
운영체제의 구조는 대략적으로 위 그림과 같고 크게는 인터페이스와 커널로 나눌 수 있습니다.
사용자는 커널에 직접 접근할 수 없기 때문에 운영체제가 제공하는 인터페이스를 사용해 커널에 명령을 내려야 합니다. 사용자와 애플리케이션은 인터페이스를 통해 커널에 명령을 전달하고, 인터페이스를 통해 실행결과를 전달받습니다. 운영체제가 제공하는 대표적인 인터페이스가 GUI, CLI가 있습니다.
커널의 경우 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 합니다. 또한 커널에는 시스템 호출(System Call)과 드라이버라는 것이 있습니다.
시스템 호출은 후에 알아볼 인터럽트 중 하나인 소프트웨어 인터럽트(Trap)의 한 종류입니다.
커널과 하드웨어의 인터페이스를 드라이버라고 합니다. 보통 커널은 입출력의 기본적인 부분만 제작하여 마우스, 키보드 같은 하드웨어는 꽂기만 해도 보통 작동하게 됩니다. 하지만 복잡한 하드웨어의 경우 하드웨어 제작사가 만든 소프트웨어를 따로 설치하여 사용해야합니다. 이때 이 소프트웨어를 디바이스 드라이버라고 합니다. 프린터나 스캐너 같은 장비를 구매하면 설치해야하는 디바이스 드라이버라는 프로그램을 본 적이 있으실 것 같습니다.