IT/운영체제

⚙️ [운영체제] 커널 로딩 및 시스템 초기화

BlogFlow 2025. 5. 26. 18:00
반응형

[운영체제 목차 바로가기]

2️⃣ 운영체제의 구조 - 운영체제 부팅 과정

 

📌 커널 로딩 및 시스템 초기화 (Kernel Loading & System Initialization)


운영체제의 부팅 과정에서 BIOS/UEFI와 부트로더 단계를 지나면,

운영체제 커널(Kernel)이 메모리로 로드되고 시스템 초기화 절차가 수행된다.

이 단계는 운영체제가 하드웨어를 완전히 장악하고, 사용자 프로세스 실행 환경을 구축하는 핵심 구간이다.


1️⃣ 커널 로딩이란?

커널 로딩은 부트로더가 운영체제의 핵심 실행 파일(커널 이미지)를 메모리로 불러오고 실행하는 과정이다.

💡 로딩 대상

  • Linux: /boot/vmlinuz-*, /boot/initrd.img-*
  • Windows: ntoskrnl.exe, hal.dll
  • macOS: kernel, boot.efi 등

📦 커널 이미지 종류

커널 이미지 유형 설명
vmlinux 컴파일된 커널 전체, 디버깅용, 압축되지 않음
vmlinuz 압축된 커널 이미지 (부팅 시 사용)
initrd/initramfs 루트 파일시스템 초기화용 RAM 디스크

부트로더는 압축된 커널 이미지를 메모리에 풀고 실행 지점(entry point)으로 점프한다.


2️⃣ 커널 진입 직후 수행 작업

✅ 1. 아키텍처별 초기화

  • CPU 구조에 따라 필수 하드웨어 초기화 (x86, ARM 등)
  • 인터럽트 벡터 테이블 구성
  • 페이지 테이블 설정 (가상 메모리 환경 구축)
  • MMU(Memory Management Unit) 활성화

✅ 2. 메모리 서브시스템 초기화

  • 메모리 맵 분석 (BIOS/UEFI가 전달한 정보 기반)
  • RAM, swap, 힙(heap), 커널 스택 영역 설정
  • 페이지 프레임 할당자 초기화 (buddy system, slab/slub 등)

✅ 3. 디바이스 트리 / ACPI 파싱

  • 장치 트리(Device Tree) 또는 ACPI 테이블 파싱하여 하드웨어 구성 인식
  • 메인보드, CPU, I/O 포트, 버스 정보 수집

3️⃣ 시스템 콜 인터페이스 구축

커널은 사용자와의 통신을 위해 시스템 콜 테이블과 트랩 핸들러를 초기화한다.

  • 시스템 콜 번호와 처리 함수 매핑
  • 트랩 벡터에 syscall, sysenter 인터럽트 루틴 연결
  • 사용자 공간에서 커널 기능을 호출할 수 있도록 인터페이스 개방

4️⃣ 디바이스 드라이버 로딩

✅ 정적 방식 (커널에 내장)

  • 커널 컴파일 시 통합된 드라이버는 커널 초기화 과정에서 자동 등록
  • 예: 핵심 저장장치, 콘솔, 메모리 컨트롤러 등

✅ 동적 방식 (모듈 로딩)

  • initrd/initramfs 또는 사용자 공간에서 modprobe, udevd 등을 통해 필요 시 로딩
  • USB, 그래픽, 사운드, 네트워크 등 다양한 장치에 대해 유연한 대응 가능

Linux에서는 /lib/modules/$(uname -r)/ 경로에 드라이버 모듈(.ko 파일) 존재


5️⃣ 루트 파일 시스템 마운트 (Root FS Mounting)

초기 RAM 디스크 사용

  • initrd 또는 initramfs는 임시 루트 파일시스템으로 커널 초기화에 필요한 도구 포함
  • 필요한 드라이버, 부트 스크립트(init, systemd, initramfs-tools 등) 내장

영구 루트 파일 시스템 전환

  • 실제 루트 파티션(/, /boot, /home)을 마운트
  • 파일시스템 드라이버가 준비된 후 pivot_root() 또는 switch_root() 호출하여 전환

6️⃣ 사용자 공간 프로세스 실행

🔹 최초 사용자 프로세스 실행

  • 커널은 최종적으로 PID 1번 프로세스(init 또는 systemd)를 실행
  • 이 프로세스는 전체 사용자 공간의 루트가 되며,
  • 서비스 매니저, 데몬, 로그인 관리 등을 담당한다.

🔹 Linux

  • 전통적으로 /sbin/init → 최근에는 systemd
  • 대체 예시: OpenRC, runit, SysVinit

🔹 Windows

  • smss.exe (Session Manager Subsystem)
  • 이후 wininit.exe, csrss.exe, services.exe, explorer.exe 등이 실행

7️⃣ 시스템 초기화 완료 시점

  • 프로세스 스케줄러 가동
  • 사용자 로그인 UI 또는 CLI 환경 표시
  • 백그라운드 서비스 실행
  • 파일시스템 완전 마운트, 네트워크 인터페이스 활성화
  • 이제 사용자 프로그램을 자유롭게 실행할 수 있는 환경이 완성됨

8️⃣ 부팅 순서 정리 (요약 다이어그램)

[ 전원 ON ]
     ↓
[ BIOS / UEFI ]
     ↓
[ 부트로더 (GRUB, bootmgr, etc.) ]
     ↓
[ 커널 로딩 (vmlinuz + initrd) ]
     ↓
[ 커널 초기화 (메모리, 장치, 시스템 콜, 파일시스템) ]
     ↓
[ 루트 파일시스템 마운트 ]
     ↓
[ 사용자 공간 진입 (init / systemd / smss.exe) ]
     ↓
[ 로그인 화면 or 데스크탑 환경 도달 ]


📌 요약

커널 로딩과 시스템 초기화는 운영체제 부팅 과정에서 가장 핵심적인 구간으로,

운영체제가 하드웨어를 직접 제어하고, 사용자 공간 실행 환경을 준비하는 과정이다.

  • 💡 커널은 부트로더에 의해 메모리로 로드되고 압축 해제된 후 실행된다.
  • ⚙️ 이후 CPU/메모리/디바이스 초기화, 시스템 콜 구성, 파일시스템 마운트, 드라이버 로딩 등을 수행한다.
  • 🧱 마지막으로 init, systemd 등의 사용자 프로세스를 실행하면서 운영체제는 본격적인 사용자 환경으로 전환된다.

이 과정은 운영체제가 단순한 코드 집합을 넘어 시스템 전체의 동작 기반을 구축하는 단계로,

성능과 안정성, 확장성을 좌우하는 매우 중요한 부분이다.

반응형