운영체제를 알아야 하는 이유
운영체제란
프로그램 실행에 마땅히 필요한 요소들을 가리켜 시스템 자원, 혹은 줄여서 자원이라고 한다. 앞에서 공부한 컴퓨터 부품들은 모두 자원이라 볼 수 있다.
여기서 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램이 운영체제이다. 운영체제는 브라우저, 게임과 같은 프로그램이다. 그렇기에 운영체제 또한 메모리에 적재되어야 하는데 특별한 프로그램이기 때문에 항상 컴퓨터가 부팅될 때 메모리 내 커널 영역에 따로 적재되어 실행된다. 커널 영역을 제외한 나머지 영역을 사용자가 이용하는 프로그램이 적재되는 사용자 영역이라 한다. 즉 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.
세 개의 응용 프로그램이 사용자 영역에 적재되어 동시에 실행된다 할 때 메모리 주소가 겹치지 적재해 주는 것이 운영체제이다. 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리합니다.
프로그램들이 실행되려면 반드시 CPU가 필요하다. 어느 프로그램부터 CPU를 사용할까? 또한 얼마나 점유할까? 이 또한 운영체제가 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.
이처럼 운영체제는 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 돌아가도록 규칙을 만들어 관리하는 역할을 한다. 또한 관리할 자원별로 기능이 나누어져 있다.
운영체제를 알아야 하는 이유
운영체제가 없다면 개발자가 하드웨어를 조작하는 코드를 모두 조작하는 복잡한 상황이 발생한다. 다행히 운영체제가 하드웨어를 조작하고 관리해 주기에 개발자는 따로 하드웨어를 조작하는 코드 없이 개발을 할 수 있게 된다.
또한 운영체제를 앎으로써 현재 하드웨어의 상에 어떤 문제가 있는지 등을 상세히 알려준다. 이를 통해 문제 해결을 할 수 있고 운영체제에 제대로 명령해 프로그램과 하드웨어를 더 깊이 이해할 수 있다.
운영체제의 큰 그림
운영체제의 심장, 커널
자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이 운영체제의 핵심 서비스다. 이러한 핵심 서비스를 담당하는 부분을 커널이라 한다. 운영체제가 설치된 모든 기기에는 커널이 있으며 이는 사람의 심장, 자동차의 엔진과 같다.
운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스도 있는데, 대표적으로 사용자 인터페이스가 있다. 사용자 인터페이스(UI)는 윈도우 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로다.
사용자 인터페이스의 종류로는 그래픽 유저 인터페이스(GUI)와 커맨드 라인 인터페이스(CLI)가 있다. 바탕화면을 통하는 GUI와 달리 CLI는 명령어를 기반으로 사용자가 컴퓨터를 사용하기 위해 정해진 명령어를 입력함으로써 컴퓨터와 상호작용할 수 있다.
이러한 사용자 인터페이스는 운영체제가 제공하는 서비스이지만, 그저 컴퓨터와 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다.
이중 모드와 시스템 호출
운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지함으로 자원을 보호한다. 만약 응용 프로그램이 마음대로 접근하고 조작할 수 있다면 자원이 무질서하게 관리될 것이고 조그만 실수에도 큰 악영향을 끼칠 수 있게 된다.
이러한 보호 역할은 이중 모드로써 구현된다. 이중 모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.
사용자 모드는 운영체제 서비스를 제공받을 수 없는 실행 모드다. 즉, 커널 영역의 코드를 실행할 수 없는 모드다. 일반적인 응용 프로그램은 사용자 모드로 실행되기에 자원에 접근할 수 없다.
반면 커널 모드는 운영체제 서비스를 제공받을 수 있는 실행 모드다. 즉, 커널 영역의 코드를 실행할 수 있는 모드다. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.
사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이러한 요청을 시스템 호출(시스템 콜)이라 한다. 일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스들을 매우 빈번하게 이용한다.
시스템 호출은 일종의 소프트웨어적인 인터럽트다. 인터럽트는 입출력장치에 의해 발생하기도 하지만 이러한 특정 명령어에 의해서도 발생하기도 한다. 이를 소프트웨어 인터럽트라 한다. 이 또한 앞에서 설명한 인터럽트 처리 순서와 유사하다.
운영체제의 핵심 서비스
지금 다루는 내용은 키워드만 다루고 상세한 설명은 다음 글에서 다루겠다.
- 프로세스 관리
실행 중인 프로그램을 프로세스라 한다. 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행한다. 이때 각 프로세스는 상태도, 사용하고자 하는 자원도 다양하다. 그래서 운영체제는 다양한 프로세스를 관리하고 실행할 수 있어야 한다.
추가로 여러 프로세스가 동시에 실행되는 환경에서 '프로세스 동기화'는 필수이고, 프로세스가 꼼짝도 못 하고 더 이상 실행되지 못하는 상황인 '교착 상태'를 해결해야 한다.
- 자원 접근 및 할당
모든 프로세스는 실행을 위해 자원을 필요로 한다. 앞에서 설명한 네 가지 핵심 부품 CPU, 메모리, (보조기억장치)입출력 장치를 어떻게 관리하고, 기능 등을 제공하는지 알아보자
1. CPU
하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다. 그래서 하나의 프로세스가 CPU를 이용한다면 다른 프로세스는 기다려야 한다. 이에 운영체제는 프로세스들에 공정하게 CPU를 할당하기 위해 어느 프로세스부터 사용할지 얼마나 사용할지를 결정해 준다. 이를 CPU 스케줄링이라 한다.
2. 메모리
메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 가지각색이다. 실행할 때마다 적재되는 주소 또한 달라질 수 있다. 때로 메모리가 가득 차 있거나 공간이 있음에도 적재하지 못하는 경우가 있다. 그래서 운영체제는 새로운 프로세스가 적재될 때마다 어느 주소에 적재할지 결정해야 한다.
3. 입출력장치
인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 위치한다. 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로 입출력 작업을 수행한다.
- 파일 시스템 관리
우리는 컴퓨터를 사용하며 파일을 생성하고 열고 삭제하며 사용한다. 이 파일 등을 한데 묶어 디렉터리로 관리한다. 이러한 파일 시스템도 운영체제가 지원하는 핵심 서비스다.
'CS 공부 > 컴퓨터 구조, 운영체제' 카테고리의 다른 글
| 운영체제(3) - CPU 스케줄링 (0) | 2026.02.14 |
|---|---|
| 운영체제(2) - 프로세스와 스레드 (0) | 2026.02.13 |
| 컴퓨터 구조(8) - 입출력 장치 (0) | 2026.02.08 |
| 컴퓨터 구조(7) - 보조기억장치 (0) | 2026.02.06 |
| 컴퓨터 구조(6) - 메모리와 캐시 메모리 (0) | 2026.02.06 |