컴퓨터에서 부트스트래핑(Bootstrapping) 또는 부팅(Booting)은 컴퓨터에 전원을 인가했을 때 연산을 시작하며 주기억장치에 프로그램을 적재해 시스템을 절차에 따라 준비하는 과정을 뜻한다. 펌웨어 단계에서 수행되며, 해당 역할을 하는 펌웨어를 부트로더(Boot Loader)라고 한다.
장화를 신기 위해 장화 뒤꿈치에 다는 루프형 끈을 잡아당기는 행위에서 이름을 따왔다.
부트로더 종류 편집
1차 단계 부트 로더(First Stage Boot Loader) 편집
- BIOS: 고전 PC의 1차 부트 로더
- UEFI: 현재 PC의 1차 부트 로더
- coreboot: BIOS 및 UEFI를 대체하기 위한 오픈소스 1차 부트 로더 프로젝트. GNU Public License로 배포된다.
- Das Uboot: ARM이나 MIPS 같은 임베디드 RISC CPU 기반 시스템에서는 주로 이것을 많이 쓴다. GNU Public License로 배포되며 직접 컴파일하여 제작한다.
- eboot: Windows CE의 1차 부트로더
- Blob: 현재는 마벨 테크놀로지에게 넘어간 인텔 XScale 프로세서 전용 부트로더
2차 단계 부트 로더(Second Stage Boot Loader) 편집
- BOOTMGR 및 NTLDR: 마이크로소프트 윈도우의 부트 로더
- GNU GRUB: 현재 리눅스와 기타 유닉스 시스템 대다수가 사용하는 부트 로더
- Syslinux: 리눅스를 위해 제작한 GRUB의 대안
- iBoot: 현대 Apple의 OS의 부트로더
네트워크 부트 로더 편집
가끔 전원 인가시 유무선 통신으로 OS 프로그램을 받아 부팅하는 방법이 있다. 주로 학교나 관공서 PC가 이런 형태를 취하는 경우가 많고 PC방에서도 쓰이는 사례가 있다.
NetBoot, EBoot 등이 여기 들어간다.
부트스트래핑 예시: 리눅스 편집
- 전원이 인가되면(Power On) 1단계 부트로더가 작동한다. x86 계열 시스템에서는 BIOS/UEFI가, ARM 계열은 uboot 등이 작동한다.
- 1단계 부트 로더의 작업이 끝나면 GRUB이 작동하여 3개 Stage에 따라 움직인다.
- 먼저 BIOS 기준으로 MBR/VBR에 있는 core.img 파일의 첫 섹터 분량 코드가 실행된다. 이걸로는 보통 코드를 다 로드하지 못하므로 MBR 내 코드는 추가로 코드를 읽어 로딩을 한다.
- UEFI의 경우 GRUB 전체가 직접 실행되기에 추가 로딩은 불필요하다.
- 부팅 파티션 내 코드를 실행하기 위해 core.img 코드 내에 있는 파일 시스템 기능과 디스크 드라이버를 불러온다.
- /boot/grub 내 vmlinuz(압축된 커널 파일)을 주기억장치(이하 메모리)에 압축을 풀어 로드하고, initrd.img에 있는 모든 커널 모듈/디바이스 드라이버 등을 메모리에 가져온다.
- 먼저 BIOS 기준으로 MBR/VBR에 있는 core.img 파일의 첫 섹터 분량 코드가 실행된다. 이걸로는 보통 코드를 다 로드하지 못하므로 MBR 내 코드는 추가로 코드를 읽어 로딩을 한다.
- 그 다음 커널이 /var/log/dmesg(dmesg로 읽는 로그 파일)에 주변 장치 목록을 기록한 후 swapper 프로세스(PID 0)를 호출한다. swapper 프로세스는 장치 초기화를 한다.
- 그 이후 루트 파일 시스템을 마운트하고 init 프로세스(PID 1)을 실행한다.
- init 프로세스는 SysV와 Systemd[1] 두 종류가 있다(전자는 정통 유닉스 방식, 후자는 다양한 리눅스에서 사용).
- SysV 타입은 /etc 아래에 있는 수많은 설정 파일을 읽으며 각종 OS 기능을 준비한다.
- Systemd 타입은 /lib/systemd/systemd에 정의된 섹션대로 초기화를 수행한다.
- ↑ systemctl로 관리