Program : μ΄λ€ μμ μ μν΄ μ€νν μ μλ νμΌ
Process : μ΄μ체μ λ‘λΆν° μμμ ν λΉλ°μ μμ μ λ¨μ
Thread : νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€ν νλ¦μ λ¨μ
νλ‘κ·Έλ¨μ΄λ νμΌμ΄ μ μ₯μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μ μ μΈ μν
νλ‘μΈμ€ Process
- λ©λͺ¨λ¦¬μ μ¬λΌμ μ€νλκ³ μλ νλ‘κ·Έλ¨μ μΈμ€ν΄μ€ ( λ 립μ μΈ κ°μ²΄ )
- μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λ μμ μ λ¨μ
- μ¦, λμ μΈ κ°λ μΌλ‘λ μ€νλ νλ‘κ·Έλ¨μ μλ―Ένλ€
- νλ‘μΈμ€λ κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμ(Code, Data, Stack, Heapμ ꡬ쑰)μ ν λΉλ°λλ€.
- κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€λΉ μ΅μ 1κ°μ μ€λ λ(λ©μΈ μ€λ λ)λ₯Ό κ°μ§κ³ μλ€.
- κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μμ μ€νλλ©°, ν νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£κ΅¬μ‘°μ μ κ·Όν μ μλ€.
- ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμμ μ κ·Όνλ €λ©΄ νλ‘μΈμ€ κ°μ ν΅μ (IPC, inter-process communication)μ μ¬μ©ν΄μΌ νλ€. ( Ex. νμ΄ν, νμΌ, μμΌ λ±μ μ΄μ©ν ν΅μ λ°©λ² μ΄μ© )
μ€λ λ Thread
νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§κ³ νλ‘μΈμ€ νλλ§μ μ¬μ©ν΄μ νλ‘κ·Έλ¨μ μ€ννκΈ°μλ λ² μ°¨λ€.
ν νλ‘κ·Έλ¨μ μ²λ¦¬νκΈ° μν΄ νλ‘μΈμ€λ₯Ό μ¬λ¬κ° λ§λλ κ²μ μμ μ±μ μν΄ μμ μκ² ν λΉλ λ©λͺ¨λ¦¬ λ΄μ μ λ³΄λ§ μ κ·Όνλλ‘ μ λνλ μ μ½λλ¬Έμ λΆκ°λ₯νλ€.
λ°λΌμ νλ‘μΈμ€λ³΄λ€ λ μμ μ€ν λ¨μμ κ°λ μ΄ λ±μ₯νλ€.
- νλ‘μΈμ€μ μ€ν λ¨μ
- νλ‘μΈμ€μ νΉμ ν μν κ²½λ‘
- νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€νμ λ¨μ
- μ€λ λλ νλ‘μΈμ€ λ΄μμ κ°κ° Stackλ§ λ°λ‘ ν λΉλ°κ³ Code, Data, Heap μμμ 곡μ νλ€.
- μ€λ λλ ν νλ‘μΈμ€ λ΄μμ λμλλ μ¬λ¬ μ€νμ νλ¦μΌλ‘, νλ‘μΈμ€ λ΄μ μ£Όμ 곡κ°μ΄λ μμλ€(ν κ³΅κ° λ±)μ κ°μ νλ‘μΈμ€ λ΄μ μ€λ λλΌλ¦¬ 곡μ νλ©΄μ μ€νλλ€.
- κ°μ νλ‘μΈμ€ μμ μλ μ¬λ¬ μ€λ λλ€μ κ°μ ν 곡κ°μ 곡μ νλ€. λ°λ©΄μ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όν μ μλ€.
- κ°κ°μ μ€λ λλ λ³λμ λ μ§μ€ν°μ μ€νμ κ°κ³ μμ§λ§, ν λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μλ€.
- ν μ€λ λκ° νλ‘μΈμ€ μμμ λ³κ²½νλ©΄, λ€λ₯Έ μ΄μ μ€λ λ(sibling thread)λ κ·Έ λ³κ²½ κ²°κ³Όλ₯Ό μ¦μ λ³Ό μ μλ€.
νλ‘μΈμ€μ μ€λ λμ μλλ°©μ μ°¨μ΄
νλ‘μΈμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λλ€κ³ μΈκΈνμλ€. μ΄ λ μ΄μ체μ λ νλ‘μΈμ€λ§λ€ κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμμ, Code/Data/Stack/Heapμ νμμΌλ‘ ν λΉν΄ μ€λ€. κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉν΄ μ£ΌκΈ° λλ¬Έμ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£μ μ κ·Όν μ μλ€.
μ΄μ λ€λ₯΄κ² μ€λ λλ λ©λͺ¨λ¦¬λ₯Ό μλ‘ κ³΅μ ν μ μλ€κ³ μΈκΈνμλ€. μ΄μ λν΄ λ μμΈν μ€λͺ νμλ©΄, νλ‘μΈμ€κ° ν λΉλ°μ λ©λͺ¨λ¦¬ μμ λ΄μμ Stack νμμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμ λ°λ‘ ν λΉλ°κ³ , λλ¨Έμ§ Code/Data/Heap νμμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμ 곡μ νλ€. λ°λΌμ κ°κ°μ μ€λ λλ λ³λμ μ€νμ κ°μ§κ³ μμ§λ§ ν λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μκ² λλ€.
μ¬κΈ°μ νλ‘μΈμ€μ μ€λ λμ μ€μν μ°¨μ΄λ₯Ό νλ λ μ μ μκ² λλ€. λ§μ½ ν νλ‘μΈμ€λ₯Ό μ€ννλ€κ° μ€λ₯κ° λ°μν΄μ νλ‘μΈμ€κ° κ°μ λ‘ μ’ λ£λλ€λ©΄, λ€λ₯Έ νλ‘μΈμ€μκ² μ΄λ€ μν₯μ΄ μμκΉ? 곡μ νκ³ μλ νμΌμ μμμν€λ κ²½μ°κ° μλλΌλ©΄ μλ¬΄λ° μν₯μ μ£Όμ§ μλλ€.
κ·Έλ°λ° μ€λ λμ κ²½μ°λ λ€λ₯΄λ€. μ€λ λλ Code/Data/Heap λ©λͺ¨λ¦¬ μμμ λ΄μ©μ 곡μ νκΈ° λλ¬Έμ μ΄λ€ μ€λ λ νλμμ μ€λ₯κ° λ°μνλ€λ©΄ κ°μ νλ‘μΈμ€ λ΄μ λ€λ₯Έ μ€λ λ λͺ¨λκ° κ°μ λ‘ μ’ λ£λλ€.
μ μ΄λ° λ°©μμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό 곡μ ν κΉ?
μ€λ λλ "νλ¦μ λ¨μ"λΌκ³ λ§νλλ°, μ ννλ CPU μ μ₯μμμ μ΅μ μμ λ¨μκ° λλ€. CPUλ μμ μ μ²λ¦¬ν λ μ€λ λλ₯Ό μ΅μ λ¨μλ‘ μΌκ³ μμ μ νλ€. λ°λ©΄ μ΄μ체μ λ μ΄λ κ² μμ λ¨μκΉμ§ μ§μ μμ νμ§ μκΈ° λλ¬Έμ μ΄μ체μ κ΄μ μμλ νλ‘μΈμ€κ° μ΅μ μμ λ¨μκ° λλ€.
μ¬κΈ°μ μ€μν μ μ νλμ νλ‘μΈμ€λ νλ μ΄μμ μ€λ λλ₯Ό κ°μ§λ€λ μ μ΄λ€. λ°λΌμ μ΄μ체μ κ΄μ μμλ νλ‘μΈμ€κ° μ΅μ μμ λ¨μμΈλ°, μ΄ λλ¬Έμ κ°μ νλ‘μΈμ€ μμμ μ€λ λλΌλ¦¬ λ©λͺ¨λ¦¬λ₯Ό 곡μ νμ§ μμ μ μλ€.
Reference.
'π₯ > OS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ΄μ체μ ] μΈν°λ½νΈ Interrupt (0) | 2021.08.25 |
---|---|
[μ΄μ체μ ] νλ‘μΈμ€ μ£Όμ κ³΅κ° (0) | 2021.08.25 |
[μ΄μ체μ ] CPU μ€μΌμ€λ¬ (0) | 2021.08.11 |
[μ΄μ체μ ] μ€μΌμ€λ¬μ μ’ λ₯ : μ₯κΈ°, μ€κΈ°, λ¨κΈ° (0) | 2021.08.04 |
[μ΄μ체μ ] PCBμ Context Switching (0) | 2021.08.04 |