Hello Kitty Eyes Shut
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🏫 학ꡐ/πŸ“Œ λ¦¬λˆ…μŠ€

[λ¦¬λˆ…μŠ€] μš΄μ˜μ²΄μ œμ™€ 컀널

λ°˜μ‘ν˜•

 

 

 

 

πŸ“‘ λ“€μ–΄κ°€λ©°

μš°λ¦¬κ°€ 맀일 μ“°λŠ” μ»΄ν“¨ν„°λ‚˜ μŠ€λ§ˆνŠΈν°μ„ λ– μ˜¬λ €λ³΄μž.

 

κ²‰μœΌλ‘œλŠ” λΈŒλΌμš°μ €λ‚˜ λ©”μ‹ μ €, κ²Œμž„ λ“±μ˜ μ•±λ“€λ§Œ λ³΄μ΄κ² μ§€λ§Œ,

κ·Έ μ•ˆμ—μ„œλŠ” 맀우 λ³΅μž‘ν•œ λΆ€ν’ˆλ“€μ΄ λŠμž„μ—†μ΄ λŒμ•„κ°€κ³  μžˆλ‹€.

 

λŒ€ν‘œμ μœΌλ‘œλŠ” CPU, RAM, SSD/HDD, GPU 등이 μžˆλŠ”λ°,

이 λͺ¨λ“  것은 사싀 λ‹¨μˆœν•œ ν•˜λ“œμ›¨μ–΄ 덩어리에 λΆˆκ³Όν•˜λ‹€.

μ‚¬λžŒμ΄ 이 μž₯μΉ˜λ“€μ„ μ œλŒ€λ‘œ ν™œμš©ν•˜λ €λ©΄, 였늘 μ•Œμ•„λ³Ό 운영체제(OS)κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•˜λ‹€.

 

 

 


🧩 μš΄μ˜μ²΄μ œλž€

운영체제(Operating System, OS)λŠ” μ‚¬μš©μžμ™€ ν•˜λ“œμ›¨μ–΄ 사이λ₯Ό μ΄μ–΄μ£ΌλŠ” 닀리라고 μƒκ°ν•˜λ©΄ λœλ‹€.

컴퓨터 μ•ˆμ—λŠ” CPU, λ©”λͺ¨λ¦¬, μ €μž₯μž₯치, λ„€νŠΈμ›Œν¬ μΉ΄λ“œ 같은 λΆ€ν’ˆλ“€μ΄ μžˆλŠ”λ°, 이 λΆ€ν’ˆλ“€μ€ 0κ³Ό 1λ§Œμ„ μ•Œμ•„λ“€μ„ 수 μžˆλ‹€.

그렇기에 μ‚¬λžŒμ΄λ‚˜ 일반 ν”„λ‘œκ·Έλž¨μ΄ μ΄λŸ¬ν•œ λΆ€ν’ˆλ“€μ„ 직접 닀루면 μœ„ν—˜ν•˜κ³  λ³΅μž‘ν•΄μ§€λ‹ˆκΉŒ μš΄μ˜μ²΄μ œκ°€ μ€‘κ°„μ—μ„œ 이λ₯Ό λŒ€μ‹  μ²˜λ¦¬ν•΄μ£ΌλŠ” 것이닀.

 

 

μš΄μ˜μ²΄μ œκ°€ ν•˜λŠ” 큰 역할은 μ•„λž˜μ™€ κ°™λ‹€.

  • μžμ› 관리
    μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ΄ λ™μ‹œμ— λŒμ•„κ°ˆ λ•Œ CPU μ‹œκ°„μ„ κ³΅μ •ν•˜κ²Œ λ‚˜λˆ μ£Όκ³ , λ©”λͺ¨λ¦¬λ₯Ό λΉŒλ €μ£Όκ±°λ‚˜ λŒλ €λ°›κ³ , λ””μŠ€ν¬ 곡간을 λ°°λΆ„ν•΄μ€€λ‹€.
  • μ‚¬μš©μž 편의 제곡(좔상화)
    "νŒŒμΌμ— μ“°κΈ°", "화면에 ν‘œμ‹œν•˜κΈ°"처럼 쉽고 μΌκ΄€λœ κΈ°λŠ₯만 μ œκ³΅ν•˜κ³ , μ‹€μ œ ν•˜λ“œμ›¨μ–΄ μ œμ–΄μ˜ λ³΅μž‘ν•¨μ€ κ°μΆ˜λ‹€.
    (예λ₯Ό λ“€μ–΄ μš°λ¦¬λŠ” test.txt νŒŒμΌμ— ν…μŠ€νŠΈλ₯Ό μ“Έ 수 μžˆλ‹€λŠ” κ²ƒλ§Œ μ•Œλ©΄ 되고, SSD의 물리 블둝 μ£Όμ†ŒλŠ” μ•Œ ν•„μš”κ°€ μ—†λ‹€.)
  • 보호 및 μ•ˆμ •μ„± 제곡
    ν•œ ν”„λ‘œκ·Έλž¨μ΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ˜ λ©”λͺ¨λ¦¬λ₯Ό λ§κ°€λœ¨λ¦¬κ±°λ‚˜, κΆŒν•œ 없이 μ€‘μš”ν•œ νŒŒμΌμ„ 건듀지 λͺ» ν•˜λ„λ‘ λ³΄μ•ˆ κ·œμΉ™μ„ μ§€μΌœμ€€λ‹€.

 

