운영체제는 프로그램들 간의 올바른 실행을 돕고, 다양한 하드웨어 자원을 프로그램에 배분하는 프로그램입니다. 사실상 하드웨어를 작동시키는 프로그램으로, 컴퓨터 전체에서 가장 중요한 프로그램이라고 보아도 과언이 아닙니다. 따라서 우리가 실행하고 개발할 프로그램의 근간을 관찰하기 위해서는 운영체제에 대한 이해가 필수적입니다.
운영체제는 특별한 프로그램입니다. 대표적으로 우리가 흔히 알고 있는 윈도우와 맥OS, 리눅스는 데스크탑의 운영체제이고, 안드로이드와 iOS는 스마트폰의 운영체제입니다. 방대한 프로그램인 만큼, 운영체제에는 매우 많은 종류와 다양한 기능이 있습니다. 다만, 스마트폰의 경우에도 종류는 매우 다양하지만 전화 통화나 문자 메시지, 인터넷 접속과 같은 핵심 서비스는 종류를 막론하고 비슷한 것처럼, 운영체제 또한 종류에 관계 없이 운영체제가 제공하는 핵심적인 기능은 비슷합니다.
이러한 운영체제의 핵심 기능을 담당하는 부분을 커널kernel이라고 합니다. 커널은 마치 자동자의 엔진이나 사람의 심장과도 같은 핵심부라고 할 수 있습니다. 특별한 언급이 없다면 ‘운영체제’라는 용어는 ‘커널’을 지칭한다고 이해하면 됩니다.
운영체제에는 크게 2가지의 핵심 기능이 있습니다. 하나는 자원 할당 및 관리이고, 또 하나는 프로세스 및 스레드 관리입니다. 먼저 2가지 핵심 기능을 정리하고, 프로그램들이 운영체제의 기능을 제공받는 방법을 살펴보면서 운영체제의 큰 그림을 그려 보겠습니다.
운영체제의 핵심 기능인 ‘자원 할당 및 관리’에 대해 알아보기 위해서는 우선 자원이 무엇인지부터 이해해야 합니다. 자원resource(혹은 시스템 자원system resource)이란 프로그램 실행에 마땅히 필요한 요소를 의미합니다. 실행에 필요한 ‘데이터’를 자원(소프트웨어)이라고 하기도 하고, 실행에 필요한 ‘부품’ 을 자원(하드웨어)이라고 하기도 하죠. 컴퓨터의 핵심 부품을 대표적인 자원으로 꼽을 수 있습니다.
운영체제는 사용자가 실행하는 응용 프로그램을 대신하여 CPU, 메모리, 보조기억장치 등의 컴퓨터 부품에 접근하고, 각각의 부품들이 효율적으로 사용되도록 관리합니다. 또 응용 프로그램이 컴퓨터 부품들을 효율적으로 할당받아 문제 없이 실행할 수 있도록 응용 프로그램에게 자원을 할당합니다.
메모리에는 실행 중인 프로그램이 다수 적재될 수 있지만, CPU가 이들 모두를 동시에 실행할 수 있는 것은 아닙니다. CPU는 한정된 자원이기 때문에 CPU를 할당받아 사용하기 위해 때로는 다른 프로그램의 CPU 사용이 끝날 때까지 기다려야 합니다. 그래서 운영체제는 실행 중인 모든 프로그램들이 공정하고 합리적으로 CPU를 할당받도록 CPU의 할당 순서와 사용 시간을 결정합니다. 이것이 바로 CPU 스케줄링입니다.
또한 운영체제는 새롭게 실행하는 프로그램을 메모리에 적재하고, 종료된 프로그램을 메모리에서 삭제합니다. 동시에 낭비되는 메모리 용량이 없도록 효율적으로 관리해야 하죠. 오늘날 존재하는 많은 운영체제들은 이를 위해 가상 메모리 기술을 활용합니다. ‘가상 메모리’는 운영체제의 메모리 관리 기법 중 하나로, 실제 물리적인 메모리 크기보다 더 큰 메모리를 이용할 수 있도록 하는 기술입니다.
메모리보다 더 큰 용량을 갖고 있는 보조기억장치는 더욱 일목요연하게 관리할 필요가 있습니다. 보조기억장치에 아무렇게나 정보를 저장한다면 마치 어질러진 서랍에서 원하는 물건을 찾듯 원하는 정보에 접근하기 위해 오랜 시간이 소요되기 때문입니다. 운영체제는 보조기억장치를 효율적으로 관리하기 위해 파일 시스템을 활용합니다. 파일 시스템은 보조기억장치 내의 정보를 파일 및 폴더(디렉터리) 단위로 접근·관리할 수 있도록 만드는 운영체제 내부 프로그램입니다.
지금까지 우리가 단순히 ‘실행 중인 프로그램’이라고 지칭했던 대상은 프로세스process라고 합니다. 그리고 스레드thread는 이 프로세스를 이루는 실행의 단위입니다. 메모리에는 여러 프로세스가 적재될 수 있는데, 운영체제는 이 프로세스에 필요한 자원을 할당하고, 스레드는 프로세스가 할당받은 자원을 이용해 프로세스의 작업을 수행합니다. 프로세스를 이루는 스레드가 둘 이상인 경우에는 동일한 작업을 동시에 실행할 수도 있습니다.
운영체제는 이렇게 동시다발적으로 실행되는 프로세스와 스레드가 올바르게 처리되도록 실행의 순서를 제어하고, 프로세스와 스레드가 요구하는 자원을 적절하게 배분할 수 있어야 합니다.
운영체제의 내용을 대략적으로 살펴보았습니다. 운영체제의 역할(핵심 기능)을 바탕으로 한눈에 정리된 운영체제 지도를 보면서 학습의 흐름을 정리해 보시기 바랍니다.
위 콘텐츠는 『이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접』의 내용을 재구성하여 작성하였습니다.
최신 콘텐츠