Basic Input/Output System
메인 보드의 ROM 에 내장된 프로그램으로, OS 중 기본적인 S/W 이자 컴퓨터의 I/O 를 처리하는 펌웨어
컴퓨터 부팅을 하기 위해 사용하는 인터페이스
부팅 모드
United Extensible Firmware Interface
최신 PC용 표준 펌웨어 인터페이스
기존의 BIOS 및 EFI 를 대체하는 새로운 유틸리티
*Legacy BIOS -> MBR | UEFI -> GPT
Kernel: OS 안에 위치하면서 H/W 주요 기능 컨트롤
- 메모리 관리
- 프로세스 관리
- 장치 드라이버
- 시스템 호출/보안
BIOS + MBR
MBR 파티션의 첫번째 섹터 512byte 읽어 부트 로더를 찾아서 메모리에 적재 후 제어권 전달, 부트 로더는 GRUB 관련 파일 메모리에 로드
UEFI + GPT
/dev/sda1 (/boot) 에서 부트 로더, GRUB 로드
*BIOS 는 물리적 위치를 찾아 부팅하고, UEFI는 매핑된 장치 이름 또는 UUID 로 부트 로더를 찾아 부팅함
POST 로 하드웨어 점검
MBR 파티션의 첫 번째 섹터에서 부트 로더 찾고 메모리 적재 후 부트 로더에게 제어권 전달
/boot/grub2/grub.cfg
/etc/default/grub
/etc/grub.d
에 존재하는 파일들을 메모리에 적재 후 부팅 가능한 커널 목록 화면에 출력
위 화면에서 e 선택 시 /boot/grub2/grub.cfg
파일의 내용 출력되고 설정을 변경하여 커널 실행 가능
커널 선택 후 /boot 디렉터리의 vmlinuz로 시작하는 커널 파일 메모리에 적재 후 제어권을 커널에게 전달
커널이 메모리에 적재되면 /boot 에 존재하는 initramfs 압축파일 해제 -> 램 디스크 초기화, 루트 파일 시스템 /sysroot 에 임시로 마운트
initramfs 파일은 /sysroot에 압축을 해제하고 필요한 파일들을 메모리에 적재 -> init 프로세스 실행 후 제어권 init 프로세스에게 전달
init 프로세스에 PID 1번 할당되고 필요한 모든 프로세스 실행
/etc/initab 파일에 등록된 정보로 런 레벨이 결정, /etc/rc.d/rc.sysinit 파일을 실행하여 스왑이나 네트워크 설정 초기화
/etc/initab 파일에 지정된 런 레벨 실행 후 사용자에게 로그인 화면 출력
init 프로세스와 1 ~ 6 까지 동일
initramfs 파일은 /sysroot에 압축을 해제하고 필요한 파일들을 메모리에 적재 -> systemd 실행하여 메모리에 적재 후 제어권 systemd 에게 전달
default.target
의 유닛 파일은 multi-user.target
or graphical.target
으로 연결된 심볼릭 링크 파일
어떤 target 유닛으로 부팅할지 정함
*After 조건에 의해 graphical.target 활성화 전에 multi-user.target이 먼저 활성화 되어야함
After 조건에 의해 local-fs.target
-> sysinit.target
-> basic.target
-> multi-user.target
-> grapical.target
순으로 활성화되어야 함
local-fs.target
/etc/fstab 에 등록된 마운트 정보로 파일시스템 마운트
sysinit.target
마운트, 스왑, 커널 추가 옵션 실행하는 서비스 시작
basic.target
firewalld, microcode, SELinux, 커널 메시지와 관련된 서비스를 시작하거나 모듈 로드
multi-user.target
커맨드 라인을 제공하는 다중 사용자 모드 (= runlevel 3)
grapical.target
GUI 를 지원하는 다중 사용자 모드 (= runlevel 5)
정리하고 보니, 부팅 과정은 제어권을 넘겨주는 것 이라고 봐도 될 것 같다!