저번 운영체제는 공룡책 기반으로 만들었지만, 이번에는 혼공 컴퓨터구조+운영체제 버전으로 만들어볼까 합니다!!
흔히 사용하는 데스크톱 컴퓨터나 노트북, 스마트폰에는 모두 운영체제가 설치되어 있습니다.
대표적인 데스크톱 운영체제에는 윈도우와 macOS, 리눅스가 있고, 스마트폰 운영체제로는 안드로이드와 ios가 있습니다.
본 내용은 <혼자 공부하는 컴퓨터 구조 + 운영체제>를 바탕으로 만들어졌습니다.
운영체제란 무엇인가?
컴퓨터 프로그램은 실행되기 위해 하드웨어 자원을 필요로 합니다. 예를 들어 숫자 연산을 하려면 CPU가, 이미지를 저장하려면 하드디스크가 필요합니다. 이러한 자원을 총칭해 시스템 자원이라고 부릅니다.
CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들은 모두 자원이라고 볼 수 있습니다.
모든 프로그램은 실행을 위해 반드시 자원이 필요하며, 이 자원을 효율적으로 관리하고 할당하는 것이 운영체제입니다.
운영체제(Operating System, OS)는 단순한 소프트웨어가 아니라, 컴퓨터를 움직이게 하는 핵심적인 프로그램입니다. 실행할 프로그램에 필요한 자원을 할당하고, 이들이 올바르게 작동하도록 돕는 역할을 합니다.

운영체제의 구조와 구성
📌 사용자 공간 vs 커널 공간
운영체제는 일반 프로그램처럼 메모리에 적재되지만, 특별히 커널 영역(Kernel Space) 에 로드됩니다. 반면, 우리가 사용하는 브라우저나 게임 등은 사용자 영역(User Space) 에 로드됩니다.
- 커널 영역: 운영체제의 핵심 코드가 위치. 자원 할당 및 제어 기능 담당.
- 사용자 영역: 일반 애플리케이션이 실행되는 공간.
이처럼 운영체제는 사용자 프로그램과 분리된 공간에서 작동하며, 모든 자원 접근은 반드시 운영체제를 거쳐야 합니다.
=> 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리한다.( + cpu 자원도 할당)
* 응용 프로그램(application software)은 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램을 의미한다.
ex) 워드 프로세서, 인터넷 브라우저, 메모장, 게임

운영체제가 필요한 이유
운영체제가 없다면 개발자는 하드웨어 제어를 위한 모든 코드를 직접 작성해야 합니다. 예를 들어:
1 + 2를 계산하고 모니터에 출력하는 단순한 프로그램도,
- CPU에게 연산 명령 전달
- 메모리 할당
- 결과 출력
이 모든 과정을 직접 제어해야 하죠.
그러나 운영체제가 이런 기능을 대신해주기 때문에 개발자는 복잡한 하드웨어 제어를 신경 쓰지 않고 고수준 로직에 집중할 수 있습니다.
* 운영체제는 현재 하드웨어의 상태는 어떠한지, 여러분의 코드가 어떻게 실행되었는지, 하드웨어 상에 어떤 문제가 있었는지 등을 상세히 알려줄 수 있다.
커널, 이중 모드, 시스템 호출
운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램이다.
🔧 커널(Kernel)이란?
운영체제의 핵심 서비스(자원 접근, 프로그램 실행 관리 등)를 담당하는 부분입니다. 리눅스 커널만 해도 소스코드가 천만 줄 이상이며, 성능과 안정성에 큰 영향을 미칩니다.

* 사용자 인터페이스(User Interface)는 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로
- 그래픽 유저 인터페이스(GUI:Graphical User Interface) : 그래픽 기반
- 커맨드 라인 인터페이스(CLI:Command Line Interface) : 명령어 기반
★ 사용자 인터페이스는 운영체제가 제공하는 서비스이지만, 그저 컴퓨터와 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다. 실제로 같은 커널을 사용하더라도 사용자 인터페이스는 다를 수 있다.
🔐 이중 모드(Dual Mode)
운영체제는 사용자가 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.
운영체제는 자원 보호를 위해 CPU를 두 가지 모드로 구분합니다:
- 사용자 모드(User Mode): 일반 프로그램이 실행되는 모드. 직접 자원 접근 불가.
- 커널 모드(Kernel Mode): 운영체제가 실행되는 모드. 자원 접근 가능.
* CPU가 커널 모드로 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다.
사용자 모드에서 커널 모드로의 전환은 시스템 호출(system call)을 통해 이루어집니다.

