우리는 컴퓨터로 다양한 응용프로그램을 실행하며 여러 작업을 처리합니다. 예를 들어, 저는 주로 구글, 유튜브, 인텔리제이와 같은 프로그램을 동시에 실행하여 여가시간을 보내거나 개발 작업을 합니다. 이렇게 여러 응용프로그램이 원활하게 동작하려면 CPU, 메모리 등 다양한 자원이 필요합니다. 그런데 응용프로그램이 자원을 직접 관리하도록 하면 어떤 문제가 발생할 수 있을까요?
첫 번째로 발생할 수 있는 문제는 컴퓨터 자원의 독점입니다. 한 응용프로그램이 CPU를 독점하게 되면 다른 프로그램이 제대로 동작하지 않을 수 있습니다. 예를 들어, 유튜브로 영상을 보는 동안 구글 검색을 하지 못하거나, 노래를 들으면서 개발을 할 수 없는 상황이 생길 수 있습니다. 이는 컴퓨터 자원의 비효율적인 사용으로 이어질 수 있습니다.
또 다른 문제는 보안상의 취약점입니다. 응용프로그램이 자원에 직접 접근하는 경우, 악성 프로그램이 실행 중인 다른 프로그램의 메모리와 데이터에 접근하여 정보를 탈취하거나 변조할 수 있습니다. 이러한 문제는 개인 정보 유출, 데이터 조작과 같은 심각한 결과를 초래하며, 프로그램이 의도한 대로 동작하지 못하게 만드는 원인이 될 수 있습니다.
위와 같이 컴퓨터 자원과 응용프로그램 사이에서 발생할 수 있는 문제를 해결하고자 운영체제
가 등장했습니다. 운영체제는 사용자와 하드웨어 사이의 인터페이스를 제공해 효율적으로 응용프로그램이 동작하도록 지원하고 시스템 자원을 효율적으로 관리하여 응용프로그램들이 원활하게 동작하는데 도움을 주는 소프트웨어입니다.
운영체제와 커널의 차이는 무엇인가?
커널은 운영체제의 핵심 요소로 운영체제가 커널, 파일 시스템, 사용자 인터페이스 등 여러 가지 작업을 통해 사용자와 통신을 하는 것이라면 커널은 메모리, 프로세스, cpu 등 하드웨어 리소스를 관리하는 소프트웨어 입니다. 즉, 운영체제는 사용자와 컴퓨터 자원을 이어주는 다리역할이라면 커널은 응용프로그램과 하드웨어를 이어주는 다리역할입니다.참고자료
앞서서 운영체제는 여러 응용프로그램이 원활하게 동작하는데 도움을 주는 소프트웨어라는 것을 학습했습니다. 그러면 응용프로그램들은 어떻게 운영체제를 통해서 적절한 자원을 얻을 수 있을까요? 이를 알아보기 위해서 컴퓨터 시스템의 구조에 대해서 알아보겠습니다.
위의 그림을 보면 컴퓨터 시스템은 유저모드
와 커널모드
로 구분되는 것을 볼 수 있습니다. 각각의 모드를 간단하게 살펴보면 유저모드
는 제한된 모드로 사용자가 응용프로그램을 실행시키기 위해 접근하는 영역이고 커널모드
는 컴퓨터의 자원관리 및 하드웨어와 통신을 처리하는 영역입니다. 컴퓨터의 시스템이 두개의 모드로 분리된 이유는 응용프로그램에서는 직접 컴퓨터 자원 및 연산에 접근하지 못하게 하기 위함입니다. 다시 돌아와서 응용프로그램은 어떻게 CPU 및 메모리 등 자원을 획득 및 접근할 수 있을까요? 두 모드에서 통신은 어떻게 이루어지는 것일까요?
유저모드에서 커널모드와 통신하기 위해서는 시스템 콜(System call)
을 이용합니다. 시스템 콜은 개발에서 프론트앤드와 백엔드가 api를 통해 통신하는 것과 같이 유저모드에서 커널이 제공하는 기능를 이용하기 위한 인터페이스입니다.
시스템 콜 종류에는 프로세스 제어(Process Control), 파일 작업(File Management), 장치 관리(Device Management), 통신(Communication), 메모리 관리(Memory Management) 등이 있습니다.
지금까지 유저모드, 커널모드, 시스템 콜에 대해서 알아보았습니다. 이를 통해서 실제 프로그램이 실행될 때 유저모드와 커널 모드가 어떻게 동작을 하는지 알아보겠습니다.