부팅 과정(BIOS→커널)
컴퓨터의 전원을 켜면 운영체제가 곧바로 실행되는 것처럼 보이지만, 실제로는 여러 단계의 프로그램이 차례로 다음 단계를 불러내는 과정을 거칩니다. 전원이 막 들어온 시점에는 메모리에 아무 프로그램도 올라와 있지 않고, 디스크의 파일 시스템도 쓸 수 없습니다. 그래서 메인보드에 미리 저장된 작은 프로그램(펌웨어)이 먼저 실행되어 하드웨어를 점검하고, 운영체제를 불러올 수 있는 최소한의 환경을 만든 뒤 제어권을 넘깁니다. 이 과정을 부팅(booting, bootstrapping)이라고 부릅니다.
부팅은 크게 펌웨어(BIOS 또는 UEFI) → 부트로더(예: GRUB) → 커널 → 첫 사용자 프로세스(init, systemd) 순서로 제어가 넘어갑니다. 이 토픽에서는 전통적인 BIOS(MBR) 방식과 최근의 UEFI 방식이 어떻게 다른지, 그리고 커널이 시작된 뒤 로그인 화면이 나오기까지 어떤 일이 일어나는지를 단계별로 봅니다.
핵심 개념
펌웨어 (BIOS · UEFI)
메인보드에 저장된 프로그램으로 전원이 들어오면 가장 먼저 실행됩니다. 하드웨어를 초기화하고 부팅할 장치를 찾아 부트로더에 제어를 넘깁니다. BIOS는 전통적인 방식이고 UEFI는 이를 대체하는 규격입니다.
핵심 개념
POST
Power-On Self-Test의 약자로, 펌웨어가 부팅 초기에 메모리와 주변 장치가 제대로 동작하는지 점검하는 단계입니다.
핵심 개념
MBR과 ESP
BIOS 방식은 디스크의 첫 섹터(MBR, 512바이트)에 있는 부트 코드를 실행합니다. UEFI 방식은 EFI 시스템 파티션(ESP)에 있는 .efi 파일을 읽어 실행하는 방식이라 파일 시스템을 이해해야 합니다.
핵심 개념
부트로더
GRUB 같은 프로그램으로, 커널 이미지를 디스크에서 메모리로 올리고 커널에 제어를 넘깁니다. 부팅할 운영체제나 커널을 고르는 메뉴도 제공합니다.
핵심 개념
커널과 initramfs
커널은 메모리, 스케줄러, 인터럽트, 드라이버를 초기화합니다. 리눅스는 대개 initramfs라는 임시 루트 파일 시스템으로 먼저 시작해 실제 루트 파일 시스템을 마운트하는 데 필요한 것을 준비합니다.
핵심 개념
PID 1 (init · systemd)
커널이 사용자 공간에서 처음 실행하는 프로세스입니다. 이후 모든 사용자 프로세스의 조상이 되고, 서비스를 시작하는 일을 맡습니다. 현대 리눅스 배포판은 대개 systemd를 씁니다.
부팅의 배경
BIOS(Basic Input/Output System)는 초기 IBM PC 호환기의 펌웨어 방식에서 이어져 온 것입니다. 이 방식은 디스크 첫 섹터의 512바이트에 부트 코드를 두고 파티션 정보를 MBR 안에 담는 구조여서, 부트 코드가 쓸 수 있는 공간이 작고 MBR 파티션은 디스크 크기에도 한계가 있었습니다. UEFI는 BIOS의 제약을 넘어 큰 디스크(GPT), 파일 시스템 기반 부팅, 서명 검증(Secure Boot) 같은 기능을 지원하는 규격입니다.
숫자로 확인하기
자주 하는 오해
면접에서 이렇게 물어요
면접 질문
컴퓨터를 켜면 어떤 일이 일어나나요?
메인보드의 펌웨어(BIOS/UEFI)가 먼저 실행되어 POST로 하드웨어를 점검하고, 부팅 장치에서 부트로더를 찾아 실행합니다. 부트로더가 커널을 메모리에 올려 제어를 넘기면 커널이 초기화한 뒤 PID 1과 서비스를 시작합니다.
면접 질문
BIOS와 UEFI의 차이는 무엇인가요?
BIOS는 디스크 첫 섹터(MBR)의 부트 코드를 실행하고, UEFI는 ESP 파티션의 .efi 부트로더 파일을 실행합니다. UEFI는 큰 디스크(GPT), 보안 부팅, 더 풍부한 사전 부팅 환경을 지원합니다.
면접 질문
부트로더는 왜 필요한가요?
BIOS는 디스크 첫 섹터만 읽을 수 있어 커널을 찾아 올리는 일을 부트로더가 맡습니다. UEFI는 펌웨어가 FAT의 .efi 파일을 직접 실행할 수 있어 부트로더 없이 부팅하는 구성도 가능하지만, 보통 여러 커널이나 OS 선택 메뉴와 커널 옵션 전달 때문에 부트로더를 둡니다.
면접 질문
PID 1이 하는 일은 무엇인가요?
커널이 사용자 공간에서 처음 실행하는 프로세스로, 서비스를 시작하고, 고아가 된 프로세스는 보통 PID 1이 입양해 종료 상태를 거둡니다(subreaper가 지정돼 있으면 그쪽이 먼저). PID 1이 종료되면 커널 패닉이 납니다.
실제 시스템에서는
함께 보면 좋은 토픽
참고 자료
리눅스 셸 — BIOS인지 UEFI인지 확인
# UEFI로 부팅했으면 이 디렉터리가 있다 ls /sys/firmware/efi # UEFI 부트 항목과 순서 보기 (NVRAM) efibootmgr -v # 디스크 · 파티션 · 파일 시스템 확인 (ESP는 보통 vfat) lsblk -f # 부팅 한 번 동안의 커널 메시지 dmesg | head -n 30
리눅스는 UEFI로 부팅하면 /sys/firmware/efi 디렉터리를 만들어 주므로, 이 디렉터리가 있는지로 부팅 방식을 구분할 수 있습니다. efibootmgr는 NVRAM에 저장된 UEFI 부트 항목과 BootOrder를 보여 주는 도구입니다. lsblk -f에서 ESP는 대개 FAT 계열(vfat) 파일 시스템으로 보이고, 이 파티션 안에 .efi 부트로더 파일이 있습니다. dmesg는 커널이 부팅하면서 남긴 메시지를 보여 주어, 커널이 장치를 초기화하는 순서를 확인할 때 씁니다.
GRUB — 부팅 항목 설정 (개념 예시)
menuentry 'My Linux' { search --set=root --fs-uuid 1234-ABCD # 커널이 있는 파티션 찾기 linux /boot/vmlinuz root=/dev/sda2 ro quiet # 커널과 명령줄 initrd /boot/initramfs.img # initramfs }
GRUB 설정의 menuentry 하나가 부팅 메뉴의 한 항목입니다. linux 줄은 메모리에 올릴 커널 이미지와 커널 명령줄(예: 루트 파일 시스템 위치 root=)을 정하고, initrd 줄은 함께 올릴 initramfs를 정합니다. 부트로더는 이 설정대로 커널과 initramfs를 메모리에 적재한 뒤 커널의 시작 위치로 제어를 넘깁니다. 파일 이름, 경로, UUID는 배포판과 설치에 따라 다르며, 위 코드는 구조를 보이는 최소 예시입니다. 실제 설정은 grub.cfg를 직접 고치기보다 배포판의 도구로 생성합니다.
리눅스 셸 — 커널 이후: PID 1과 부팅 시간
# PID 1 프로세스의 이름 (대부분 systemd) cat /proc/1/comm # 부팅에 걸린 시간을 단계별로 나눠 보기 systemd-analyze # 서비스별로 오래 걸린 순서 systemd-analyze blame | head -n 10 # 커널이 받은 명령줄 cat /proc/cmdline
/proc/1/comm은 PID 1 프로세스의 이름을 보여 주며, systemd를 쓰는 배포판에서는 systemd가 출력됩니다. systemd-analyze는 커널, initrd, 사용자 공간(환경에 따라 펌웨어와 로더) 단계별 부팅 시간을 나누어 보여 줍니다. systemd-analyze blame은 서비스를 시작하는 데 오래 걸린 순서대로 나열해, 부팅이 느린 원인을 찾을 때 쓰입니다. /proc/cmdline은 부트로더가 커널에 전달한 명령줄을 보여 주어, 앞의 GRUB 항목의 linux 줄이 어떻게 반영됐는지 확인할 수 있습니다.
Q1
컴퓨터에 전원을 켠 직후 가장 먼저 실행되는 소프트웨어는?
Q2
부트로더(예: GRUB)의 역할은?
Q3
리눅스 커널이 초기화를 마친 뒤 사용자 공간에서 처음 실행하는 프로세스(PID 1)는?