리λ μ€ μμ€ν λΆν νλ‘μΈμ€(리λ μ€ λΆν κ³Όμ )
μμ½
리λ
μ€ μμ€ν
μ΄ μ¬λ°λ‘ μλνλ €λ©΄ μΌλ ¨μ κ³Όμ μ΄ μ¬λ°λ‘ μνλμ΄μΌ νλ€.
PC μν€ν
μ²μ μ§μ μ€μΉλ 리λ
μ€ μμ€ν
μ λ€μ κ³Όμ μ κ±°μ³ μλνλ€.
- μ μμ μΌ¬
- νλμ¨μ΄λ₯Ό μμν¨(BIOS λλ UEFI νμ¨μ΄μμ)
- λΆνΈ λ‘λ μμΉ μ°ΎκΈ° + μμνκΈ°
- λΆνΈ λ‘λμμ μ΄μ체μ κ³ λ₯΄κΈ°
- μ νλ μ΄μ체μ μ λ§λ 컀λκ³Ό μ΄κΈ° RAM λμ€ν¬(initrd) μμνκΈ°
- μ΄κΈ°ν νλ‘μΈμ€(init λλ systemd) μμ
- μ νλ λ°λ 벨 λλ νκΉμ λ°λΌ μλΉμ€ μμ
μ°λ¦¬λ μμ κ°μ μΌλ ¨μ κ³Όμ μ "λΆν (Booting)" μ΄λΌ λΆλ₯Έλ€.
μμ€ν λΆν μ΄λ
μμ€ν λΆν νλ‘μΈμ€μ λͺ©μ μ 컀λμ λ©λͺ¨λ¦¬μ μ¬λ¦¬κ³ μ€ννλ κ²μ΄λ€. λ΄λλ΄λ μ κΈ°νκ³ μ΄λ €μ΄ μμ€ν λΆν ... μ΄ ν¬μ€ν μ 리λ μ€ μμ€ν μ λΆν κ³Όμ μ 4λ¨κ³λ‘ κ°μνν λ΄μ©μ λ²μν΄μ λ΄κ³ μλ€. κΉλ¨Ήμ λ λ§λ€ ꡬκΈλ§νλκ±° νλ€μ΄μ μ¬λ¬κ°μ§ λ νΌλ°μ€λ₯Ό μ°Έκ³ νμ¬ ν¬μ€ν μΌλ‘ λͺ¨μλ€... λμμλ©΄ μκΎΈ κΉλ¨Ήλκ² λ¬Έμ (λλ¬Ό)...
- Q1. λΆν μ , 컀λμ μ΄λμ μμ§?
- Q2. λΆν μ , λ©λͺ¨λ¦¬μλ λκ° μμ§?
- Q3. λΆν ν 첫 λ²μ§Έλ‘ μ€νλλ κ²μ λμ§?
리λ μ€ μμ€ν λΆν νλ‘μΈμ€
리λ μ€ μμ€ν μ λΆν νλ‘μΈμ€λ₯Ό μλ 4λ¨κ³μ μμλ‘ μμΈνκ² μ΄ν΄λ³΄μ
1λ¨κ³: νλμ¨μ΄ λ¨κ³
2λ¨κ³: λΆνΈλ‘λ λ¨κ³
3λ¨κ³: 컀λλ‘λ λ¨κ³
4λ¨κ³: INIT λ¨κ³(SysV / Systemd)
1λ¨κ³: νλμ¨μ΄ λ¨κ³
1-1. Power On
- νμλ²νΌμ ν΅ν΄ μ μμ΄ κ³΅κΈλλ©΄ λ©μΈλ³΄λλ 리μ
벑ν°(Reset Vector)λ₯Ό ν΅ν΄ CPUκ° BIOS μ½λλ₯Ό νΈμΆνλλ‘ νλ€.
- λͺ¨λ Intel CPUλ€μ μ μ κ³΅κΈ μ§ν μ΄κΈ° λΆν
λ real modeλ‘ λμνλλ°, μ΄ μμ μμλ μ 체 λ©λͺ¨λ¦¬μ 1MB μμκΉμ§λ§ μ κ·Όν μ μλ€. μ΄ μμμ μ£Όμλ 0xFFFFFFFFλ‘, 1978λ
λμ Intel CPU 8086λ, μ΅μ CPUλ κ°μ λ°©μμΌλ‘ λμνλ€.
- μ΄κΈ°λΆν
μ§ν CPUκ° μ²μμΌλ‘ νκ² λ μΌμ EIP(Extend Instruction Pointer-CPUκ° ν μΌλ€, μ¦ λ©λͺ¨λ¦¬μ λ±λ‘λμ΄ μλ Codeμ μ£Όμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°)μ μ¨κ²¨μ§ 0xFFFFFFF0 μ£Όμλ‘ μ ννλ κ²μ΄λ€. μ΄ μ£Όμλ νμ¨μ΄(BIOS, EFI)μ μνΈλ¦¬ ν¬μΈνΈλ‘ 맀νλλ μμμΌλ‘ 리μ
벑ν°(Reset Vector)λΌκ³ νλ€. μ΄ μμμ μ μμ μΌ°μ λ νμ κ°μ μ리μ μμ§λ§ real mode(μ΄κΈ° λΆν
λ μ 체 λ©λͺ¨λ¦¬μ 1MB μμκΉμ§λ§ μ κ·Ό κ°λ₯νμ§ λͺ»ν¨)μμλ μ κ·Όν μ μλλ‘ μ¨κ²¨μ Έ μλ€.
- μ¦, λΆν
μ§ν CPUλ 리μ
벑ν°λ₯Ό ν΅ν΄ νμ¨μ΄(BIOS, EFI)λ‘ μ κ·Όνκ³ , μ΄κ³³μμ νμ¨μ΄ μ½λ(BIOS Code)λ₯Ό μ€ννλ€.
- νΉν BIOSλ λ κ±°μ λ°μ΄μ€μ€λΌκ³ λΆλ¦¬λ©°, νλλμ€ν¬μ 첫 μΉν°λ₯Ό μ½μ΄μ 첫 μΉν°μ μ§μλ μ£Όμμ μλ μ½λλ₯Ό μ€ννλλ‘ νλ λΆν
μ μ°¨λ₯Ό λ°λ₯Έλ€.
- νμ¨μ΄λ μμ€ν μ νλμ¨μ΄ ꡬμ±μ μ μ₯νλ€.
1-2. POST, BOOT SECTOR(MBR/VBR/EBR)
- Power-on-self-test (POST): "μ~" CPU, RAM, μ μ΄μ₯μΉ, BIOS μ½λ μ체, μ£Όλ³μ₯μΉ λ±μ λν κ²μ¬ μ§ν
- OSμΈ κΈ°μ‘΄ κ°μν νμ₯, 보μ λ±μ λν κ΅¬μ± νμΈ
- MBR(Master Boot Record)
POST κ³Όμ μ΄ μλ£λλ©΄, BIOSλ λΆν λλ°μ΄μ€(νλλμ€ν¬ λ±)λ₯Ό κ²μνκ³ , ν΄λΉ λλ°μ΄μ€μ νν°μ ν μ΄λΈμ κ²μνλ€. νν°μ λμ§ μμ μ₯μΉμ μλ μΉν°λ VBRμ΄ λλ€. νν°μ ν μ΄λΈμ μ°Ύμ κ²½μ°, ν΄λΉ νν°μ μ 첫 λ²μ§Έ λΈλ‘(μΉν° 0) 512 bytesμ MBR(Master Boot Record-μλμΉν°)μμ λΆνΈλ‘λ μ½λ(Boot Loader Code=OS Loader)λ₯Ό κ²μνλ€. λΆνΈλ‘λ μ½λλ₯Ό μ°ΎμΌλ©΄ λ©λͺ¨λ¦¬μ λ‘λμν¨λ€.
γ ‘νν°μ ν μ΄λΈ(Partition Table): 4κ° Primary partition μ 보(μμ~λ λΈλ‘, ν¬κΈ° λ±) (64bytes)
γ ‘λΆνΈ μκ·Έλμ²(Boot Signature): λΆνΈλ‘λ μ½λμ κ³ μ κ°(0x55AA) (2 bytes)
- VBR(Volume Boot Record)
- κ° Primary partitionμ 첫 λ²μ§Έ λΈλ‘(λΆνΈλ‘λ μ½λμ λΆνΈμκ·Έλμ²λ₯Ό ν¬ν¨ν μ μλ€)
- νν°μ λμ§ μμ μ₯μΉμ μλ μΉν°λ VBRμ΄λ€.
- EBR(Extended Boot Record)
- κ° Logical partition(νλμ νν°μ μ sub-divide ν νν°μ λ¨μ)μ 첫 λ²μ§Έ λΈλ‘(νν°μ ν μ΄λΈ, VBR λΆνΈμκ·Έλμ² ν¬ν¨)
- EBRμ νν°μ ν μ΄λΈμλ λͺ¨λ Logical partitionμ΄ λ§ν¬λμ΄ μλ€.
2λ¨κ³: λΆνΈλ‘λ λ¨κ³
BIOSκ° λμ€ν¬μ MBRμμ λΆνΈ λ‘λλ₯Ό μ°Ύκ³ , μ΄ λΆνΈ λ‘λκ° GRUB μ€μ νμΌμ μ°ΎμΌλ©΄, λΆνΈλ‘λλ μ½ 3~5μ΄ λμμ μκ°μ μΉ΄μ΄νΈλ€μ΄νλ€. μ΄ μκ° λμ(κΈ°λ³Έ μ΄μ체μ κ° μμνκΈ° μ κΉμ§) μ¬μ©μλ μ무 ν€λ λλ¬ λΆνΈ λ‘λμ κ°μ
ν μ μκ² λλ€.
μΌλ°μ μΌλ‘ μ μ κ° λΆνΈ λ©λ΄μμ λΆνΈ λ‘λμ κ°μ ν΄μΌ νλ μ΄μ λ λ€μκ³Ό κ°λ€.
- λ€λ₯Έ λ°λ λ²¨λ‘ μμν΄μΌ ν λ(λ°λ 벨 μ€λ²λΌμ΄λ)
- λ€λ₯Έ 컀λμ μ νν΄μΌ ν λ
(ex. RHELμ μ 컀λμ΄ yumμ ν΅ν΄ μ€μΉλλ©΄ μ΄μ 컀λμ΄ νλμ© μ μ§λλ€. μ 컀λμ΄ μμνμ§ μμ λλ₯Ό λλΉνλ κ²μ΄λ€) - λ€λ₯Έ μ΄μ체μ λ₯Ό μ νν΄μΌ ν λ
(ex. νλλΌμ RHELκ° ν¨κ» μ€μΉλ μ»΄ν¨ν°μμ RHELμ΄ μ¬λ°λ‘ λμνμ§ μμ λ νλλΌλ‘ μλν λ€ RHEL νμΌ μμ€ν μ λ§μ΄νΈνμ¬ λ¬Έμ ν΄κ²°μ μλν μ μλ€) - λΆνΈ μ΅μ
μ λ³κ²½ν΄μΌ ν λ
(ex. 컀λ μ΅μ μΆκ°, νΉμ κ΅¬μ± μμ νλμ¨μ΄ μ§μ λΉνμ±ν-μΌμμ μΌλ‘ USB ν¬νΈ λΉνμ±ν λ±-)
2-1. GRUB(GRand Unified Bootloader): Linux Loader
- GRUBμ GRUB Stage1 > 1.5 > 2 μ μΈ λ¨κ³λ₯Ό κ±°μΉλ λΆνΈλ‘λλ‘ νμ¬λ GRUB2κ° κ°μ₯ 보νΈμ μΌλ‘ λ§μ΄ μ¬μ©λλ€.
- GRUB Stage 1.
MBR λλ VBRμ μ μ₯λμ΄ μλ λΆνΈ μ΄λ―Έμ§κ° λ©λͺ¨λ¦¬μ λ‘λλκ³ μ€νλ¨(core.imgμ 첫 λ²μ©¨ μΉν° λ‘λ)
- GRUB Stage 1.5
MBRκ³Ό 첫λ²μ§Έ νν°μ μ¬μ΄μ μλ λΈλ‘(a.k.a MBR gap)μ μ μ₯λ core.imgκ° λ©λͺ¨λ¦¬μ λ‘λλκ³ μ€νλ¨. core.imgμ configuration νμΌκ³Ό νμΌμμ€ν μ μν λλΌμ΄λ²λ₯Ό λ‘λνλ€. - GRUB Stage 2
/boot/grub νμΌ μμ€ν μ μ§μ μ κ·Όνμ¬ μ»€λ(vmlinuz)μ μμΆμ νμ΄ λ©λͺ¨λ¦¬μ λ‘λνκ³ , 컀λμ΄ νμλ‘ νλ λͺ¨λ λλΌμ΄λ²μ λͺ¨λ, νμΌμμ€ν (ext2, ext3, ext4...)λ±μ΄ λ΄κΈ΄ RAM λμ€ν¬ νμΌ(initrd.img)λ₯Ό λ©λͺ¨λ¦¬μ λ‘λνλ€.
* 컀λμ λ‘λλκΈ° μ΄μ /boot μλ μμΆλ νμΌ ννμΈ vmlinux λ‘ μ‘΄μ¬ > GRUB Stage 2μμ μμΆ νκ³ λ‘λ
* 컀λ μ»΄νμΌ(Kernel Compile)μ ν΅ν΄ GRUBμ ν΅ν΄ λ‘λν 컀λ λ²μ μ κ³ λ₯Ό μ μμ
- GRUB Stage 1.
- GRUBμ νμΌμμ€ν
κ³Ό ν¨κ» λμν μ μμ (ext2, ext3, ext4... λ±λ±)
- UEFI λ²μ λ γ
γ
(grub.efi)
- grub> μ΄λΌλ κ³ μ μ μμ μ Έμ μ¬μ©ν μ μμ(μ΄ μ Έμ ν둬ννΈλ₯Ό ν΅ν΄ λΆν νλΌλ―Έν° λ° λΆν OS λ±μ μ μν μ μμ)
3λ¨κ³: 컀λ λ¨κ³(Loading the Kernel)
λΆν 2λ¨κ³κΉμ§ μ§λλ©° νμ¬ λΆνΈλ‘λλ 컀λνμΌκ³Ό RAMλμ€ν¬ νμΌμ λ©λͺ¨λ¦¬μ λ‘λν΄λμ μνμ΄λ€
γ ‘ vmlinux-2.6.26-2-686
γ ‘ initrd.img-2.6.26-2-686
컀λμ μ»΄ν¨ν°μ κ°μ’ νλμ¨μ΄λ₯Ό μ¬μ©νλ λ° νμν λλΌμ΄λ²μ λͺ¨λμ λ‘λνλ€. μ΄ μμ μμλ μ£Όλ‘ νλμ¨μ΄ μ€ν¨λ₯Ό μ°ΎμμΌ νλ€. κ΄λ ¨λ κΈ°λ₯μ΄ μ¬λ°λ‘ λμνμ§ μλ λ¬Έμ λ₯Ό μ°¨λ¨ν΄μΌ νκΈ° λλ¬Έμ΄λ€. (λ§€μ° λλ¬Όμ§λ§ νΉμ νλμ¨μ΄μ© λλΌμ΄λ²κ° μλ€κ±°λ μλ±ν λλΌμ΄λ²κ° λ‘λλκΈ°λ νλ€)
λ‘λλ 컀λνμΌ μ€ν
- λ‘λλ 컀λνμΌ μ€ν, μ½μμ κ΄λ ¨ μ 보 λμμ€
- PCI bus μ κ² λ° κ°μ§λ μ£Όλ³μ₯μΉ(Peripheral) νμΈ ν /var/log/dmesg νμΌμ κΈ°λ‘
- 컀λμ swapper νλ‘μΈμ€(PID 0)λ₯Ό νΈμΆ, swapper(PID 0)λ 컀λμ΄ μ¬μ©ν κ° μ₯μΉλλΌμ΄λΈλ€μ μ΄κΈ°ν
- Root file system (" / ")μ μ½κΈ° μ μ©μΌλ‘ λ§μ΄νΈγ ‘μ΄ κ³Όμ μμ λ§μ΄νΈ μ€ν¨μ "컀λ ν¨λ" λ©μμ§ μΆλ ₯
- λ¬Έμ μμ΄ μ»€λμ΄ μ€νλκ³ λλ©΄ μΈλ§μ΄νΈ ν Root File Systemμ μ½κΈ°+μ°κΈ° λͺ¨λλ‘ λ¦¬λ§μ΄νΈ
- μ΄ν Init νλ‘μΈμ€(PID 1)λ₯Ό νΈμΆ
컀λμ΄ μμνλ©΄μ μμ±ν λ©μμ§λ€μ΄ 볡μ¬λλ κ³³μ 컀λ λ§ λ²νΌ(Kernel Ring Buffer)λΌκ³ νλ©°, μ΄λ₯Ό λμ€μ μ°Έμ‘°ν μλ μλ€. μ΄κ³³μ 컀λ λ©μμ§κ° μ μ₯λλ©°, λ²νΌκ° λͺ¨λ μ±μμ§λ©΄ μ€λλ μμλΆν° λ©μμ§κ° μμ λλ€. λΆν ν μμ€ν λ‘κ·ΈμΈνμ¬ μ»€λ λ©μμ§λ₯Ό νμΌλ‘ μΊ‘μ²νλ 컀맨λλ₯Ό ν΅ν΄ 컀λ λ©μμ§ κΈ°λ‘μ νμΌ ννλ‘ λ¨κΈΈ μ μλ€.
컀λ λ©μμ§λ κ΅¬μ± μμ μ¦, CPUλ λ©λͺ¨λ¦¬, λ€νΈμν¬ μΉ΄λ, νλ λλΌμ΄λΈ λ±μ΄ κ°μ§λ λ λνλλ€.
dmesg > /tmp/kernel_msg.txt
less /tmp/kernel_msg.txt
# systemdλ systemd μ λμ μ μ₯λλ€
# λ°λΌμ journalctlμ μ€νν΄μΌ λΆνΈ μλΆν° μ§κΈκΉμ§ μμΈ λ©μμ§ νμΈ κ°λ₯
4λ¨κ³ INIT(sysV)
init μμ€ν μ SysV λ° Systemdλ‘ κ΅¬λΆλλ€
SysVinit 1. Configuration. the file /etc/inittab
- /etc/inittabμ μ΄κΈ° μμ€ν
κ΅¬μ± νμΌμ μ½μ΄μ΄(Operation mode, λ°λ 벨, μ½μ λ±)
SysVinit 2. Initialization. the file /etc/init.d/rc
- /etc/init.d/rc.S(debian) λͺ λ Ή μ€ν
- (μμ€ν
μ΄κΈ°ν-μ€μμμ λ‘λ, νμμλ νμΌ μ κ±°, νμΌμμ€ν
μ κ² λ° λ§μ΄νΈ, λ€νΈμν¬ νμ±ν λ±)
SysVinit 3. Services. /etc/init.d λ° /etc/rcN.d λλ ν 리λ€
- μ§μ λ λ°λ 벨μ ν΄λΉνλ μ€ν¬λ¦½νΈ λ° μλΉμ€ μ€ν
- /etc/init.d μ μ€ν κ°λ₯ν μλΉμ€λ€ λͺ¨λ μ€ν(cron, ssh, lpd λ±λ±)
- κ° λ°λ 벨λ³λ‘ μ€νν μλΉμ€λ€μ /etc/rcN.d μμ μ μν μ μμ (S01: λ°λ 벨 1μμ νμ±ν, K01:λ°λ 벨 1μμ λΉνμ±ν)
4λ¨κ³ INIT(systemd: BSD init)
systemdλ λνμ μΌλ‘ Ubuntu Linuxμ Init Systemμ΄λ€.
Sysvinitμ λΉν΄ μμμλκ° λΉ λ₯΄κ³ , 리λ μ€ μμ€ν μ 보쑰νλ ννμ νλ‘μΈμ€λ‘ μμ£Όνλ€
Target μ λμ μ¬μ©νμ¬ λΆν , μλΉμ€κ΄λ¦¬, λκΈ°ν νλ‘μΈμ€λ₯Ό μ§ννλ€
System Unit : Any resource that system can operate/manage (ex. .service, .target, .device, .mount, .swap...)
Systemd Boot process
- systemdμ© GRUB2 ꡬμ±(GRUB_CMDLINE_LINUX="init=/lib/systemd/systemd" (μ΄ν update-grub μ€ν)
- 첫 λ²μ§Έ .target μ λ μ€ν (λ³΄ν΅ graphical.targetμ μ¬λ³Όλ¦ λ§ν¬μ)
#첫 λ²μ§Έ .target μ λ
[Unit]
Description=yon boot target
Requires=multi-user.target
Wants=yonbar.service
After=multi-user.target rescue.service rescue.target
- Requires = hard dependencies
- Wants = soft dependencies (μμμ΄ νμνμ§ μμ)
- After = μ¬κΈ°μ μ μλ μλΉμ€λ€ μ€ν μ΄νμ λΆν ν κ²
reference
1) https://itragdoll.tistory.com/3
2) μ½κ² λ°°μ°λ μ΄μ체μ (μ‘°μ±ν μ§μ)
3) Wasabi Session
4) https://ocw.unican.es/
5) https://manybutfinite.com/post/how-computers-boot-up/