운영체제(Operating System)가 제공하는 서비스에는 크게 커널(Kernel)과 사용자 인터페이스(User Interface; UI)가 있다. 그 중에서도 특히 커널은 운영체제의 핵심 서비스를 담당하며, 사용자 인터페이스는 윈도우의 바탕화면 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로다. 커널에 대한 설명은 잠시 미뤄두고, 사용자 인터페이스의 종류는 그래픽 유저 인터페이스(Graphic User Interface; GUI)와 커맨드 라인 인터페이스(Command Line Interface; CLI)가 있다. 전자는 앞서 말한 윈도우의 바탕화면처럼 그래픽을 기반으로 컴퓨터와 작용할 수 있는 인터페이스이며, 후자는 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스다.
01. 커널 (Kernel)
메모리 관리, CPU 관리 등을 담당하는 운영체제의 핵심 서비스를 커널이라고 한다.
전공서에서 말하는 운영체제는 일반적으로 커널을 뜻한다. 커널 이외에도 위에서 언급했던 사용자 인터페이스도 운영체제에 포함되지만 실제 운영체제가 하는 핵심적인 작업은 커널에서 이루어지므로 앞으로 운영체제는 커널을 지칭하는 걸로 하겠다.
운영체제는 우리가 사용하는 응용 프로그램이 직접적으로 하드웨어 자원에 접근하는 것을 방지해 자원을 보호한다. 만약 여러 응용 프로그램이 직접적으로 하드웨어 자원에 접근할 수 있다면 자원의 체계적인 관리가 어려울 것이기 때문이다. 이는 하드웨어 자원에 큰 문제를 일으킬 가능성이 있다.
운영체제가 자원을 보호하는 방법은 응용 프로그램이 운영체제를 통해서만 자원에 접근할 수 있도록 제한하는 것이다. 응용 프로그램이 자원에 접근하는 코드를 요청하면 운영체제는 응용 프로그램 대신 자원에 접근해 요청한 작업을 실행시켜준다. 즉 커널 영역은 자원에 접근해 데이터를 저장하거나 삭제하는 등 자원을 직접 조작할 수 있는 코드를 가지고 있고, 응용 프로그램이 자원에 접근해 데이터를 저장하기를 원한다면 커널에게 데이터를 저장하는 코드를 실행해달라고 요청해야 한다.
이러한 방식을 이중 모드(Dual Mode)라고 하는데, CPU가 명령을 실행하는 모드를 사용자 모드(User Mode)와 커널 모드(Kernel Mode)로 구분하는 것이다. 커널 모드는 수퍼바이저 모드(Supervisor Mode), 시스템 모드(System Mode), 특권 모드(Privileged Mode) 등으로도 불리는데 전부 어떤 권한을 갖고 있는 모드를 말한다.
사용자 모드는 커널 영역의 코드를 실행할 수 없는 제한된 모드다. 일반적으로 응용 프로그램은 사용자 모드로 실행되며, CPU 등의 자원에 직접적으로 접근할 수 없다. 반면 커널 모드는 커널 영역의 코드를 실행할 수 있는 모드로, 자원에 접근할 수 있는 권한을 가진다.
사용자 모드로 실행되는 응용 프로그램이 커널 모드로 전환해 자원에 접근하기 위해서는 운영체제에게 시스템 콜(System Call)을 요청해야 한다.
위 그림으로 시스템 콜이 발생되는 순서를 알아보자. 1. 먼저 사용자 모드로 응용 프로그램이 실행되다가 데이터를 저장해야 하는 등의 요구사항이 생기면 2. 운영체제의 커널 영역에 시스템 콜을 요청한다. 운영체제는 현재 응용 프로그램을 실행하고 있는 CPU에 일종의 인터럽트 핸들러인 트랩(Trap)을 발생시킨다. 신호를 받은 CPU는 지금까지의 작업을 백업하고 4. 커널 영역에 있는 데이터를 저장하는 코드(인터럽트 서비스 루틴)를 실행해 작업을 수행한 뒤 다시 3. 응용 프로그램으로 복귀해 작업을 마저 진행한다.
02. 가상 머신 (Virtual Machine)
현대 CPU는 이중 모드, 그리고 추가적으로 가상 머신을 지원한다.
가상 머신(Virtual Machine)은 소프트웨어로 만들어 낸 가상의 컴퓨터다. 일반적으로 컴퓨터에는 하나의 운영체제와 그에 따른 응용 프로그램들을 설치해 사용하는데, 가상 머신을 이용하면 또 다른 운영체제와 그에 맞는 응용 프로그램을 설치해 사용할 수 있다.
가상 머신도 어쨌거나 소프트웨어이므로 일반적으로 사용자 모드로 작동한다. 즉 커널 영역에 시스템 콜을 요청해야 한다는 말인데 이렇게 되면 가상 머신 속 응용 프로그램이 가상 머신 속 운영체제에 시스템 콜을 요청하면 해당 운영체제도 사용자 모드이기 때문에 문제가 발생한다.
이를 위해서 현대 CPU는 하이퍼바이저 모드(Hypervisor Mode)를 이중 모드와 더불어 추가로 지원한다. 하이퍼바이저 모드를 통해서 가상 머신 속 응용 프로그램은 가상 머신 속 운영체제를 통해서 커널 영역에 접근할 수 있다.
'프로그래밍 > Computer Science' 카테고리의 다른 글
[Data Structure] Linear - (2) Linked List - Singly Linked List (0) | 2023.08.16 |
---|---|
[Data Structure] Linear - (1) Array (0) | 2023.08.16 |
[Overview] 03. Operating Systems - (1) The History of Operating Systems (0) | 2023.07.31 |
[Overview] 02. Data Manipulation - (2) Program Execution (0) | 2023.07.21 |
[Overview] 02. Data Manipulation - (1) Computer Architecture and Machine Language (0) | 2023.07.17 |