커널 포팅 (1. 개요 및 준비 / 1.1 커널이란 무엇인가?)

2025. 3. 6. 19:33프로그래밍/시스템

1.1 커널이란 무엇인가?

커널(Kernel)은 운영체제의 핵심(Core)으로, 하드웨어와 소프트웨어를 연결하는 중간 역할을 담당하는 프로그램입니다. 커널은 CPU, 메모리, 디스크, 네트워크, 프로세스 관리 등을 수행하며, 사용자 프로그램이 하드웨어에 직접 접근하지 못하도록 보호하는 역할을 합니다.


🔹 운영체제와 커널의 차이점

운영체제(OS, Operating System)와 커널은 밀접한 관계가 있지만, 개념적으로 차이가 있습니다.

구분  운영체제(OS) 커널(Kernel)
정의 컴퓨터의 자원을 관리하고 응용 프로그램이 실행될 수 있도록 하는 소프트웨어 전체 운영체제의 핵심 부분으로 하드웨어와 사용자 애플리케이션을 연결하는 역할
구성 요소 커널(Kernel), 사용자 인터페이스(Shell), 시스템 유틸리티 등 프로세스 관리, 메모리 관리, 파일 시스템 관리, 네트워크 스택 등
역할 하드웨어를 추상화하여 사용자와 응용 프로그램이 쉽게 사용할 수 있도록 지원 하드웨어 자원을 직접 제어하고 응용 프로그램이 하드웨어에 접근할 수 있도록 관리

💡 쉽게 말하면:
운영체제는 사용자가 직접 다루는 전체 시스템을 의미하며, 커널은 그 운영체제의 핵심 엔진이라고 생각할 수 있습니다.


🔹 커널의 역할 및 주요 기능

커널은 컴퓨터 시스템의 핵심적인 리소스를 관리하며, 주요 기능은 다음과 같습니다.

1️⃣ 프로세스 관리 (Process Management)

  • 프로그램 실행을 관리하는 기능
  • 프로세스 생성(fork()), 실행(exec()) 및 종료(exit())
  • CPU 스케줄링 (선점형, 비선점형 스케줄링)
  • 컨텍스트 스위칭(Context Switching) 및 동기화

2️⃣ 메모리 관리 (Memory Management)

  • 물리적 메모리(RAM)와 가상 메모리 관리
  • 페이지 테이블을 통한 메모리 주소 변환
  • 메모리 보호 및 메모리 할당(malloc(), free())
  • 스왑(Swap) 공간 관리

3️⃣ 파일 시스템 관리 (File System Management)

  • 파일 생성, 삭제 및 접근 제어(open(), read(), write())
  • 다양한 파일 시스템 지원 (ext4, NTFS, FAT32 등)
  • 파일 및 디렉토리 트리 구조 관리

4️⃣ 디바이스 관리 (Device Management)

  • 다양한 하드웨어 장치(디스크, 키보드, 네트워크 인터페이스)와의 통신
  • 드라이버를 통한 하드웨어 제어
  • dev 인터페이스를 통해 장치 접근 (/dev/sda, /dev/tty 등)

5️⃣ 네트워크 관리 (Networking)

  • TCP/IP 프로토콜 스택 관리
  • 네트워크 소켓(socket()) 제공
  • 방화벽 및 네트워크 보안 관리

6️⃣ 시스템 호출 인터페이스 (System Call Interface)

  • 사용자 프로그램이 커널 기능을 사용할 수 있도록 지원하는 API
  • syscall()을 통해 사용자 모드에서 커널 모드로 전환
  • 주요 시스템 호출: read(), write(), fork(), exec(), open(), close()

🔹 커널의 종류

커널은 설계 방식에 따라 여러 가지 유형으로 분류됩니다.

1️⃣ 모놀리식 커널 (Monolithic Kernel)

특징: 커널이 모든 기능(파일 시스템, 드라이버, 메모리 관리, 네트워크 등)을 하나의 큰 프로그램으로 구현한 구조

장점

  • 시스템 호출이 빠르고 성능이 뛰어남
  • 직접적인 하드웨어 접근이 가능하여 효율적

단점

  • 하나의 코드에 많은 기능이 포함되므로 유지보수가 어려움
  • 시스템 전체가 하나의 커널 모듈로 실행되므로, 오류 발생 시 전체 시스템에 영향

🛠 대표적인 예시:

  • 리눅스(Linux)
  • 유닉스(Unix)
  • MS-DOS

2️⃣ 마이크로커널 (Microkernel)

특징: 커널이 최소한의 기능(메모리 관리, 스케줄링, IPC)만 담당하고, 나머지는 사용자 공간에서 실행되는 구조

장점

  • 커널 크기가 작아 보안성이 높고 안정적
  • 특정 기능이 오류가 나도 시스템 전체가 영향을 받지 않음

단점

  • 사용자 공간과 커널 공간 간의 전환(Context Switching)이 많아 성능이 낮아질 수 있음
  • 시스템 호출 속도가 느림

🛠 대표적인 예시:

  • QNX
  • Minix
  • L4
  • Windows NT 초기 버전

3️⃣ 하이브리드 커널 (Hybrid Kernel)

특징: 모놀리식 커널과 마이크로커널의 장점을 조합한 구조

장점

  • 성능을 유지하면서도 일부 기능을 모듈화하여 안정성 향상
  • 일부 기능을 커널 공간에서 실행하고, 일부는 사용자 공간에서 실행하여 유연성을 제공

단점

  • 모놀리식 커널보다 구조가 복잡하여 개발이 어려움

🛠 대표적인 예시:

  • Windows NT (현대 윈도우즈)
  • macOS (XNU 커널)
  • Android (리눅스 기반이지만 일부 기능을 사용자 공간에서 실행)

🔹 리눅스 커널의 구조 개요

리눅스 커널은 모놀리식 커널 기반으로 설계되었으며, 모듈형 구조를 채택하여 확장성과 유지보수성을 높였습니다.

리눅스 커널의 주요 구성 요소

+---------------------------------------------+
|   응용 프로그램 (User Applications)         |
+---------------------------------------------+
|   시스템 호출 인터페이스 (System Call API)  |
+---------------------------------------------+
|   프로세스 관리 (Process Management)        |
|   메모리 관리 (Memory Management)          |
|   파일 시스템 (File System)                |
|   네트워크 스택 (Networking)                |
|   드라이버 (Device Drivers)                |
+---------------------------------------------+
|   하드웨어 (Hardware)                        |
+---------------------------------------------+

1️⃣ 시스템 호출 인터페이스 (System Call Interface, SCI)

  • 유저 공간에서 실행되는 애플리케이션이 커널 기능을 요청하는 인터페이스
  • 예: open(), read(), write(), fork(), exec()

2️⃣ 프로세스 관리 (Process Management)

  • 다중 프로세스 관리 (fork(), exec())
  • 스케줄링 (CFS, Completely Fair Scheduler)
  • 컨텍스트 스위칭

3️⃣ 메모리 관리 (Memory Management)

  • 가상 메모리 및 페이지 테이블 관리
  • 캐시 관리 및 스왑 메모리 관리

4️⃣ 파일 시스템 (File System)

  • 다양한 파일 시스템 지원 (ext4, XFS, FAT, NTFS 등)
  • 가상 파일 시스템(VFS) 구조 활용

5️⃣ 네트워크 스택 (Networking)

  • TCP/IP 프로토콜 스택 포함
  • 네트워크 인터페이스 관리

6️⃣ 디바이스 드라이버 (Device Drivers)

  • 다양한 하드웨어와 인터페이스
  • 모듈형 드라이버 (insmod, rmmod 활용 가능)