λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“ŒCS/OS

[OS] ν”„λ‘œμ„ΈμŠ€ vs μŠ€λ ˆλ“œ

by dar0m! 2021. 8. 18.

ν”„λ‘œκ·Έλž¨

ν”„λ‘œκ·Έλž¨μ΄λž€, νŒŒμΌμ΄ μ €μž₯ μž₯μΉ˜μ— μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€ 정적인 μƒνƒœλ₯Ό λ§ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€

  • λ©”λͺ¨λ¦¬μ— μ μž¬λ˜μ–΄ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œκ·Έλž¨μ˜ μΈμŠ€ν„΄μŠ€(독립적인 개체)
    • ν”„λ‘œκ·Έλž¨ : μ–΄λ–€ μž‘μ—…μ„ μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” 파일
  • μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ 할당받은 μž‘μ—…μ˜ λ‹¨μœ„

νŠΉμ§•

  • ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­(Code, Data, Stack, Heap의 ꡬ쑰)을 ν• λ‹Ήλ°›λŠ”λ‹€.
  • 기본적으둜 ν”„λ‘œμ„ΈμŠ€λ‹Ή μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œ(메인 μŠ€λ ˆλ“œ)λ₯Ό 가지고 μžˆλ‹€.
  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ³„λ„μ˜ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜λ©°, ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ μžλ£Œκ΅¬μ‘°μ— μ ‘κ·Όν•  수 μ—†λ‹€.
  • ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ— μ ‘κ·Όν•˜λ €λ©΄ ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 톡신(IPC, inter-process communication)을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
    • Ex. νŒŒμ΄ν”„, 파일, μ†ŒμΌ“ 등을 μ΄μš©ν•œ 톡신 방법 이용
  • ν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λ‹€κ°€ 였λ₯˜κ°€ λ°œμƒν•΄μ„œ ν”„λ‘œμ„ΈμŠ€κ°€ κ°•μ œλ‘œ μ’…λ£Œλ˜μ–΄λ„ νŒŒμΌμ„ μ†μƒμ‹œν‚€λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄, λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ•„λ¬΄λŸ° 영ν–₯을 주지 μ•ŠλŠ”λ‹€.

κ³Όκ±°μ—λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  λ•Œ μ‹€ν–‰ μ‹œμž‘λΆ€ν„° μ‹€ν–‰ λκΉŒμ§€ ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜λ§Œμ„ μ‚¬μš©ν•΄μ„œ μ§„ν–‰ν–ˆλ‹€κ³  ν•œλ‹€. ν•˜μ§€λ§Œ μ‹œκ°„μ΄ 흐λ₯Όμˆ˜λ‘ ν”„λ‘œκ·Έλž¨μ΄ λ³΅μž‘ν•΄μ§€κ³  ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜λ§Œμ„ μ‚¬μš©ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ°λŠ” λ²…μ°¨κ²Œ λ˜μ—ˆλ‹€. μ‹€μ œλ‘œ μ΄μ œλŠ” ν”„λ‘œκ·Έλž¨ ν•˜λ‚˜κ°€ λ‹¨μˆœνžˆ ν•œ 가지 μž‘μ—…λ§Œμ„ ν•˜λŠ” κ²½μš°λŠ” μ—†λ‹€. 그러면 이제 μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

μ‰½κ²Œ λ– μ˜€λ₯΄λŠ” 방법은, "ν•œ ν”„λ‘œκ·Έλž¨μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬ 개 λ§Œλ“€λ©΄ λ˜μ§€ μ•Šμ„κΉŒ?" 생각이 λ“€μ§€λ§Œ μ΄λŠ” λΆˆκ°€λŠ₯ν•œ μΌμ΄μ—ˆλ‹€. μ™œλƒν•˜λ©΄ μš΄μ˜μ²΄μ œλŠ” μ•ˆμ „μ„±μ„ μœ„ν•΄μ„œ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ μžμ‹ μ—κ²Œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ λ‚΄μ˜ μ •λ³΄μ—λ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ œμ•½μ„ 두고 있고, 이λ₯Ό λ²—μ–΄λ‚˜λŠ” 정보에 μ ‘κ·Όν•˜λ €λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μ•„λ¬΄νŠΌ ν”„λ‘œμ„ΈμŠ€μ™€λŠ” λ‹€λ₯Έ 더 μž‘μ€ μ‹€ν–‰ λ‹¨μœ„ κ°œλ…μ΄ ν•„μš”ν•˜κ²Œ λ˜μ—ˆκ³ , 이 κ°œλ…μ΄ λ°”λ‘œ μŠ€λ ˆλ“œλ‹€.

 

