모놀리식 구조 (Monolithic Structure / Simple Structure)

그림은 모놀리식 구조를 보여준다:
- User Mode (사용자 모드): Application(응용 프로그램)들이 위에 위치
- System call interface (시스템 콜 인터페이스): 경계선
- Kernel Mode (커널 모드): 모든 커널 구성 요소들이 하나의 큰 덩어리로 서로 연결되어 있음. 모든 모듈이 양방향 화살표로 연결되어 있어, 어떤 모듈이든 다른 모듈을 직접 호출할 수 있다.
- Hardware (하드웨어): 최하위

- MS-DOS는 최소 공간에서 최대 기능을 제공하도록 작성되었다.
- 모듈로 나뉘지 않았다.
- MS-DOS가 어느 정도의 구조를 가지고 있지만, 인터페이스와 기능 수준이 잘 분리되어 있지 않다.
- MS-DOS는 사용자가 장치를 직접 제어할 수 있게 허용하여, 사용자 프로그램이 실패하면 전체 시스템이 크래시된다.
application program ← 응용 프로그램
↓
resident system program ← 상주 시스템 프로그램
↓
MS-DOS device drivers ← MS-DOS 장치 드라이버
↓
ROM BIOS device drivers ← ROM BIOS 장치 드라이버
계층 간 경계가 명확하지 않아 응용 프로그램이 장치 드라이버를 직접 건너뛰어 호출할 수 있었다.
핵심 포인트: 모놀리식 구조는 단순하고 빠르지만, 모든 코드가 하나의 커널에 뒤섞여 있어 한 부분의 오류가 전체 시스템에 영향을 준다. 유지보수와 확장이 어렵다.
계층적 접근 (Layered Approach)

-
동기 (Motivation)
- 현대 운영체제의 복잡성이 점점 증가하고 있다.
- 소스 코드의 효율적 관리를 위해, 전체 기능과 특성을 결정하여 구성 요소들로 분리한다.
-
정의 (Definition)
- 운영체제를 여러 계층(layer/level)으로 나누며, 각 계층은 하위 계층 위에 구축된다.
- Layer 0 (최하위): 하드웨어 , Layer N (최상위): 사용자 인터페이스
- 모듈성을 통해, 각 계층이 하위 계층의 기능과 서비스만 사용하도록 선택된다.
-
장점과 단점
| 구분 | 한국어 |
|---|
| 장점 | 구축과 디버깅이 단순하다. 각 계층을 독립적으로 테스트 가능 |
| 단점 1 | 다양한 계층을 적절히 정의하기 어렵다 |
| 단점 2 | 계층 정의가 불분명하면 구성 요소 간 계층 의존성이 깨질 수 있다 |
| 단점 3 | 추가 오버헤드 발생 (각 계층을 거치면서 함수 호출이 누적) |


- 커널 내부에 시그널 처리, 파일 시스템, CPU 스케줄링, 가상 메모리 등이 모두 함께 존재한다.
- UNIX는 완전한 계층형은 아니지만, 시스템 콜 인터페이스를 통해 사용자 공간과 커널 공간을 구분한다.
마이크로커널 구조 (Microkernel System Structure)

- 동기 (Motivation)
- 계층적 아키텍처에서는 새로운 기능을 추가하기 어렵다. 즉, 새로운 계층을 확장하기 쉽지 않다.
좌측(기존)에서 파일 시스템과 장치 드라이버 사이에 버퍼 캐시(Buffer cache)를 추가하려면 계층 구조를 변경해야 하는 어려움을 보여준다.

마이크로커널 아키텍처
| 구분 | 한국어 |
|---|
| 장점 | 마이크로커널을 확장하기 쉽다 |
| 장점 | 불필요한 모듈을 제거하기 쉽다 |
| 장점 | 새로운 아키텍처로 OS를 이식하기 쉽다 |
| 장점 | 커널 모드에서 실행되는 코드가 적으므로 더 안정적 |
| 장점 | 프로세스 주소 공간으로 인해 더 보안성이 높다 |
| 단점 | 사용자 공간↔커널 공간 통신의 성능 오버헤드 |

