π» [OS] νλ‘μΈμ€(Process)μ μ€λ λ(Thread)
π» [OS] νλ‘μΈμ€μ μ€λ λ
μλ
νμΈμ. π
μ€λμ νλ‘μΈμ€μ μ€λ λμ λν΄ μμλ³΄κ² μ΅λλ€.
νλ‘κ·Έλ¨(Program)μ΄λ?
νλ‘μΈμ€μ μ€λ λμ λν΄ μμλ³΄λ €λ©΄ νλ‘κ·Έλ¨μ λν΄ λ¨Όμ μμμΌνλ€.
- νλ‘κ·Έλ¨μ΄λ μ»΄ν¨ν°μμ μ€νλ λ νΉμ μμ (specific task)μ μννλ μΌλ ¨μ λͺ λ Ήμ΄λ€μ λͺ¨μ(μ§ν©μ²΄)μ΄λ€.
- μλμ μΈ μ‘΄μ¬
μ¦, μ΄λ ν μμ λ€μ μνμν€κΈ° μν λͺ λ Ήμ΄(μ½λ)μ λͺ¨μμ΄λ€.
νλ‘μΈμ€(Process)λ?
νλ‘κ·Έλ¨μ λ¨μ§ μ΄λ ν μμ λ€μ μνμν€κΈ° μν λͺ λ Ήμ΄(μ½λ)μ λͺ¨μμ΄λ―λ‘ μ€μ λ‘ μμ λ€μ μνμν€λ €λ©΄ μ΄ νλ‘κ·Έλ¨μ μ€νμμΌμΌ νλ€.
- νλ‘μΈμ€(process)λ μ»΄ν¨ν°μμ μ°μμ μΌλ‘ μ€νλκ³ μλ μ»΄ν¨ν° νλ‘κ·Έλ¨μ λ§νλ€.
- λ©λͺ¨λ¦¬μ μ¬λΌμ μ€νλκ³ μλ νλ‘κ·Έλ¨μ μΈμ€ν΄μ€(λ 립μ μΈ κ°μ²΄)
- μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λ μμ μ λ¨μ
- λ₯λμ μΈ μ‘΄μ¬
νλ‘μΈμ€ λ©λͺ¨λ¦¬ ꡬ쑰
μ€μ λ‘ μμμ λΆμ¬λ°μ λ©λͺ¨λ¦¬ μμ νλ‘μΈμ€ ꡬ쑰λ λ€μκ³Ό κ°λ€.
Code
- λ©λͺ¨λ¦¬μ μ½λ(code) μμμ μ€νν νλ‘κ·Έλ¨μ μ½λκ° μ μ₯λλ μμμΌλ‘ ν μ€νΈ(code) μμμ΄λΌκ³ λ λΆλ₯Έλ€.
- CPUλ μ½λ μμμ μ μ₯λ λͺ λ Ήμ΄λ₯Ό νλμ© κ°μ Έκ°μ μ²λ¦¬νκ² λ©λλ€.
Data
- λ©λͺ¨λ¦¬μ λ°μ΄ν°(data) μμμ νλ‘κ·Έλ¨μ μ μ λ³μμ μ μ (static) λ³μκ° μ μ₯λλ μμμ΄λ€.
- λ°μ΄ν° μμμ νλ‘κ·Έλ¨μ μμκ³Ό ν¨κ» ν λΉλλ©°, νλ‘κ·Έλ¨μ΄ μ’ λ£λλ©΄ μλ©Ένλ€.
Stack
- λ©λͺ¨λ¦¬μ μ€ν(stack) μμμ ν¨μμ νΈμΆκ³Ό κ΄κ³λλ μ§μ λ³μμ 맀κ°λ³μκ° μ μ₯λλ μμμ΄λ€.
- μ€ν μμμ ν¨μμ νΈμΆκ³Ό ν¨κ» ν λΉλλ©°, ν¨μμ νΈμΆμ΄ μλ£λλ©΄ μλ©Ένλ€.
Heap
- νλ‘μΈμ€ μ€ν μ€μ λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬μ΄λ€.
- new μ°μ° λ±μΌλ‘ λμ μΌλ‘ ν λΉ λλ€.
νΉμ§
- νλ‘μΈμ€λ κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμ(Code, Data, Stack, Heapμ ꡬ쑰)μ ν λΉλ°λλ€.
- κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€λΉ μ΅μ 1κ°μ μ€λ λ(λ©μΈ μ€λ λ)λ₯Ό κ°μ§κ³ μλ€.
- κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μμ μ€νλλ©°, ν νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£κ΅¬μ‘°μ μ κ·Όν μ μλ€.
- ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμμ μ κ·Όνλ €λ©΄ νλ‘μΈμ€ κ°μ ν΅μ (IPC, inter-process communication)μ μ¬μ©ν΄μΌ νλ€.
- ex) νμ΄ν, νμΌ, μμΌ λ±μ μ΄μ©ν ν΅μ λ°©λ² μ΄μ©
μ€λ λ(thread)λ?
- νλ‘μΈμ€ λ΄μμ μ€νλλ μ¬λ¬ νλ¦μ λ¨μ
- νλ‘μΈμ€μ νΉμ ν μν κ²½λ‘
- νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€νμ λ¨μ
μ€λ λ νΉμ§
- μ€λ λλ νλ‘μΈμ€ λ΄μμ κ° Stack μμλ§μ λ°λ‘ ν λΉλ°κ³ Code, Data, Heap μμμ 곡μ νλ€.
- μ€λ λλ ν νλ‘μΈμ€ λ΄μμ λμλλ μ¬λ¬ μ€νμ νλ¦μΌλ‘, νλ‘μΈμ€ λ΄μ μ£Όμ 곡κ°μ΄λ μμλ€(ν κ³΅κ° λ±)μ κ°μ νλ‘μΈμ€ λ΄μ μ€λ λλΌλ¦¬ 곡μ νλ©΄μ μ€νλλ€.
- λμΌν νλ‘μΈμ€ μμ μλ μ¬λ¬ μ€λ λλ€μ κ°μ ν 곡κ°μ 곡μ νλ€. λ°λ©΄μ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όν μ μλ€.
- κ°κ°μ μ€λ λλ λ³λμ λ μ§μ€ν°μ μ€νμ κ°κ³ μμ§λ§, ν λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μλ€.
- ν μ€λ λκ° νλ‘μΈμ€ μμμ λ³κ²½νλ©΄, λ€λ₯Έ μ΄μ μ€λ λ(sibling thread)λ κ·Έ λ³κ²½ κ²°κ³Όλ₯Ό μ¦μ λ³Ό μ μλ€.
- κΈ°λ³Έμ μΌλ‘ νλμ νλ‘μΈμ€κ° μμ±λλ©΄ νλμ μ€λ λκ° κ°μ΄ μμ±λλ€.
λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λ
Context Switching(λ¬Έλ§₯ κ΅ν) μ΄λ?
- CPUμμ μ¬λ¬ νλ‘μΈμ€λ₯Ό λμκ°λ©΄μ μμ μ μ²λ¦¬νλ λ° μ΄ κ³Όμ μ Context Switchingμ΄λΌ νλ€.
- ꡬ체μ μΌλ‘, λμ μ€μΈ νλ‘μΈμ€κ° λκΈ°λ₯Ό νλ©΄μ ν΄λΉ νλ‘μΈμ€μ μν(Context)λ₯Ό 보κ΄νκ³ , λκΈ°νκ³ μλ λ€μ μμμ νλ‘μΈμ€κ° λμνλ©΄μ μ΄μ μ 보κ΄νλ νλ‘μΈμ€μ μνλ₯Ό 볡ꡬνλ μμ μ λ§νλ€.
λ©ν° νλ‘μΈμ€
λ©ν° νλ‘μΈμ±μ΄λ
- νλμ μμ© νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ νλ‘μΈμ€λ‘ ꡬμ±νμ¬ κ° νλ‘μΈμ€κ° νλμ μμ (νμ€ν¬)μ μ²λ¦¬νλλ‘ νλ κ²μ΄λ€.
μ₯μ
- μμ μ±μ΄ μ’λ€. μ¬λ¬κ°μ μμ νλ‘μΈμ€ μ€ νλμ λ¬Έμ κ° λ°μν΄λ, λ€λ₯Έ μμ νλ‘μΈμ€μ μν₯μ΄ νμ°λμ§ μλλ€.
- ꡬνμ΄ λΉκ΅μ κ°λ¨νλ€. λ¨μ
- λ©λͺ¨λ¦¬ μ¬μ©λμ΄ λ§λ€.
- 곡μ νλ λ©λͺ¨λ¦¬κ° μμ΄ νλ‘μΈμ€ κ°κ° λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κΈ° λλ¬Έμ΄λ€.
- Context Switchingμμμ μ€λ²ν€λ
- Context Switching κ³Όμ μμ μΊμ¬ λ©λͺ¨λ¦¬ μ΄κΈ°ν λ± λ¬΄κ±°μ΄ μμ μ΄ μ§νλκ³ λ§μ μκ°μ΄ μλͺ¨λλ λ±μ μ€λ²ν€λκ° λ°μνκ² λλ€.
- νλ‘μΈμ€λ κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉλ°μκΈ° λλ¬Έμ νλ‘μΈμ€ μ¬μ΄μμ 곡μ νλ λ©λͺ¨λ¦¬κ° μμ΄, Context Switchingκ° λ°μνλ©΄ μΊμ¬μ μλ λͺ¨λ λ°μ΄ν°λ₯Ό λͺ¨λ 리μ νκ³ λ€μ μΊμ¬ μ 보λ₯Ό λΆλ¬μμΌ νλ€.
- νλ‘μΈμ€ μ¬μ΄μ μ΄λ ΅κ³ 볡μ‘ν ν΅μ κΈ°λ²(IPC)
- νλ‘μΈμ€λ κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉλ°μκΈ° λλ¬Έμ νλμ νλ‘κ·Έλ¨μ μνλ νλ‘μΈμ€λ€ μ¬μ΄μ λ³μλ₯Ό 곡μ ν μ μλ€.
- λ€λ₯Έ νλ‘μΈμ€μ μ κ·ΌνκΈ° μν΄ IPCλ₯Ό μ¬μ©ν΄μΌ νλ€.
λ©ν° μ€λ λ
λ©ν° μ€λ λ©μ΄λ
- νλμ μμ©νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ μ€λ λλ‘ κ΅¬μ±νκ³ κ° μ€λ λλ‘ νμ¬κΈ νλμ μμ μ μ²λ¦¬νλλ‘ νλ κ²μ΄λ€.
- μλμ°, 리λ μ€ λ± λ§μ μ΄μ체μ λ€μ΄ λ©ν° νλ‘μΈμ±μ μ§μνκ³ μμ§λ§ λ©ν° μ€λ λ©μ κΈ°λ³ΈμΌλ‘ νκ³ μλ€.
- μΉ μλ²λ λνμ μΈ λ©ν° μ€λ λ μμ© νλ‘κ·Έλ¨μ΄λ€.
μ₯μ
- μμ€ν
μμ μλͺ¨ κ°μ (μμμ ν¨μ¨μ± μ¦λ)
- νλ‘μΈμ€λ₯Ό μμ±νμ¬ μμμ ν λΉνλ μμ€ν μ½μ΄ μ€μ΄λ€μ΄ μμμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ€.
- μμ 곡μ μ©μ΄
- μμ€ν
μ²λ¦¬λ μ¦κ° (μ²λ¦¬ λΉμ© κ°μ)
- μ€λ λ κ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ κ°λ¨ν΄μ§κ³ μμ€ν μμ μλͺ¨κ° μ€μ΄λ€κ² λλ€.
- μ€λ λ μ¬μ΄μ μμ λμ΄ μμ Context Switchingμ΄ λΉ λ₯΄λ€.
- κ°λ¨ν ν΅μ λ°©λ²μΌλ‘ μΈν νλ‘κ·Έλ¨ μλ΅ μκ° λ¨μΆ
- μ€λ λλ νλ‘μΈμ€ λ΄μ Stack μμμ μ μΈν λͺ¨λ λ©λͺ¨λ¦¬λ₯Ό 곡μ νκΈ° λλ¬Έμ ν΅μ μ λΆλ΄μ΄ μ λ€.
λ¨μ
- μ£Όμ κΉμ μ€κ³κ° νμνλ€.
- ꡬν λ° ν μ€νΈ, λλ²κΉ μ΄ μ΄λ ΅λ€.
- λ€λ₯Έ νλ‘μΈμ€μμ μ€λ λλ₯Ό μ μ΄ν μ μλ€. (μ¦, νλ‘μΈμ€ λ°μμ μ€λ λ κ°κ°μ μ μ΄ν μ μλ€.)
- μμ 곡μ λ‘ μΈν λ¬Έμ κ° λ°μν μ μλ€. <b<(λκΈ°ν λ¬Έμ )</b>
- μμ μ€λ λ μ€ νλμ λ¬Έμ κ° μκΈ΄κ²½μ° μ 체 νλ‘μΈμ€μ μν₯μ μ€ μ μλ€.
μ΄λ€ μν©μ λ©ν°νλ‘μΈμ€, λ©ν°μ€λ λλ₯Ό μ¬μ©νλ©΄ μ’μ κ²μΌκΉ?
λ©ν°μ€λ λ
- μΌλ°μ μΌλ‘ λ©ν°μ€λ λλ₯Ό λ§μ΄ μ¬μ©νλ€. (μμμ ν¨μ¨μ μΌλ‘ μ¬μ©νκ³ μ±λ₯μ΄ μ’κΈ° λλ¬Έ)
- μ€λ λλ§λ€ μ‘΄μ¬νλ Stackμμμ μ μΈν λλ¨Έμ§ λ©λͺ¨λ¦¬λ 곡μ νλ―λ‘ μμμ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€.
-
λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ―λ‘ μ²λ¦¬ λΉμ© λν κ°μνκ³ μλ΅ μκ° λν λΉ λ₯΄λ€. Context Switching μκ°λ μλΉν λΉ λ₯΄λ€.
- νμ§λ§, μ€νλ € λ©λͺ¨λ¦¬ 곡μ λ‘ μΈν μκ³κ΅¬μ λ¬Έμ λλ¬Έμ λκΈ°ν λ¬Έμ λ₯Ό μ κ²½μ¨μΌνλ€.
- λν νλμ μ€λ λμ λ¬Έμ κ° μκΈ΄λ€λ©΄ λͺ¨λ νλ‘μΈμ€μ λ¬Έμ κ° μκΈ΄λ€.
λ©ν°νλ‘μΈμ€
- λ©ν°μ€λ λκ° λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νκ³ μ±λ₯μ΄ λΉ λ₯΄μ§λ§ μμ μ±μ΄ λΆμ‘±νλ€.
- μ’ λ μμ μ μΈ μ²λ¦¬κ° νμν λ μ¬μ©λλ€.
- κ³Όκ±°μ λΈλΌμ°μ λ€μ νμ λ©ν°μ€λ λ λ°©μμΌλ‘ μ§μνμ¬ νλμ νμ λ¬Έμ κ° μκΈ°λ©΄ λΈλΌμ°μ μ νμ΄ λͺ¨λ μ’ λ£λμ΄ μ λ³΄κ° λ λΌκ°κ³€ νλ€.
- μ΅μ μ λΈλΌμ°μ λ€μ (ex ν¬λ‘¬) νμ λ©ν°νλ‘μΈμ€ λ°©μμΌλ‘ μ§μν΄ νλμ νμ΄ λ¬Έμ κ° μκΈ°λλΌλ λ€λ₯Έ νλ€μ λ¬Έμ κ° μλλ‘ νμλ€.
λ
νλ‘μΈμ€μ μ€λ λμ λν΄ μμ보μμ΅λλ€.
Reference
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37