μŠ€λ ˆλ“œ

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ νλ¦„μ˜ λ‹¨μœ„
  • ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰ νλ¦„μ˜ λ‹¨μœ„

νŠΉμ§•

  • μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 각각 Stack만 λ”°λ‘œ ν• λ‹Ήλ°›κ³  Code, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•œλ‹€.
  • μŠ€λ ˆλ“œλŠ” ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” μ—¬λŸ¬ μ‹€ν–‰μ˜ νλ¦„μœΌλ‘œ, ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ μ£Όμ†Œ κ³΅κ°„μ΄λ‚˜ μžμ›λ“€(νž™ 곡간 λ“±)을 같은 ν”„λ‘œμ„ΈμŠ€ 내에 μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ ν•˜λ©΄μ„œ μ‹€ν–‰λœλ‹€.
  • 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— μžˆλŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλ“€μ€ 같은 νž™ 곡간을 κ³΅μœ ν•œλ‹€. λ°˜λ©΄μ— ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•  수 μ—†λ‹€.
  • 각각의 μŠ€λ ˆλ“œλŠ” λ³„λ„μ˜ λ ˆμ§€μŠ€ν„°μ™€ μŠ€νƒμ„ κ°–κ³  μžˆμ§€λ§Œ, νž™ λ©”λͺ¨λ¦¬λŠ” μ„œλ‘œ 읽고 μ“Έ 수 μžˆλ‹€.
  • ν•œ μŠ€λ ˆλ“œκ°€ ν”„λ‘œμ„ΈμŠ€ μžμ›μ„ λ³€κ²½ν•˜λ©΄, λ‹€λ₯Έ μ΄μ›ƒ μŠ€λ ˆλ“œ(sibling thread)도 κ·Έ λ³€κ²½ κ²°κ³Όλ₯Ό μ¦‰μ‹œ λ³Ό μˆ˜ μžˆλ‹€.
  • μŠ€λ ˆλ“œλŠ” Code, Data, Heap λ©”λͺ¨λ¦¬ μ˜μ—­μ΄ λ‚΄μš©μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ–€ μŠ€λ ˆλ“œ ν•˜λ‚˜μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ 같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œ λͺ¨λ‘κ°€ κ°•μ œλ‘œ μ’…λ£Œλœλ‹€.

 

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ vs λ©€ν‹° μŠ€λ ˆλ“œ

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€κ°€ μ—¬λŸ¬ CPUλ₯Ό μž₯μ°©ν•˜μ—¬ ν•˜λ‚˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€λ“€μ„ λ™μ‹œμ— 처리(병렬)ν•˜λŠ” 것이라면,
λ©€ν‹°μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ—¬λŸ¬ μž‘μ—…μ„ μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ μž₯점

  1. μ•ˆμ „μ„± (λ©”λͺ¨λ¦¬ μΉ¨λ²” 문제λ₯Ό OS μ°¨μ›μ—μ„œ ν•΄κ²°)

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ 단점

  1. 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ°–κ³  μžˆμ–΄, μž‘μ—…λŸ‰ λ§Žμ„ 수둝 μ˜€λ²„ν—€λ“œ λ°œμƒ.
  2. Context Switching으둜 μΈν•œ μ„±λŠ₯ μ €ν•˜

λ©€ν‹° μŠ€λ ˆλ“œμ˜ μž₯점

  1. Context-Switchingν•  λ•Œ κ³΅μœ ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬λ§ŒνΌμ˜ λ©”λͺ¨λ¦¬ μžμ›μ„ μ•„λ‚„ 수 μžˆλ‹€.
  2. μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ Stack μ˜μ—­μ„ μ œμ™Έν•œ λͺ¨λ“  λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— ν†΅μ‹ μ˜ 뢀담이 μ μ–΄μ„œ 응닡 μ‹œκ°„μ΄ λΉ λ₯΄λ‹€.

