μ΄ ν¬μ€ν μ κ³ κ±΄ κ΅μλμ Kernel of Linux κ°μλ₯Ό λ³΄κ³ μ 리ν κΈμ λλ€.
ν΄λΉ κ°μλ olcμ 곡μ λΌ μμΌλ©° https://github.com/Bookstore3/Linux-Kernel-Lecture-Note κ°μ λ ΈνΈλ₯Ό ν΅ν΄ λ΄μ©μ 곡λΆν΄λ μ’μ΅λλ€.
곡λΆνλ©΄μ μ 리ν κΈμ΄λ―λ‘ μ’μ μ‘°μΈλ ν¨κ» λ¨κ²¨μ£Όμλ©΄ λ§€μ° κ°μ¬νκ² μ΅λλ€ :)
OSλ νλμ¨μ΄ μμ(CPU, Memory, Disk..)λ€μ κ΄λ¦¬νκ³ μ¬λ¬ νλ‘κ·Έλ¨λ€μ΄ λμμ§ μ μλλ‘ μ§μνλ μν μ λ΄λΉνλ€.
OSμ κ΅¬μ± μμ
- 컀λμ OSμμ νμ λ©λͺ¨λ¦¬μ μμ£Όν΄μλ μΌμ’ μ C νλ‘κ·Έλ¨μ΄λ€.
- μ νΈλ¦¬ν°λ 컀λκ³Όλ λ°λλλ μλ―Έλ₯Ό κ°μ§λλ° OSμ λμ€ν¬μ μμ£Όν΄μλ κ²μΌλ‘ μ μ κ° μμ²ν΄μΌ(=νμν λλ§) μ¬λΌμ€κ² λλ€. μ¦ μ»€λ§¨λλΌκ³ λΆλ₯Έλ€.
- μμ μ νΈλ¦¬ν°μ μΌμ’ μΌλ‘ νλ‘κ·Έλ¨μ΄ μ¬λΌμ€λ κ²μ κ΅ν΅ μ 리νλ μν μ λ΄λΉνλ€. μμ΄ κ΅ν΅ μ 리νλ€λ μλ―Έλ μ¬μ©μκ° λͺ λ Ήμ΄λ₯Ό μ λ ₯νλ©΄ μ΄λ₯Ό OSμ μ λ¬νλλ° μΈμ λ©λͺ¨λ¦¬μ μ¬λ¦¬κ³ λ΄λ¦¬κ³ μ΄λ¬ν λͺ¨λ μΌλ€μ κ΄λ¦¬νλ€λ μλ―Έμμμ΄λ€.
- νμΌμ λ°μ΄νΈλ€μ λ°°μ΄μ λ»νλ€. I/O λλ°μ΄μ€λ νμΌμ΄λ€.
컀λ, μ, μ νΈλ¦¬ν°μ μκ΄κ΄κ³
- λΆν μ νλ©΄ μ μΌ μ²μ 컀λμ΄ μ¬λΌμ¨λ€.
- μ¬μ©μκ° ν°λ―Έλμ μ μνμ¬ μμ΄ λ©μΈ λ©λͺ¨λ¦¬μ μ¬λΌμ€κ³ μ¬μ©μμ 컀맨λλ₯Ό λκΈ°νλ€.
- μ¬μ©μκ° μ»€λ§¨λλ₯Ό μ λ ₯νλ©΄ μμ΄ μ»€λ§¨λμ 맀νλ μ νΈλ¦¬ν°λ₯Ό λμ€ν¬μμ κ°μ Έμμ μ€ννλ€.
λΆν κ³Όμ μ λν΄μ μμΈν μ΄ν΄λ³΄μλ©΄
- μ μ 곡κΈ
- λ©μΈλ³΄λμμ Reset 벑ν°λ₯Ό ν΅ν΄ CPUκ° BIOSλ₯Ό νΈμΆνλ€.
- μ μμ΄ κ³΅κΈλλ©΄μ λ©μΈλ³΄λμ μλ λ€μν κ΅¬μ± μμλ€μ΄ μ΄κΈ°νλλλ° μ΄λ CPUλ μ΄κΈ°νλλ©΄μ '리μ 벑ν°'λΌκ³ λΆλ¦¬λ νΉμ ν μ§μ μΌλ‘ μ΄λν΄ μ§μ λ λͺ λ Ήμ΄ μ€νμ μμνλ€.
- CPUλ λΆν μ§ν Real ModeλΌλ λ§€μ° μ νλ νκ²½μμ μλνλλ°, μ΄ λͺ¨λμμλ λ©λͺ¨λ¦¬μ 1MBκΉμ§λ§ μ κ·Όν μ μλ€. μ΄λ 1MB μμμ λ§μ§λ§ μ£Όμλ 0xFFFFFFFF μ΄λ€.
- μ μμ΄ λ€μ΄μ¨ μ§ν CPUλ EIP(Extended Instruction Pointer)λΌκ³ λΆλ¦¬λ λ μ§μ€ν°λ₯Ό ν΅ν΄ 0xFFFFFFF0μ΄λΌλ μ£Όμλ‘ μ ννλλ° λ°λ‘ μ΄ μ£Όμκ° λ¦¬μ 벑ν°μ΄λ€.
- BIOS
- BIOS λλ UEFIλ νλ λλΌμ΄λΈ, SSD, USB λλΌμ΄λΈ λ±μμ λΆν κ°λ₯ν μ₯μΉλ₯Ό μ ννλ€. μΌλ°μ μΌλ‘ νλ λλΌμ΄λΈ λλ SSDμ μλ λΆνΈ λ‘λλ‘ μ΄λνλ€.
- λΆνΈ λ‘λ
- λΆνΈλ‘λλ μ΄μ 체μ λ₯Ό μμνκΈ° μ μ μ€νλλ μμ νλ‘κ·Έλ¨μΌλ‘, νλμ¨μ΄μ μ΄μ 체μ μ¬μ΄μμ λ€λ¦¬ μν μ μννλ€.
- λΆνΈλ‘λμ κΈ°λ³Έ κΈ°λ₯: μ»΄ν¨ν°κ° λΆν λλ©΄, λΆνΈλ‘λλ νλ λλΌμ΄λΈμμ μ΄μ 체μ λ₯Ό μ°Ύκ³ , μ΄λ₯Ό λ©λͺ¨λ¦¬λ‘ λΆλ¬μ μ€νν μ€λΉλ₯Ό νλ©° GRUBμ 리λ μ€ μμ€ν μμ κ°μ₯ λ리 μ¬μ©λλ λΆνΈλ‘λμ΄λ€.
- GRUBμ μ£Όμ μμ : GRUBμ 컀λμ λ©λͺ¨λ¦¬λ‘ λ‘λνκ³ , κ·Έ ν μμ€ν μ μ΄κΆμ 컀λμ λ겨μ€λ€.
- GRUB Stage 1
- μμΉ: GRUB Stage 1μ νλ λμ€ν¬μ MBR(λ§μ€ν° λΆνΈ λ μ½λ) λλ VBR(λ³Όλ₯¨ λΆνΈ λ μ½λ)μ μ μ₯λμ΄μλ€.
- μν : μ»΄ν¨ν°κ° μΌμ§λ©΄ BIOSλ λ¨Όμ MBRμ μ½κ³ μ¬κΈ°μμ GRUB Stage 1μ μ€ννλ€. Stage 1μ λ§€μ° μκ³ λ¨μν μ½λλ‘ λ€μ λ¨κ³μΈ Stage 1.5λ‘ λμ΄κ°λ μν μ μννλ€.
- GRUB Stage 1.5
- μμΉ: Stage 1.5λ MBRκ³Ό νλ λμ€ν¬μ 첫 λ²μ§Έ νν°μ μ¬μ΄μ μλ λͺ κ°μ λΈλ‘μ μ μ₯λμ΄ μλ€.
- μν : Stage 1.5λ GRUBμ Stage 2λ₯Ό λ‘λνκΈ° μν΄ νμν νμΌ μμ€ν λλΌμ΄λ²μ μ€μ νμΌμ μ€λΉνλ€. μ΄ λ¨κ³μμ core.imgλΌλ νμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λλλλ° μ΄ νμΌμ λ€μν νμΌ μμ€ν μ μ½μ μ μλ λλΌμ΄λ²μ μ€μ μ 보λ₯Ό ν¬ν¨νκ³ μλ€.
- GRUP Stage 2
- μμΉ: Stage 2λ /boot/grub λλ ν 리μ μ μ₯λμ΄ μλ νμΌμ μ½μ΄λ€μΈλ€.
- μν : Stage 2λ 리λ μ€ μ»€λ(μ: vmlinuz)μ μμΆμ νμ΄μ λ©λͺ¨λ¦¬μ λ‘λνκ³ μ΄κΈ° λ¨λμ€ν¬(initrd λλ initramfs)λ₯Ό λ‘λνλ€. μ΄ λ¨λμ€ν¬μλ 컀λμ΄ λΆν νλ λμ νμν λλΌμ΄λ²μ λͺ¨λμ΄ λ€μ΄μλλ° μ»€λμ΄ λ©λͺ¨λ¦¬μ μμ ν λ‘λλλ©΄, GRUBμ μ μ΄κΆμ 컀λλ‘ λκΈ΄λ€. μ΄ν 컀λμ΄ μμ€ν μ λλ¨Έμ§ λΆν κ³Όμ μ μ²λ¦¬νκ² λλ€.
- 컀λ λ‘λ
- 컀λκ³Ό RAM λμ€ν¬ λ‘λ
- λΆνΈλ‘λκ° μ»€λ νμΌ(vmlinux-2.6.26-2-686)κ³Ό μ΄κΈ° RAM λμ€ν¬(initrd.img-2.6.26-2-686)λ₯Ό λ©λͺ¨λ¦¬μ λ‘λνλ€. RAM λμ€ν¬λ 컀λμ΄ λΆν μ΄κΈ° λ¨κ³μμ νμν λλΌμ΄λ²μ νμΌμμ€ν μ ν¬ν¨ν μμ νμΌ μμ€ν μ΄λ€.
- 컀λ μ€ν λ° νλμ¨μ΄ μ κ²
- 컀λμ΄ λ©λͺ¨λ¦¬μμ μ€νλλ©΄ μ°μ μ μΌλ‘ νλμ¨μ΄λ₯Ό μ κ²νλ©΄μ μμ€ν μ μ°κ²°λ λͺ¨λ μ₯μΉκ° μ¬λ°λ₯΄κ² μλνλμ§ νμΈνλ€. νλμ¨μ΄ μ κ²μ κ²°κ³Όλ /var/log/dmesg νμΌμ κΈ°λ‘λλ©° μ΄ νμΌμλ λΆν μ€μ λ°μν λͺ¨λ μ΄λ²€νΈμ λ©μμ§κ° μ μ₯λλ€.
- λ£¨νΈ νμΌ μμ€ν
λ§μ΄νΈ
- 컀λμ λ£¨νΈ νμΌ μμ€ν (/)μ μ½κΈ° μ μ©μΌλ‘ λ§μ΄νΈνλ€. μ΄ λ¨κ³κ° μ€ν¨νλ©΄ μμ€ν μ΄ κ³μ λΆν λμ§ μκ³ "컀λ ν¨λ"μ΄λΌλ ν¬λ¦¬ν°μ»¬ μλ¬ λ©μμ§λ₯Ό μΆλ ₯νλ€. 컀λ ν¨λμ μμ€ν μ΄ λ μ΄μ μ§νν μ μλ μ¬κ°ν λ¬Έμ μ΄λ€.
- swapper νλ‘μΈμ€ (PID 0λ²)
- 컀λμ λΆν κ³Όμ μμ swapperλΌλ 첫 λ²μ§Έ νλ‘μΈμ€(PID 0λ²)λ₯Ό μμνλ€. swapperλ μμ€ν μ μ₯μΉ λλΌμ΄λ²λ€μ μ΄κΈ°ννκ³ , μμ€ν μ μ λ°μ μΈ μμ κ΄λ¦¬λ₯Ό λ΄λΉνλ κΈ°λ³Έμ μΈ μμ μ μννλ€. μ΄ κ³Όμ μ΄ λλλ©΄ swapperλ init νλ‘μΈμ€(PID 1λ²)λ₯Ό μμνλ€.
- 컀λκ³Ό RAM λμ€ν¬ λ‘λ
- Init
- /sbin/initνλ‘μΈμ€κ° μ€νλλ©΄μ /etc/inittabνμΌμ μ½μ΄ μμμ λ°λΌ μμ€ν μ μ΄κΈ°ννλ€.
리λ μ€λ λ©ν° μ μ μμ€ν μ΄λ―λ‘ λ³΄μμ λμ± μ κ²½μ¨μΌ νλ©° μμμ μ΅μν μ€μ¬μ μ¨μΌ ν¨μ¨μ μΌλ‘ μΈ μ μλ€.
λ§μ½ λ€λ₯Έ μ μ κ° λ΄κ° μ¬μ©νκ³ μλ νλ‘μΈμ€λ₯Ό read/write νλ κ²μ λλΉνκΈ° μν΄ μ¬μ μλ°©μ ν΄μΌ νλ€.
μ΄λ¬ν μν©μ μλ°©νκΈ° μν΄ μ¬μ©μκ° μ»€λμκ² I/Oλ₯Ό ν μ μλλ‘ ν¨μλ₯Ό μ¬μ©νμ¬ λΆνμ νλλ° μ΄ λ°©μμ μμ€ν μ½μ΄λΌκ³ λΆλ₯΄λ κ²μ΄λ€.
μ μ λͺ¨λμμ I/Oμ κ°μ μ€μ μμ μ μλνλ €κ³ νλ©΄ CPUλ₯Ό λΊκ²¨ λ²λ¦°λ€. κ·Έλ¬λ©΄ μ°λ¦¬λ μ΄λ»κ² μ½λμμ printfλ₯Ό ν΅ν΄ μΆλ ₯κ°μ λμΆν μ μλ κ²μΈκ°?
μ€μ λ‘ μ°λ¦¬κ° μ½λμμ μννλ λ΄μ©μ μμ€ μ½λ μ체μμλ§ μνλλ κ²μ΄κ³ λ°μ΄λ리 νμΌμμλ μ§μ μ μΈ I/O λͺ λ Ήμ΄κ° μλ€.
- printfλ₯Ό νΈμΆνλ©΄, μ¬μ©μ λͺ¨λμμ μ€ν μ€μΈ νλ‘κ·Έλ¨μ CPUμ I/O μμ μ μμ²νλ€.
- μ΄ μμ²μ μ²λ¦¬νκΈ° μν΄, CPUλ λͺ¨λ λΉνΈλ₯Ό λ³κ²½νκ³ μ¬μ©μ νλ‘κ·Έλ¨μ μ μ΄κΆμ΄ 컀λμκ² λμ΄κ°λ€. (Trap μΈν°λ½νΈ λ°μ!)
- 컀λμ write() μμ€ν μ½μ μ²λ¦¬νκ³ , νμ€ μΆλ ₯(μ: ν°λ―Έλ)μ λ°μ΄ν°λ₯Ό μΆλ ₯νλ€.
- μμ μ΄ λλλ©΄ CPUλ λ€μ μ¬μ©μ λͺ¨λλ‘ μ νλλ€.
μ¦ νλ‘κ·Έλ¨μ μ μ λͺ¨λμ 컀λ λͺ¨λμ μ νμ λ°λ³΅μ΄λΌκ³ λ³Ό μ μλ€!
ν¨μκ° νΈμΆλκ³ λ¦¬ν΄λκ³ ..μ κ³Όμ μμ μ§μ λ³μλ€μ 미리 λ©λͺ¨λ¦¬μ λ΄μλμ§ μκ³ μμλ‘ λ©λͺ¨λ¦¬μ λκ³ μμ νλ κ΅¬μ‘°λ‘ μ μ₯νκ² λλλ° μ΄ λ μ¬μ©νλ λ°μ΄ν° κ΅¬μ‘°κ° μ€νμ΄λ€.
μ€νμλ μ§μλ³μμ λμκ° μ£Όμλ ν¨κ» Push λλλ° νλ‘κ·Έλ¨μ μ μ λͺ¨λμ 컀λ λͺ¨λλ₯Ό μ ννλ©° λ°λ³΅λλ―λ‘ μ μ μ€ν, 컀λ μ€νμ΄ κ°λ³μ μΌλ‘ μ‘΄μ¬νλ€.
리λ μ€μ Manμ μ«μμ μλ―Έ
- 1 컀맨λ
- 2 μμ€ν μ½
- 3 λΌμ΄λΈλ¬λ¦¬ ν¨μ
printf("hello world")
λ©ν°μ μ μμ€ν μ 보νΈλΌμκΈ° λλ¬Έμ μ μ λ¨μμ μΆλ ₯μ΄λΌλ νμλ₯Ό μ§μ μ μΌλ‘ ν μ μλ€.
λͺ¨λ IO λΌμ΄λΈλ¬λ¦¬ ν¨μλ€μ μμ€ν μ½μ ν΄μΌνλλ° μ΄λ νμν κΈ°λ₯μ μμ€ν μ½μ΄λ€.
μ¦ System Callμ΄λ Userκ° μ»€λμ functionμ νΈμΆνλ νλμ μλ―Ένλ€.
컀λ μμ λͺ¨λ ν¨μλ μ΄λ¦μ΄ sys
μ μ λͺ¨λ <-> 컀λ λͺ¨λκ°μ μνΈ μμ©μ΄ νλ°νλ° λ―Έλ¦¬ λ©λͺ¨λ¦¬μ μ μ₯νλ ꡬ쑰λ μλΉν λΉν¨μ¨μ μ΄λ€.
λ°λΌμ λ©λͺ¨λ¦¬μ λ£κ³ κ²½μ°μ λ°λΌ μμ νκΈ° νΈν Stack ꡬ쑰λ₯Ό νμ©νλ κ²μ΄λ€.
μ°Έκ³
https://velog.io/@begoodlife/Linux-%EB%B6%80%ED%8C%85-%EA%B3%BC%EC%A0%95
https://blog.naver.com/wndrlf2003/70180014401
'Infra > Linux' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
LVM νμ₯ / κ°μ (2) (3) | 2024.03.14 |
---|---|
LVM (Logical Volume Manager) κ°λ λ° μμ± λ°©λ² (1) (0) | 2024.03.13 |
RHEL κ°λ°μ μλΈμ€ν¬λ¦½μ iso 무λ£λ‘ μ€μΉνκΈ° (0) | 2024.03.04 |
μ€λλ μ»΄ν¨ν°μ 리λ μ€ μ€μΉνκΈ°_μΌμ±λ ΈνΈλΆ USB λΆν (4) | 2020.09.17 |