OS
πΉ OS ꡬ쑰 μ΄ν΄
1. Linux 컀λ vs μ¬μ©μ κ³΅κ° (User Space vs Kernel Space)
π μν€ν μ²
+--------------------------------------------------+
|                 μ¬μ©μ 곡κ°(User Space)          |
|  - μμ© νλ‘κ·Έλ¨ (bash, python, nginx λ±)        |
|  - λΌμ΄λΈλ¬λ¦¬(glibc λ±)                          |
+--------------------------------------------------+
|                 컀λ 곡κ°(Kernel Space)          |
|  - μμ€ν
 μ½ μΈν°νμ΄μ€(syscall)                 |
|  - νλ‘μΈμ€ κ΄λ¦¬(Scheduler)                      |
|  - λ©λͺ¨λ¦¬ κ΄λ¦¬(Virtual Memory, Page Cache)       |
|  - νμΌ μμ€ν
(VFS, ext4, xfs, btrfs)            |
|  - λ€νΈμν¬ μ€ν(TCP/IP)                         |
|  - λλ°μ΄μ€ λλΌμ΄λ² (νλμ¨μ΄ μ μ΄)             |
+--------------------------------------------------+
|               νλμ¨μ΄(Hardware)                 |
|  CPU, Memory, Disk, NIC                          |
+--------------------------------------------------+
μ¬μ©μ κ³΅κ° (User Space)
+---------------------------+
| modprobe / insmod / lsmod |
+---------------------------+
            |
            v
컀λ κ³΅κ° (Kernel Space)
+---------------------------+
| 컀λ λͺ¨λ (Module)       |
| - λ€νΈμν¬ λλΌμ΄λ²       |
| - νμΌ μμ€ν
 λλΌμ΄λ²    |
| - κ°μ μ₯μΉ λλΌμ΄λ²      |
+---------------------------+
            |
            v
νλμ¨μ΄ (Hardware)
+---------------------------+
| CPU, Disk, NIC, Memory   |
+---------------------------+
# λμ μμ:
# 1. modprobe e1000e (Intel NIC λͺ¨λ λ‘λ)
# 2. 컀λμ΄ NIC μ΄κΈ°ν β μμ€ν
μ λ€νΈμν¬ μ¬μ© κ°λ₯
# 3. lsmodλ‘ λͺ¨λ μν νμΈ
# 4. dmesgλ‘ μ΄κΈ°ν λ‘κ·Έ νμΈπ μ¬μ©μ 곡κ°μ νλ‘κ·Έλ¨μ μ§μ  νλμ¨μ΄μ μ κ·Όνμ§ λͺ»νκ³ , μμ€ν  μ½(System Call) μ ν΅ν΄ 컀λμ μμ².
μ¬μ©μ 곡κ°(User Space)
- 
μ¬μ©μκ° μ§μ  μ€ννλ νλ‘κ·Έλ¨(bash, python, nginx λ±)μ΄ λμκ°λ μμ 
- 
μ νλ κΆνμ κ°μ§ 곡κ°μΌλ‘, μ€ν νκ²½λ§ μ 곡λ λΏ, CPU λ μ§μ€ν°λ λ©λͺ¨λ¦¬, λμ€ν¬ κ°μ νλμ¨μ΄λ₯Ό μ§μ  μ μ΄λΆκ°λ₯ - μ: cat /etc/passwd λ₯Ό μ€ννλ©΄, cat λͺ λ Ήμ΄ μ체λ μ¬μ©μ 곡κ°μμ λμ
 
컀λ 곡κ°(Kernel Space)
- 
OSμ ν΅μ¬(컀λ)μ΄ μ€νλλ νΉκΆ λͺ¨λ(Privileged mode) 
- 
μ§μ  νλμ¨μ΄ μ μ΄κ° κ°λ₯ (λμ€ν¬ μ½κΈ°, λ©λͺ¨λ¦¬ κ΄λ¦¬, λ€νΈμν¬ μ μ‘ λ±) - μ: cat λͺ λ Ήμ΄κ° νμΌμ μ½μΌλ €λ©΄ open() β read() κ°μ μμ€ν  μ½μ νΈμΆν΄μ 컀λμ “μ΄ νμΌ μ’ μ΄μ΄μ€, μ½μ΄μ€” μμ²
 