즉, μ‰½κ²Œ λ§ν•˜μžλ©΄ OSλŠ” μ»΄ν“¨ν„°μ˜ κ΄€λ¦¬μž + λ²ˆμ—­κ°€ 역할을 ν•œλ‹€κ³  보면 λœλ‹€.

μš°λ¦¬κ°€ λ‹¨μˆœνžˆ "이 파일 μ—΄κ³  μ‹Άμ–΄"라고 ν•˜λ©΄, OSκ°€ μ•Œμ•„μ„œ 이 말을 ν•˜λ“œμ›¨μ–΄κ°€ 이해할 수 μžˆλŠ” μ‹ ν˜Έλ‘œ λ°”κΏ”μ„œ μ‹€ν–‰ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό λ‹€μ‹œ μ‚¬μš©μžμ—κ²Œ λŒλ €μ£ΌλŠ” 것이닀.

 

 


βš™οΈ μ»€λ„μ΄λž€

컀널(Kernel)은 운영체제의 핡심 엔진이닀.

운영체제의 κ΅¬μ„±μš”μ†Œλ‘œλŠ” 컀널 말고도 μ…Έ(λͺ…λ Ήμ–΄ μ°½), κΈ°λ³Έ μœ ν‹Έλ¦¬ν‹°(νŽΈμ§‘κΈ° λ“±), 라이브러리 같은 것듀이 μžˆμ§€λ§Œ,

이 μ€‘μ—μ„œ ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 λ§Œμ§€κ³  μžμ›μ„ μ§„μ§œλ‘œ κ΄€λ¦¬ν•˜λŠ” 뢀뢄은 컀널이닀.

 

 

