[OS] νλ‘μΈμ€(Process)μ μ€λ λ(Thread)
μ΄μ체μ μ κΈ°λ³Έμ΄λΌκ³ λ§ν μ μλ νλ‘μΈμ€μ μ€λ λμ λν΄ κ³΅λΆνκ³ μ 리ν΄λ³΄λ € νλ€.
νλ‘κ·Έλ¨, νλ‘μΈμ€, μ€λ λμ κ°λ κ³Ό μλ λ°©μμ λν΄ μμ보μ.
β Program
· μ΄λ€ μμ μ μν΄ μ€νν μ μλ νμΌ(μ€νμ½λ)μ΄λ©°, μ μ₯μ₯μΉμ μ μ₯μ λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μ μ μΈ μνμ΄λ€.
π©π»π» μ μ₯μ₯μΉμ μ μ₯μ λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ?
μμ§ μ΄μ체μ κ° νλ‘κ·Έλ¨μκ² λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μ£Όμ§ μμλ€λ λ»μ΄λ€. λͺ¨λ νλ‘κ·Έλ¨μ μ΄μ체μ κ° μ€νλκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μ€μΌ μ€νλ μ μλ€. μ½κ² λ§ν΄ κ·Έλ₯ μ½λ λ©μ΄λ¦¬λ€.
νλ‘κ·Έλ¨μ μ€ννλ μκ° μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λκ³ , μ€νλ νλ‘κ·Έλ¨μ νλ‘μΈμ€(Process)λΌκ³ νλ€.
β Process
· μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉ λ°λ / μ΄μ체μ κ° κ΄λ¦¬νλ λ¨μ
→ ν λΉλ°λ μμ€ν μμμ μ : CPU μκ°, μ΄μλκΈ° μν΄ νμν μ£Όμ 곡κ°, Code/Data/Stack/Heapμ κ΅¬μ‘°λ‘ λμ΄ μλ λ 립λ λ©λͺ¨λ¦¬ μμ
· Processer(μ²λ¦¬κΈ°, CPU)μ μν΄ μ²λ¦¬λλ νλ‘κ·Έλ¨μΌλ‘ μμ (Job), ν μ€ν¬(Task)λΌκ³ λ λΆλ¦°λ€.
· κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€ λΉ μ΅μ 1κ°μ μ€λ λλ₯Ό κ°μ§κ³ μλ€.
β Thread
· νλ‘μΈμ€ λ΄μμ μ€νλλ μ¬λ¬ νλ¦μ λ¨μ
· νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€νμ λ¨μ
· μ€λ λλ νλ‘μΈμ€ λ΄μμ κ°κ° Stackλ§ λ°λ‘ ν λΉλ°κ³ Code, Data, Heap μμμ 곡μ νλ€.
π Process μ Thread μ μλ λ°©μ
νλ‘μΈμ€λ κ°κ° λ 립λ μμ(Code, Data, Stack, Heapμ ꡬ쑰)λ₯Ό ν λΉλ°λλ€.
1οΈβ£ Code
μ€νν νλ‘κ·Έλ¨μ μ½λ λ° λ§€ν¬λ‘ μμκ° κΈ°κ³μ΄ ννλ‘ μ μ₯λλ 곡κ°.
CPUλ μ½λμμμ μ μ₯λ λͺ λ Ήμ΄λ₯Ό νλμ© μ²λ¦¬νλ€.
2οΈβ£ Data
μ½λμμ μ μΈν μ μλ³μ, μ μ (Static) λ³μκ° μ μ₯λλ 곡κ°
3οΈβ£ Stack
μ€νλλ ν¨μ μμμ μ μΈλ μ§μλ³μ, λ§€κ°λ³μ, λ¦¬ν΄ κ° λ±μ΄ μ μ₯λκ³ ν¨μ νΈμΆ μ κΈ°λ‘λλ 곡κ°
4οΈβ£ Heap
κ΄λ¦¬κ° κ°λ₯ν λ°μ΄ν° μ΄μΈμ λ€λ₯Έ ννμ λ°μ΄ν°λ₯Ό κ΄λ¦¬νκΈ° μν 곡κ°(Free Space)
μ΄ κ³΅κ°μ λμ λ©λͺ¨λ¦¬ ν λΉ κ³΅κ°μ΄λ―λ‘ μ¬μ©μ΄ λλλ©΄ μ΄μ체μ λ‘ λ°λ©λλ€.
π©π»π» νλ‘μΈμ€κ° ν λΉ λ°μ λ©λͺ¨λ¦¬ μμ λ΄μμ Stack νμμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμ λ°λ‘ ν λΉλ°κ³ , λλ¨Έμ§ Code/Data/Heap νμμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμ 곡μ νλ€. λ°λΌμ κ°κ°μ μ€λ λλ λ³λμ Stackμ κ°μ§κ³ μμ§λ§ Heap λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μκ² λλ€.
μλ μ΄λ―Έμ§λ μ€λ λλ€μ΄ νλ‘μΈμ€μ Code/Data/Heap λ©λͺ¨λ¦¬ μμμ 곡μ νλ λͺ¨μ΅μ΄λ€
π κ²°λ‘
· νλ‘μΈμ€λ μ΄μ체μ λ‘λΆν° μμμ ν λΉλ°μ μ€ννκ³ , μ€λ λλ νλ‘μΈμ€λ‘λΆν° μμμ ν λΉλ°μ μ€ννλ€.
· νλμ νλ‘μΈμ€ μμ μ¬λ¬ μ€λ λ μμ±μ΄ κ°λ₯νλ©°, κ° μ€λ λλ κ°λ³ μ€νμ κ°μ§κ³ νλ‘μΈμ€μ μ μ λ©λͺ¨λ¦¬ 곡κ°μ 곡μ νλ©° νλ‘κ·Έλ¨μ μ€ννλ€.
References
· https://www.jiniaslog.co.kr/article/view?articleId=152
· https://velog.io/@raejoonee/νλ‘μΈμ€μ-μ€λ λμ-μ°¨μ΄
· https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html