μμ€ν  μ½(System Call)
- μ¬μ©μ 곡κ°μμ νλμ¨μ΄ μμμ μ κ·ΌνκΈ° μν μ μΌν 창ꡬ(κ²μ΄νΈ)
- μλ₯Ό λ€μ΄,
 
fd = open("/etc/passwd", O_RDONLY);
read(fd, buffer, 100);β open()κ³Ό read()λ μμ€ν  μ½μ΄λ©°, μ€μ  νλμ¨μ΄ μ κ·Όμ 컀λμ΄ μ²λ¦¬ν©λλ€.
νλμ¨μ΄(Hardware)
- 
CPU, λ©λͺ¨λ¦¬, λμ€ν¬, λ€νΈμν¬ μΉ΄λ λ± μ€μ  물리 μ₯μΉλ€. 
- 
컀λμ΄ λλΌμ΄λ²λ₯Ό ν΅ν΄ μ μ΄νλ©°, μ¬μ©μ 곡κ°μμλ μ§μ  μ κ·Ό λΆκ°. 
2. λΆνΈλ‘λ (GRUB2 κΈ°λ³Έ ꡬ쑰, 컀λ νλΌλ―Έν°)
π λΆν κ³Όμ 
+-------------------------+
|        BIOS/UEFI        |
| - POST, νλμ¨μ΄ μ΄κΈ°ν  |
| - λΆνΈ μ₯μΉ μ ν        |
+-----------+-------------+
            |
            v
+-------------------------+
|         GRUB2           |
| - λΆνΈ λ©λ΄ νμ         |
| - 컀λ μ ν λ° μ»€λ νλΌλ―Έν° μ λ¬ |
+-----------+-------------+
            |
            v
+-------------------------+
|       Linux Kernel      |
| - νλμ¨μ΄ μ΄κΈ°ν        |
| - initramfs λ§μ΄νΈ      |
| - κΈ°λ³Έ λλ°μ΄μ€ λλΌμ΄λ² λ‘λ |
+-----------+-------------+
            |
            v
+-------------------------+
|        systemd          |
| - μλΉμ€ κ΄λ¦¬ (Unit)    |
| - λ°λ λ²¨/Target μ§μ
     |