μ΄λŸ¬ν•œ 컀널이 ꡬ체적으둜 ν•˜λŠ” 일은 크게 λ„€ κ°€μ§€λ‘œ 정리할 수 μžˆλ‹€.

  • ν”„λ‘œμ„ΈμŠ€ 관리
    ν”„λ‘œκ·Έλž¨μ΄ μ…€ν–‰λ˜λ©΄ ν”„λ‘œμ„ΈμŠ€κ°€ λ§Œλ“€μ–΄μ§€κ²Œ λ˜λŠ”λ°, 컀널은 μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ μ–Έμ œ, μ–΄λŠ CPU μ½”μ–΄μ—μ„œ, μ–Όλ§ˆλ‚˜ 싀행될지λ₯Ό μ •ν•΄μ€€λ‹€. (μŠ€μΌ€μ€„λ§)
  • λ©”λͺ¨λ¦¬ 관리
    각 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ 독립적인 가상 μ£Όμ†Œ 곡간을 μ€˜μ„œ A ν”„λ‘œκ·Έλž¨μ΄ B ν”„λ‘œκ·Έλž¨ λ©”λͺ¨λ¦¬λ₯Ό μΉ¨λ²”ν•˜μ§€ λͺ» ν•˜λ„λ‘ ν•΄μ€€λ‹€.
  • 파일 μ‹œμŠ€ν…œ
    컀널은 VFS(가상 파일 μ‹œμŠ€ν…œ)λΌλŠ” 곡톡 계측을 ν†΅ν•΄μ„œ ext4, xfs, NTFS 같은 μ„œλ‘œ λ‹€λ₯Έ νŒŒμΌμ‹œμŠ€ν…Œλ―ˆ ν•˜λ‚˜μ˜ "파일"μ΄λΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ 보여쀀닀.
    그리고 μ‹€μ œλ‘œλŠ” ν”„λ‘œκ·Έλž¨μ΄ open, read, write 같은 μš”μ²­μ„ ν•˜λ©΄, 컀널은 νŽ˜μ΄μ§€ μΊμ‹œμ— 이λ₯Ό λ¨Όμ € λ°˜μ˜ν•˜κ³ , μ μ ˆν•œ μ‹œμ μ— SSDλ‚˜ HDD둜 λ‚΄λ €λ³΄λ‚΄μ£ΌλŠ” 것이닀.
  • μž₯치 λ“œλΌμ΄λ²„μ™€ λ³΄μ•ˆ
    ν‚€λ³΄λ“œ, 마우슀, κ·Έλž˜ν”½μΉ΄λ“œ, λ„€νŠΈμ›Œν¬ μΉ΄λ“œ, SSD λ“± λͺ¨λ“  μž₯μΉ˜λŠ” 각자 λ“œλΌμ΄λ²„κ°€ μžˆμ–΄μ•Ό 움직일 수 μžˆλŠ”λ°,
    컀널은 이 λ“œλΌμ΄λ²„λ“€μ„ ν†΅ν•΄μ„œ 각각의 μž₯μΉ˜μ™€ λŒ€ν™”ν•œλ‹€.
    λ˜ν•œ, λ™μ‹œμ— μ‚¬μš©μž, κ·Έλ£Ή, κΆŒν•œ 같은 λ³΄μ•ˆ κ·œμΉ™μ„ μ§€ν‚€κ³ , λ§Œμ•½ λ¬Έμ œκ°€ 생기면 μ‹œμŠ€ν…œμ„ λ³΄ν˜Έν•΄μ£ΌκΈ°λ„ ν•œλ‹€.

 

 


πŸ”Ž μš΄μ˜μ²΄μ œμ™€ μ»€λ„μ˜ 관계

μš΄μ˜μ²΄μ œμ™€ μ»€λ„μ˜ 관계λ₯Ό μˆœμ„œλŒ€λ‘œ μ •λ¦¬ν•΄μ„œ ν•˜λ‚˜μ˜ νλ¦„μœΌλ‘œ 정리해보면 μ•„λž˜μ™€ κ°™λ‹€.

 

1) ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œμž‘

μ‚¬μš©μžκ°€ μ•„μ΄μ½˜μ„ λˆ„λ₯΄κ±°λ‚˜ μ…Έμ—μ„œ λͺ…령을 치면, μš΄μ˜μ²΄μ œλŠ” μƒˆ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“ λ‹€.

μ΄λ•Œ 컀널이 가상 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό 작고(μ½”λ“œ, 데이터, νž™, μŠ€νƒ, 곡유라이브러리),

첫 μŠ€λ ˆλ“œλ₯Ό CPU에 νƒœμ›Œμ„œ μ‚¬μš©μž λͺ¨λ“œλ‘œ μ‹€ν–‰μ‹œν‚¨λ‹€

 

 

2) ν”„λ‘œκ·Έλž¨μ΄ OS에 도움 μš”μ²­

ν”„λ‘œκ·Έλž¨μ€ ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 만질 수 μ—†κΈ° λ•Œλ¬Έμ— μ»€λ„μ—κ²Œ system call둜 뢀탁을 ν•˜κ²Œ λœλ‹€.

예λ₯Ό λ“€λ©΄, open("test.txt"), write(fd, buf, n), mmap, fork 같은 μš”μ²­μ΄ μžˆμ„ 것이닀.

μ΄λŸ¬ν•œ μ‹œμŠ€ν…œμ½œμ΄ μ‹€ν–‰λ˜λ©΄ λͺ¨λ“œ μ „ν™˜(context switch)이 μΌμ–΄λ‚˜κ³ , μ‚¬μš©μž λͺ¨λ“œμ—μ„œ 컀널 λͺ¨λ“œλ‘œ λ°”λ€Œκ²Œ λœλ‹€.

 

 

3) 컀널이 μ‹€μ œ 일을 처리

예λ₯Ό λ“€μ–΄μ„œ open λͺ…λ Ήμ–΄μ˜ 경우