- Internet Explorer(응용 프로그램)가 파일을 읽으려면: Internet Explorer → Microkernel(메시지 전달) → File Server → Microkernel(메시지 전달) → Internet Explorer 모든 서버는 사용자 모드에서 동작하며, 마이크로커널만 커널 모드에서 동작한다.
핵심 포인트: 마이크로커널은 커널을 최소화하고 나머지를 사용자 공간 서버로 분리한다. 안정성과 확장성이 높지만, 서버 간 메시지 전달로 인한 성능 오버헤드가 단점이다.
모듈 (Modules)


- 중심에 핵심 커널(core Solaris kernel)이 있고, 주변에 다양한 모듈(장치 드라이버, 파일 시스템, 스케줄링 클래스 등)이 동적으로 연결된다.
- Windows, Linux, FreeBSD 등 대부분의 현대 OS가 이 방식을 사용한다.
핵심 포인트: 모듈 구조는 계층 구조의 장점(분리)과 모놀리식의 장점(성능)을 결합한다. 필요한 기능만 동적으로 로드/언로드할 수 있어 유연하고 효율적이다.
가상 머신 (Virtual Machines)

- 가상 머신의 개념
- 가상 머신은 계층적 접근의 논리적 극한이다. 하드웨어와 운영체제 커널을 마치 모두 하드웨어인 것처럼 취급한다.
- 가상 머신은 기반 베어 하드웨어와 동일한 인터페이스를 제공한다.
- 운영체제가 여러 프로세스가 각각 자신만의 프로세서와 (가상) 메모리에서 실행되는 환상(illusion)을 만든다.

- 하나의 물리 하드웨어 위에 가상 머신 구현 계층이 있고, 그 위에 여러 개의 독립적인 가상 머신(VM1, VM2, VM3)이 실행된다.
- 각 VM은 자신만의 커널과 프로세스를 가진다.

장점과 단점
- 장점
- 가상 머신 개념은 각 가상 머신이 다른 모든 가상 머신으로부터 격리(isolated)되므로 시스템 자원의 완전한 보호를 제공한다. 그러나 이 격리는 자원의 직접 공유를 허용하지 않는다.
- 가상 머신 시스템은 OS 연구 개발을 위한 완벽한 수단이다. 실제 물리 머신 대신 가상 머신에서 개발하므로 정상 시스템 운영을 방해하지 않는다.
- 단점
- 가상 머신 개념은 기반 머신의 정확한 복제를 제공해야 하므로 구현이 어렵다.
VMware 아키텍처 (VMware Architecture)

- 구성 요소 설명:
- Hardware: 실제 물리적 CPU, 메모리, I/O 장치
- Host operating system (Linux): 실제 하드웨어 위에서 직접 실행되는 호스트 OS
- Virtualization layer: 가상화 계층. 호스트 OS 위에서 여러 가상 머신을 관리
- Guest OS: 각 가상 머신 내에서 실행되는 게스트 운영체제 (FreeBSD, Windows NT, Windows XP 등 서로 다른 OS 가능!)
- Virtual CPU/memory/devices: 각 게스트 OS에게 제공되는 가상 하드웨어
- Application: 호스트 OS에서 직접 실행되는 일반 응용 프로그램 (왼쪽), 또는 게스트 OS 내에서 실행되는 응용 프로그램
핵심 포인트: VMware는 하나의 물리 머신에서 여러 다른 OS를 동시에 실행할 수 있게 한다. 각 게스트 OS는 자신만의 가상 CPU, 가상 메모리, 가상 장치를 가지며, 서로 완전히 격리된다.
Java 가상 머신 (The Java Virtual Machine)

