운영체제를 알아야 하는 이유
운영체제란 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.
운영체제도 프로그램이기 때문에 메모리에 적재되어야 한다. 다만 운영체제는 특별한 프로그램이기 때문에 컴퓨터가 부팅될 때 메모리 내 커널영역(kernel space)이라는 공간에 따로 적재되어 실행된다. 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역을 사용자 영역(user space)이라고 한다.
운영체제는 사용자 영역에 프로그램을 적재해주는데, 메모리 주소가 겹치지 않도록 적당한 공간에 적재한다. 또 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리를 관리한다.
프로그램이 실행되려면 반드시 CPU가 필요한데, 운영체제가 어느 프로그램이 CPU를 독점하지 않고 올바르게 실행되도록 관리해준다.
운영체제는 여러 자원을 효율적으로 배분하고, 실행할 프로그램들이 지켜야 할 규칙을 만들어 컴퓨터 시스템 전체를 관리한다.
운영체제가 어떻게 동작하는지 잘 안다면 문제가 발생했을때 이유를 더 명확하게 찾을 수 있고, 최적화에 더욱 신경을 쓸 수 있다.
운영체제의 큰 그림
운영체제의 심장, 커널
운영체제는 현존하는 프로그램 중 규모가 가장 크며, 다양한 기능을 제공한다. 그중 핵심적으로 제공하는 기능이 있다. 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이 핵심적인 기능이다. 이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다.
운영체제가 설치된 모든 기기에는 커널이 있으며, 어떤 커널을 사용하는지에 따라 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상도 달라지고, 컴퓨터의 성능도 달라질 수 있다.
운영체제가 제공하는 서비스 중에는 커널에 포함되지 않는 서비스가 있는데, 대표적으로 사용자 인터페이스가 있다. 사용자 인터페이스(UI; User Interface)는 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로이다.
운영체제가 제공하는 UI의 종류에는 그래픽 유저 인터페이스(GUI)와 커맨드 라인 인터페이스(CLI)가 있다.
이중 모드와 시스템 호출
운영체제는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. 직접 접근하게 된다면 응용 프로그램이 조금만 실수해도 컴퓨터 전체에 큰 악영향을 끼칠 수 있기 때문이다.
운영체제는 응용 프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서 접근하도록 하는데, 이런 역할은 이중 모드로써 구현된다. 이중 모드(dual mode)란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.
- 사용자 모드
- 운영체제 서비스를 제공받을 수 없는 실행모드로, 커널 영역의 코드를 실행할 수 없는 모드이다. 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다. 사용자 모드로 실행 중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없다.
- 커널 모드
- 운영체제 서비스를 제공받을 수 있는 실행모드로, 커널 영역의 코드를 실행할 수 있는 모드이다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.
CPU의 사용자 모드, 커널 모드 여부는 플래그 레지스터 속 슈퍼바이저 플래그를 통해 알 수 있다.
사용자 모드로 실행되는 프로그램이 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야한다. 이 때 프로그램이 보내는 요청을 시스템 호출(system call)이라고 한다.
시스템 호출은 일종의 인터럽트이다. 정확히는 소프트웨어적 인터럽트인데, 인터럽트는 입출력장치에 의해 발생하기도 하지만, 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 한다. 이를 소프트웨어 인터럽트라고 한다.
CPU가 시스템 호출을 처리하는 순서는 다음과 같다.
- 시스템 호출을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업한다.
- CPU가 커널 영역 내에 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴)를 실행한 한다.
- 시스템 호출을 수행하는 코드가 끝났으면, 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해 나간다.
일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스들을 매우 빈번하게 이용한다. 그 과정에서 빈번하게 시스템 호출을 발생시키고 사용자 모드와 커널 모드를 오가며 실행된다.
운영체제의 핵심 서비스
이 글에서 다룰 운영체제의 핵심 서비스는 다음과 같다.
- 프로세스 관리
- 실행중인 프로그램을 프로세스(process)라고 한다. 일반적으로 하나의 CPU는 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행한다.
- 이때 각 프로세스는 상태도, 사용하고자 하는 자원도 다양하다. 또 당장 실행할 수 있는 프로세스가 있는 반면, 당장 실행이 불가능한 프로세스도 있다. 운영체제는 다양한 프로세스를 일목요연하게 관리하고 실행할 수 있어야 한다.
- 자원 접근 및 할당
- 모든 프로세스는 자원이 있어야 실행할 수 있다. 운영체제는 프로세스들이 필요한 자원에 접근하고 조작하여 프로세스가 필요한 자원을 할당해준다.
- CPU : 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기 때문에, 운영체제는 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정할 수 있어야한다. 이를 CPU 스케줄링이라고 한다.
- 메모리 : 프로세스를 메모리에 적재할 때 어디에 절재해야할 지 결정해야하며, 메모리가 꽉 찼을 때 어떻게 처리를 해야할지 결정해야한다.
- 입출력장치 : 인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있다. 입출력장치가 발생시키는 하드웨어 인터럽트도 마찬가지이다. 입출력장치가 CPU에 하드웨어 인터럽트를 보내면 CPU는 잠시 하던 일을 백업하고 커널 영역에 있는 인터럽트 서비스 루틴을 실행한다. 운영체제는 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행한다.
- 파일 시스템 관리
- 파일은 열고, 생성하고, 삭제할 수 있다. 또 파일들을 묶어 디렉터리(폴더)로 과닐한다. 이런 파일 시스템도 운영체제가 지원하는 핵심 서비스이다.
가상 머신과 이중 모드의 발전
이중 모드는 커널 모드와 사용자 모드, 두 가지 모드를 지원하지만, 가상 머신을 통한 가상화를 지원하는 현대 CPU는 두 가지 모드 이상을 지원한다.
가상머신이란 소프트웨어적으로 만든 가상 컴퓨터이다. 가상 머신을 설치하면 새로운 운영체제와 응용 프로그램을 설치하고 실행할 수 있다.
운영체제에 가상 머신을 실행하면, 그 가상 머신은 응용 프로그램으로 인식하기 때문에 사용자 모드로 작동한다. 이때 가상 머신내에 응용프로그램이 커널 모드로 전환되어야 한다면, 사용자 모드인 가상 머신은 어떻게 되어야할까?
가상화를 지원하는 CPU는 커널 모드와 사용자 모드 이외에 가상 머신을 위한 모드인 하이퍼바이저 모드를 따로 둔다. 가상 머신 상에서 작동하는 응용 프로그램들은 하이퍼바이저 모드로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.
'도서 정리 > 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
[혼자 공부하는 컴퓨터 구조 + 운영체제] 11강 CPU 스케줄링 (0) | 2025.01.30 |
---|---|
[혼자 공부하는 컴퓨터 구조 + 운영체제] 10강 프로세스와 스레드 (0) | 2025.01.30 |
[혼자 공부하는 컴퓨터 구조 + 운영체제] 8강 입출력장치 (0) | 2025.01.19 |
[혼자 공부하는 컴퓨터 구조 + 운영체제] 7강 보조기억장치 (0) | 2025.01.19 |
[혼자 공부하는 컴퓨터 구조 + 운영체제] 6강 메모리와 캐시 메모리 (0) | 2025.01.19 |