경둜λ₯Ό ν•΄μ„ν•˜κ³  κΆŒν•œμ„ ν™•μΈν•œ λ’€, κ·Έ νŒŒμΌμ„ λŒ€ν‘œν•˜λŠ” inodeλ₯Ό μ°Ύμ•„μ„œ ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€μ— 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ°°μ •ν•΄μ€€λ‹€.

 

write라면, μ‚¬μš©μž λ²„νΌμ—μ„œ 데이터λ₯Ό copy_from_user둜 컀널 λ©”λͺ¨λ¦¬(νŽ˜μ΄μ§€ μΊμ‹œ)에 λ³΅μ‚¬ν•˜κ³ ,

νŽ˜μ΄μ§€λ₯Ό dirty(μˆ˜μ •λ¨)둜 ν‘œμ‹œν•œ λ’€ μ μ ˆν•œ μ‹œμ μ— λ””μŠ€ν¬λ‘œ 내렀보내쀀닀.

 

malloc이 λ©”λͺ¨λ¦¬ν’€μ— 남은 λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•΄μ„œ 컀널에 μš”μ²­μ„ 올리게 되면,

μ»€λ„μ˜ buddy allocatorκ°€ 물리 λ©”λͺ¨λ¦¬λ₯Ό λ–Όμ–΄μ£Όκ³ , νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ κ°±μ‹ ν•΄μ„œ 가상 μ£Όμ†Œλ‘œ μ—°κ²°ν•΄μ€€λ‹€.

 

 

4) μ‚¬μš©μž λͺ¨λ“œλ‘œ 볡귀

컀널이 μœ„μ™€ 같은 일듀을 마치면 μ‹œμŠ€ν…œμ½œμ΄ λλ‚˜κ³ , CPUλŠ” λ‹€μ‹œ μ‚¬μš©μž λͺ¨λ“œμ—μ„œ ν”„λ‘œκ·Έλž¨μ„ 계속 μ‹€ν–‰ν•œλ‹€

그리고, 이 κ³Όμ •μ—μ„œ ν•„μš”ν•˜λ©΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜κ°€ μΌμ–΄λ‚˜κΈ°λ„ ν•œλ‹€.

 

.

μœ„μ™€ 같은 흐름 덕뢄에 μš°λ¦¬λŠ” "파일 μ €μž₯"처럼 λ‹¨μˆœν•œ 일을 ν•˜λ”λΌλ„

λ³΄μ•ˆμ΄ μΌœμ§€κ³ , 속도와 효율이 ν™•λ³΄λ˜λ©°, ν•˜λ“œμ›¨μ–΄λ§ˆλ‹€ λ™μž‘ 방식이 λ‹€λ₯΄λ‹€λŠ” 사싀을 μ‹ κ²½μ“Έ ν•„μš” 없이 같은 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 것이닀.

 

 

운영체제(OS): 컀널 + 라이브러리 + Shell + μœ ν‹Έλ¦¬ν‹° 전체
컀널(Kernel): ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 λ‹€λ£¨λŠ” μ—”μ§„

 

 


βœ… 총정리

  • 운영체제(OS)
    컴퓨터λ₯Ό μ“°κ²Œ ν•΄μ£ΌλŠ” 전체 ν™˜κ²½
    ex. Ubuntu, Windows, Android λ“±
  • 컀널(Kernel)
    OS의 핡심 μ—”μ§„
    ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 μ œμ–΄ν•˜κ³ , μžμ›κ³Ό λ³΄μ•ˆ 등을 μ±…μž„μ§
  • μ‹œμŠ€ν…œμ½œ(System Call)
    ν”„λ‘œκ·Έλž¨μ΄ 컀널 κΈ°λŠ₯을 μ“°κΈ° μœ„ν•΄ μ§€λ‚˜κ°€λŠ” 곡식 ν†΅λ‘œ

 

  • OSκ°€ μ—†μœΌλ©΄ ν•˜λ“œμ›¨μ–΄λŠ” λ‹¨μˆœνžˆ λΆ€ν’ˆμΌ 뿐, μ‚¬λžŒμ΄ μ“°κΈ°λŠ” νž˜λ“€λ‹€.
  • 컀널이 ν•˜λ“œμ›¨μ–΄λ₯Ό 직접 닀루며, μ•ˆμ „ν•˜κ³  κ³΅μ •ν•˜κ²Œ μžμ›μ„ 관리해쀀닀.
  • ν”„λ‘œκ·Έλž¨μ€ μ‹œμŠ€ν…œμ½œμ„ ν†΅ν•΄μ„œλ§Œ 컀널에 μš”μ²­ν•  수 있고, 컀널은 κ·Έ μš”μ²­μ„ μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰ν•΄μ€€λ‹€.

 

 