λ©€ν‹° μŠ€λ ˆλ“œμ˜ 단점

  1. μŠ€λ ˆλ“œ ν•˜λ‚˜κ°€ ν”„λ‘œμ„ΈμŠ€ λ‚΄ μžμ›μ„ 망쳐버린닀면 λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  수 μžˆλ‹€.
  2. μ•ˆμ •μ„± (μžμ›μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— ν•„μ—°μ μœΌλ‘œ λ™κΈ°ν™” λ¬Έμ œκ°€ λ°œμƒν•  μˆ˜λ°–μ— μ—†λ‹€.)
    • λ©€ν‹° μŠ€λ ˆλ“œμ˜ μ•ˆμ •μ„±μ— λŒ€ν•œ 단점은 Critical Section(μž„κ³„ μ˜μ—­) 기법을 톡해 λŒ€λΉ„ν•¨
    • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 곡유 데이터 값을 λ³€κ²½ν•˜λŠ” μ‹œμ μ— λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ κ·Έ 값을 읽으렀 ν•  λ•Œ λ°œμƒν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 동기화 κ³Όμ •
    • μƒν˜Έ 배제, 진행, ν•œμ • λŒ€κΈ°λ₯Ό μΆ©μ‘±ν•΄μ•Ό 함
Context Switchingμ΄λž€?

ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜κ³  λ³΅μ›ν•˜λŠ” 일련의 κ³Όμ •

즉, λ™μž‘ 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ λŒ€κΈ°ν•˜λ©΄μ„œ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό λ³΄κ΄€ν•˜κ³ , λŒ€κΈ°ν•˜κ³  있던 λ‹€μŒ 순번의 ν”„λ‘œμ„ΈμŠ€κ°€ λ™μž‘ν•˜λ©΄μ„œ 이전에 λ³΄κ΄€ν–ˆλ˜ ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό λ³΅κ΅¬ν•˜λŠ” 과정을 λ§ν•œλ‹€.
→ ν”„λ‘œμ„ΈμŠ€λŠ” 각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©λ˜λ―€λ‘œ, μΊμ‹œ λ©”λͺ¨λ¦¬ μ΄ˆκΈ°ν™”μ™€ 같은 무거운 μž‘μ—…μ΄ μ§„ν–‰λ˜μ—ˆμ„ λ•Œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  λ¬Έμ œκ°€ μ‘΄μž¬ν•œλ‹€.

 

정리

ν”„λ‘œμ„ΈμŠ€λŠ” 운영체제 κ΄€μ μ—μ„œ μ΅œμ†Œ μž‘μ—… λ‹¨μœ„
μŠ€λ ˆλ“œλŠ” CPU μž…μž₯μ—μ„œμ˜ μ΅œμ†Œ μž‘μ—… λ‹¨μœ„

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œλŠ” κ°œλ…μ˜ λ²”μœ„λΆ€ν„° λ‹€λ₯΄λ‹€. μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ μ•ˆμ— ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€.

  • μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ Code/Data/Stack/Heap λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήν•΄ μ£Όκ³  μ΅œμ†Œ μž‘μ—… λ‹¨μœ„λ‘œ μ‚ΌλŠ” 반면,
    μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ Stack λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ œμ™Έν•œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄ λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ κ³΅μœ ν•œλ‹€.
  • ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ 정보λ₯Ό κ³΅μœ ν•˜λ €λ©΄ IPCλ₯Ό μ‚¬μš©ν•˜λŠ” λ“±μ˜ 번거둜운 과정을 거쳐야 ν•˜μ§€λ§Œ,
    μŠ€λ ˆλ“œλŠ” κΈ°λ³Έ ꡬ쑰 μžμ²΄κ°€ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜λŠ” ꡬ쑰이기 λ•Œλ¬Έμ— λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ 정보 κ³΅μœ κ°€ 쉽닀.
    • λ•Œλ¬Έμ— λ©€ν‹° ν”„λ‘œμ„Έμ‹±λ³΄λ‹€ λ©€ν‹°μŠ€λ ˆλ“œκ°€ μžμ›μ„ μ•„λ‚„ 수 있게 λœλ‹€.
  • λ‹€λ§Œ μŠ€λ ˆλ“œμ˜ μŠ€μΌ€μ€„λ§μ€ μš΄μ˜μ²΄μ œκ°€ μ²˜λ¦¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 직접 동기화 λ¬Έμ œμ— λŒ€μ‘ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

 

μ°Έκ³ 

λŒ“κΈ€