-
VM 구조와 Java 실행 흐름
- 좌측: JVM 내부 구조
- 우측: Java 프로그램 실행 흐름
-
상세 설명:
1. 프로그래머가 Java 프로그램(.java)을 작성한다.
2. Java 컴파일러(javac)가 소스 코드를 바이트코드(bytecode, .class 파일)로 컴파일한다.
3. 클래스 로더(class loader)가 .class 파일과 Java API .class 파일을 로드한다.
4. Java 인터프리터(interpreter)가 바이트코드를 해석하여 실행한다.
인터프리터는 호스트 시스템(Windows, Linux 등)의 기계어로 변환하여 실제 하드웨어에서 실행한다.

- 바이트코드는 특정 하드웨어에 종속되지 않는 중간 코드이다.
- JVM만 있으면 어떤 플랫폼에서든 같은 바이트코드를 실행할 수 있다 → "Write Once, Run Anywhere"
핵심 포인트: JVM은 소프트웨어로 구현된 가상 머신이다. Java 프로그램은 바이트코드로 컴파일되고, JVM이 이를 해석하여 실행하므로 플랫폼에 독립적이다.
시스템 부트 (System Boot)

- 부팅이란?
- 부트스트랩 프로그램 (Bootstrap program / boot loader / BIOS)
- step 1 : 진단을 실행하여 머신의 상태(DRAM과 장치)를 확인
- step 2 : 커널을 찾아 메인 메모리에 로드하고 실행을 시작

- 1단계 부팅 vs 2단계 부팅
- 1단계 부팅 과정 (One-step process):
- ROM의 부트스트랩 프로그램이 직접 디스크에서 커널을 찾아 DRAM에 로드한다.
- 2단계 부팅 상세:
- Step 1: BIOS가 진단 실행 → 디스크의 고정 위치(블록 0)에서 부트 블록(MBR, Master Boot Record)을 DRAM에 로드 → 부트 블록의 코드 실행
- Step 2: 부트 블록의 코드가 전체 운영체제(커널)를 DRAM에 로드하고 실행
핵심 포인트: 2단계 부팅은 BIOS가 먼저 작은 부트 블록을 로드하고, 부트 블록이 다시 커널을 로드하는 방식이다. 이렇게 나누는 이유는 ROM의 크기가 제한적이라 복잡한 파일 시스템 처리를 할 수 없기 때문이다.
용어 : Bootstrap / BIOS
부팅 시 최초 실행되는 프로그램
LILO (Case Study: LILO)

- LILO(LInux LOader)는 Linux용 범용 부트 로더이다.
- 특징
- LILO는 MBR 또는 파티션의 부트 섹터에 배치할 수 있다
- LILO는 특정 파일 시스템에 의존하지 않는다
- LILO는 플로피 디스크와 하드 디스크에서 OS를 부팅할 수 있다
핵심 포인트: 부트 로더는 컴퓨터 시작 시 어떤 운영체제를 로드할지 선택하고 실행하는 프로그램이다. LILO, GRUB 등이 Linux에서 사용되며, 멀티 부팅을 가능하게 한다.
전원 ON
│
▼
[BIOS] (ROM에 있음)
│ ① 하드웨어 진단 (POST)
│ ② 디스크에서 부트 블록(MBR) 로드
│ ③ 부트 블록으로 제어 전달
▼
[Bootstrap / Boot Loader] (MBR에 있음, 예: GRUB)
│ ① 커널 위치를 찾음
│ ② 커널을 메모리에 로드
│ ③ 커널로 제어 전달
▼
[Kernel] (OS 시작)
| 용어 | 위치 | 역할 | 비유 |
|---|
| BIOS | ROM | 하드웨어 진단 + 부트 블록 로드 | 아침에 눈 뜨고 몸 상태 확인하는 것 |
| Boot Loader (Bootstrap) | 디스크 MBR | 커널을 찾아 메모리에 로드 | 옷 입고 출근 준비하는 것 |
| Kernel | 디스크 → 메모리 | OS 본격 실행 | 실제 일(업무) 시작 |