πŸ“š κ²°λ‘ 

μ΄λ²ˆμ— λ¦¬λˆ…μŠ€ μˆ˜μ—…μ˜ 첫 κ°•μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•˜λ©΄μ„œ

λ‹¨μˆœνžˆ 컴퓨터λ₯Ό 켜면 κ·Έλƒ₯ λŒμ•„κ°€λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ •λ„λ‘œ μƒκ°ν–ˆλ˜ μš΄μ˜μ²΄μ œκ°€

사싀은 λͺ¨λ“  ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄μ˜ 쑰율자 역할을 ν•˜κ³  μžˆμ—ˆμŒμ„ 깨달을 수 μžˆμ—ˆλ‹€.

 

특히 인상 κΉŠμ—ˆλ˜ 점이 두 κ°€μ§€κ°€ μžˆμ—ˆλŠ”λ° μ•„λž˜μ™€ κ°™λ‹€.

  • user space와 kernel space의 뢄리λ₯Ό 톡해 λ³΄μ•ˆμ„±κ³Ό μ•ˆμ •μ„±μ„ ν™•λ³΄ν•œλ‹€λŠ” 점
    ν”„λ‘œκ·Έλž¨μ΄ 직접 ν•˜λ“œμ›¨μ–΄λ₯Ό κ±΄λ“œλ¦¬μ§€ λͺ»ν•˜κ²Œ ν•˜κ³ , λ°˜λ“œμ‹œ μ‹œμŠ€ν…œμ½œμ„ ν†΅ν•΄μ„œλ§Œ μ ‘κ·Όν•˜κ²Œ ν•œλ‹€λŠ” 원칙이 OS μ„€κ³„μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λΆ€λΆ„μ΄λΌλŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€.
  • μš°λ¦¬κ°€ μ‰½κ²Œ μ“°λŠ” open, malloc, write 같은 ν•¨μˆ˜ ν•œ 쀄 λ’€μ—λŠ”, 컀널 λ‚΄λΆ€μ—μ„œ μˆ˜λ§Žμ€ λ³΅μž‘ν•œ μ ˆμ°¨μ™€ μ΅œμ ν™”κ°€ 이루어지고 μžˆλ‹€λŠ” 점
    이 덕뢄에 κ°œλ°œμžλŠ” ν•˜λ“œμ›¨μ–΄μ˜ μ„ΈλΆ€ ꡬ쑰λ₯Ό λͺ°λΌλ„ μΌκ΄€λœ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ•ˆμ „ν•˜κ²Œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  수 μžˆλŠ” κ²ƒμ΄μ—ˆλ‹€.

 

μ΄λŸ¬ν•œ λΆ€λΆ„μ—μ„œ 지식이 많이 λΆ€μ‘±ν•΄μ„œ κ³΅λΆ€ν•˜λŠ” 데에 μ‹œκ°„μ΄ ꡉμž₯히 였래 κ±Έλ Έμ§€λ§Œ,

μ•žμœΌλ‘œ κ°œλ°œμ„ ν•  λ•Œμ—λŠ” 였늘 μ •λ¦¬ν–ˆλ˜ λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ 'λ‚΄ μ½”λ“œ λ’€μ—μ„œ OSκ°€ μ–΄λ–€ 이을 ν•˜κ³  μžˆλŠ”κ°€'λ₯Ό 항상 μ˜μ‹ν•¨μœΌλ‘œμ¨ 더 깊이 μžˆλŠ” 선택을 ν•  수 μžˆλ„λ‘ μ„±μž₯ν•΄μ•Όκ² λ‹€.

 

μ΄λŸ¬ν•œ νƒœλ„λ₯Ό κΈ°λ₯Έλ‹€λ©΄ μ‹€μ œ μ„œλΉ„μŠ€ κ°œλ°œμ—μ„œ μ„±λŠ₯ μ΅œμ ν™”, μžμ› 관리, λ³΄μ•ˆ 섀계 같은 μ‹€μ§ˆμ μΈ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데에 큰 강점이 λ˜μ§€ μ•Šμ„κΉŒ 슬쩍 κΈ°λŒ€ν•΄λ³Έλ‹€ πŸ˜‹

λ°˜μ‘ν˜•