📞 시스템 호출(System Call)
사용자 프로그램이 자원을 사용하려면, 커널에 요청을 보내야 합니다.
사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다.
예:
- write() → 화면에 출력
- read() → 입력 받기
- fork() → 자식 프로세스 생성
- execve() → 프로그램 실행
이러한 호출은 모두 운영체제가 제공하는 서비스이며, 내부적으로 인터럽트를 통해 커널 모드로 전환됩니다.
=> 정확히는 소프트웨어 인터럽트 : 입출력 장치나 특정 명령어에 의해 발생
◆ CPU가 시스템 호출을 처리하는 순서에 대해 알아보자. (= 인터럽트 처리 순서)
- 시스템 호출을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업한다.
- 커널 영역 내에 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴)을 실행한다.
- 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해 나간다.
EX. 한 응용 프로그램이 하드 디스크에 데이터를 저장하려 한다고 가정
- 하드 디스크에 데이터를 저장하는 시스템 호출을 발생시켜 커널 모드로 전환
- 운영체제 내의 '하드 디스크에 데이터를 저장하는 코드'를 실행시켜 하드 디스크에 접근
- 하드 디스크의 접근이 끝나면 다시 사용자 모드로 복귀하여 실

※ 응용 프로그램이 사용자 모드로 실행되므로 자원(하드 디스크)에 접근 X => 커널 모드로 전환
※ 응용 프로그램은 실행 과정에서 운영체제 서비스들을 빈번하게 이용(사용자 모드<=>커널 모드)

운영체제의 핵심 역할
✅ 프로세스 관리
- 프로세스: 실행 중인 프로그램
- 운영체제는 여러 프로세스를 효율적으로 스케줄링하여 CPU를 공정하게 할당합니다.
- 교착상태(Deadlock) 방지, 동기화 관리 등도 담당합니다.

✅ 자원 관리
- CPU: 어떤 프로세스에 언제, 얼마나 할당할지 결정 (CPU 스케줄링)
- 메모리: 어느 주소에 어떤 프로그램을 적재할지 결정
- 적재되는 프로세스들은 크기도, 주소도 가지각색 - 입출력장치: 하드웨어 인터럽트와 인터럽트 서비스 루틴을 통해 제어
1. 입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보낸다.
2. CPU는 하던 일을 잠시 백업한 뒤 커널 영역에 있는 인터럽트 서비스 루틴을 실행한다.
3. 운영체제가 인터럽트 서비스 루틴을 제공해 입출력 작업을 수행한다.
✅ 파일 시스템
- 파일 생성, 삭제, 읽기/쓰기, 디렉토리 관리
- 사용자에게 친숙한 방식으로 데이터 구조를 제공합니다
가상 머신과 하이퍼바이저 모드
최근의 CPU는 가상화(virtualization) 를 지원합니다. 이를 통해 가상의 컴퓨터(가상 머신)를 만들어 하나의 물리적 컴퓨터 위에서 여러 운영체제를 실행할 수 있습니다.
가상 머신은 사용자 모드에서 작동하므로, 운영체제 기능을 완벽하게 수행하려면 하이퍼바이저 모드(Hypervisor Mode) 가 필요합니다.
이로써 운영체제는 더 이상 커널/사용자 모드만 있는 것이 아닌, 다양한 모드를 지원하는 방향으로 발전하고 있습니다.

'운영체제' 카테고리의 다른 글
📌 11-1. CPU 스케줄링 (CPU Scheduling) (0) | 2025.04.20 |
---|---|
🧵 스레드(Thread)와 프로세스(Process)의 이해 (0) | 2025.04.19 |
프로세스 : 상태 변화와 계층 구조 (0) | 2025.04.19 |
운영체제(OS)란 무엇일까? 컴퓨터 시스템의 핵심 파헤치기 ✌️ (0) | 2025.04.17 |
🧠 프로세스 개요 (5) | 2025.04.14 |