| - Multi-user, GUI λ±    |
+-------------------------+- BIOS/UEFI β λΆνΈλ‘λ(GRUB2) λ‘ μ μ΄ μ λ¬
- GRUB2: OS μ ν λ©λ΄ μ κ³΅ β 컀λ μ΄λ―Έμ§(vmlinuz)μ initramfs λ‘λ
- 컀λμ΄ λ©λͺ¨λ¦¬ μ΄κΈ°ν ν 첫 λ²μ§Έ νλ‘μΈμ€ systemdμ€ν
π GRUB2 κΈ°λ³Έ ꡬ쑰
- /boot/grub/grub.cfg: GRUB μ€μ  νμΌ
- λ©λ΄ νλͺ© μμ:
menuentry 'Ubuntu 22.04 LTS' {
    linux   /boot/vmlinuz-5.15.0-52-generic root=UUID=xxxx ro quiet splash
    initrd  /boot/initrd.img-5.15.0-52-generic
}π 컀λ νλΌλ―Έν°
- root=UUID=xxxβ λ£¨νΈ νμΌμμ€ν  μ§μ 
- roβ μ½κΈ° μ μ©μΌλ‘ λ§μ΄νΈ ν initμμ rw μ ν
- quiet splashβ λΆν λ©μμ§ μ΅μν
3. Runlevel / systemd Target
π μ ν΅μ  SysV init (Runlevel)
- Runlevel 0 : Halt (μ’ λ£)
- Runlevel 1 : Single user mode
- Runlevel 3 : Multi-user, text mode
- Runlevel 5 : Multi-user, GUI
- Runlevel 6 : Reboot
π systemd Target (Ubuntu 22 κΈ°λ³Έ ꡬ쑰)
- poweroff.target(Runlevel 0)
- rescue.target(Runlevel 1)
- multi-user.target(Runlevel 3)
- graphical.target(Runlevel 5)
- reboot.target(Runlevel 6)
π νμΈ λͺ λ Ήμ΄:
systemctl get-default      # νμ¬ κΈ°λ³Έ target νμΈ
systemctl set-default multi-user.target
systemctl isolate rescue.target4. 컀λ λͺ¨λ (lsmod, modprobe, dmesg)
π 컀λ λͺ¨λμ΄λ?
- 컀λμ λμ μΌλ‘ λ‘λ/μΈλ‘λ κ°λ₯ν λλΌμ΄λ²λ κΈ°λ₯ νμ₯ μ½λ
- μ: νμΌ μμ€ν  λλΌμ΄λ², λ€νΈμν¬ μΉ΄λ λλΌμ΄λ²
π κ΄λ ¨ λͺ λ Ήμ΄
lsmod                      # νμ¬ λ‘λλ λͺ¨λ νμΈ
modprobe <module>          # λͺ¨λ λ‘λ
modprobe -r <module>       # λͺ¨λ μΈλ‘λ
dmesg | tail -n 20         # 컀λ λ‘κ·Έ νμΈπ μμ
lsmod | grep ext4          # ext4 νμΌμμ€ν
 λͺ¨λ νμΈ
sudo modprobe dummy        # κ°μ λ€νΈμν¬ μΈν°νμ΄μ€ λͺ¨λ λ‘λ
ip link show dummy0        # μΈν°νμ΄μ€ μμ± νμΈπΉ Ubuntu 22.04 μ€μ΅ μλ리μ€
π μ€μ΅ νκ²½ : Ubuntu 22.04 (VM λλ 물리 μλ²)
β μλλ¦¬μ€ 1: User Space vs Kernel Space μ΄ν΄
- 
straceμ€μΉsudo apt install strace -y
- 
μμ€ν  μ½ μΆμ  strace lsβ openat,read,writeκ°μ μμ€ν  μ½μ΄ 컀λμ ν΅ν΄ μ€νλλ κ² νμΈ
β μλλ¦¬μ€ 2: GRUB2 λ° μ»€λ νλΌλ―Έν° μμ 
- 
/etc/default/grubμμ sudo vim /etc/default/grub # GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unit=multi-user.target"
- 
μ μ© sudo update-grub sudo reboot
- 
λΆν μ ν μ€νΈ λͺ¨λ(multi-user.target)λ‘ μ§μ νμΈ 
β μλλ¦¬μ€ 3: Runlevel / Target μ ν
systemctl get-default
sudo systemctl set-default graphical.target
sudo rebootβ GUI λ‘κ·ΈμΈ νλ©΄ νμΈ
β μλλ¦¬μ€ 4: 컀λ λͺ¨λ μ€μ΅
- 
λ‘λλ λͺ¨λ νμΈ lsmod | head
- 
κ°μ μΈν°νμ΄μ€ dummy λͺ¨λ λ‘λ sudo modprobe dummy ip link show dummy0
- 
μΈλ‘λ sudo modprobe -r dummy
- 
컀λ λ‘κ·Έ νμΈ dmesg | tail -n 20
πΉ μν€ν μ² μ΄λ―Έμ§ μ μ
π μ½μ ν λ€μ΄μ΄κ·Έλ¨:
- Linux OS ꡬ쑰 (User space vs Kernel space vs Hardware)
- λΆν μν€ν μ² (BIOS β GRUB2 β Kernel β systemd)
- systemd target mapping (Runlevel vs Target ν)
- 컀λ λͺ¨λ λμ  λ‘λ ꡬ쑰λ