νλ‘κ·Έλ¨ : νμΌμ΄ μ μ₯ μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μ μ μΈ μν
νλ‘μΈμ€ : λ©λͺ¨λ¦¬ μμμ μ€νμ€μΈ νλ‘κ·Έλ¨μ μΈμ€ν΄μ€(κ°μ²΄), μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λ μμ μ λ¨μ
λ¨Όμ νλ‘μΈμ€μ μ€λ λμ μ€λͺ
νκΈ° μ μ νλ‘κ·Έλ¨μ λν΄ λ¨Όμ μμμΌ ν©λλ€.
μ½κ² λ§ν΄ νλ‘κ·Έλ¨μ μ΄λ€ μμ
μ μ€νν μ μλ νμΌ
μ΄μ κ·Έλ₯ μ½λ λ©μ΄λ¦¬
μ
λλ€.
νλ‘κ·Έλ¨μ΄ μ€ννκ² λλ©΄, ν΄λΉ νμΌμ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λκ³ , μ΄ μνλ₯Ό λμ μΈ μνλΌκ³ ν©λλ€.
μ΄ μνμ νλ‘κ·Έλ¨μ νλ‘μΈμ€
λΌκ³ ν©λλ€.
μμ½ : νλ‘κ·Έλ¨(μ½λ λ©μ΄λ¦¬ νμΌ) -> (μ€ν) -> νλ‘μΈμ€
μ΄ λ΄μ©μ μ½κ² κ·Έλ¦ΌμΌλ‘ νννλ©΄ λ€μκ³Ό κ°μ΅λλ€.
-
- CPU μκ°
- μ΄μλκΈ° μν΄ νμν μ£Όμ 곡κ°
- Code, Data, Stack, Heapμ κ΅¬μ‘°λ‘ λμ΄ μλ λ 립λ λ©λͺ¨λ¦¬ μμ
- νλ‘μΈμ€λ κ°κ° λ
립λ λ©λͺ¨λ¦¬ μμ (Code, Data, Stack, Heapμ ꡬ쑰)λ₯Ό ν λΉλ°μ΅λλ€.
- κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€λΉ μ΅μ 1κ°μ μ€λ λ(λ©μΈ μ€λ λ)λ₯Ό κ°μ§κ³ μμ΅λλ€.
- κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μ μ€νλλ©°, ν νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£κ΅¬μ‘°μ μ κ·Ό λΆκ°ν©λλ€.
- ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμμ μ κ·Όνλ €λ©΄ νλ‘μΈμ€κ°μ ν΅μ (IPC, inter-process Communication)μ μ¬μ©ν΄μΌ ν©λλ€.
- Ex) νμ΄ν, νμΌ, μμΌ λ±μ μ΄μ©ν ν΅μ λ°©λ² μ΄μ©
μ€λ λ : νλ‘μΈμ€ μμμ μ€νλλ νλ¦ λ¨μ, νλ‘μΈμ€μ νΉμ ν μν κ²½λ‘
κ³Όκ±°μλ νλ‘κ·Έλ¨ μ€νμμλΆν° μ’ λ£κΉμ§ νλ‘μΈμ€ νλλ§ μ¬μ©νμ¬ μ§ννμμ΅λλ€. νμ§λ§ μκ°μ΄ νλ₯΄λ©΄μ νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§λ©΄μ νλ‘μΈμ€ νλλ§μ μ¬μ©νμ¬ νλ‘κ·Έλ¨μ μ€ννκΈ° λ² μ°¨κ² λμμ΅λλ€.
μ΄ μν©μ ν΄κ²°νκΈ° μν΄ "νλ‘μΈμ€λ₯Ό μ¬λ¬κ° λ§λ€λ©΄ λμ§ μμκΉ"λΌλ μκ°μ νμμ§λ§, μ΄μ체μ λ μμ μ±μ μν΄ νλ‘μΈμ€λ§λ€ μμ μκ² ν λΉλ λ©λͺ¨λ¦¬ λ΄μ μ λ³΄λ§ μ κ·Όν μ μλλ‘ μ μ½μ λμκΈ°μ λΆκ°λ₯ νμ΅λλ€.
κ·Έλ κ² νλ‘μΈμ€μ λ€λ₯Έ λ μμ μ€ν λ¨μ κ°λ
μ΄ νμνκ² λμκ³ , μ΄ κ°λ
μ΄ μ€λ λ
μ
λλ€.
- μ€λ λλ νλ‘μΈμ€ λ΄μμ κ°κ° Stackλ§ λ°λ‘ ν λΉλ°κ³ Code, Data, Heap μμμ 곡μ ν©λλ€.
- μ€λ λλ ν νλ‘μΈμ€ λ΄μμ λμλλ μ¬λ¬ μ€νμ νλ¦μΌλ‘, νλ‘μΈμ€ λ΄μ μ£Όμ 곡κ°μ΄λ μμλ€(ν κ³΅κ° λ±)μ κ°μ νλ‘μΈμ€ λ΄μ μ€λ λλΌλ¦¬ 곡μ νλ©΄μ μ€νλ©λλ€.
- κ°μ νλ‘μΈμ€ μμ μλ μ¬λ¬ μ€λ λλ€μ κ°μ ν 곡κ°μ 곡μ ν©λλ€. λ°λ©΄μ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όν μ μμ΅λλ€.
- κ°κ°μ μ€λ λλ λ³λμ λ μ§μ€ν°μ μ€νμ κ°κ³ μμ§λ§, ν λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μμ΅λλ€.
- ν μ€λ λκ° νλ‘μΈμ€ μμμ λ³κ²½νλ©΄, λ€λ₯Έ μ΄μ μ€λ λλ κ·Έ λ³κ²½ κ²°κ³Όλ₯Ό μ¦μ λ³Ό μ μμ΅λλ€.
νλμ νλ‘κ·Έλ¨μ μ¬λ¬κ°μ νλ‘μΈμ€λ‘ ꡬμ±νμ¬ κ° νλ‘μΈμ€κ° λ³λ ¬μ μΌλ‘ μμ μ μννλ κ²
μ₯μ
- μμ μ± (λ©λͺ¨λ¦¬ μΉ¨λ² λ¬Έμ λ₯Ό OS μ°¨μμμ ν΄κ²°)
λ¨μ
- κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμμ κ°μ§κ³ μμ΄, μμ λμ΄ λ§μ μλ‘ μ€λ²ν€λ λ°μ
- Context SwitchingμΌλ‘ μΈν μ±λ₯ μ ν
Context Switching
νλ‘μΈμ€μ μν μ 보λ₯Ό μ μ₯νκ³ λ³΅μνλ μΌλ ¨μ κ³Όμ
μ¦, λμ μ€μΈ νλ‘μΈμ€κ° λκΈ°νλ©΄μ ν΄λΉ νλ‘μΈμ€μ μνλ₯Ό 보κ΄νκ³ , λκΈ°νκ³ μλ λ€μ μλ²μ νλ‘μΈμ€κ° λμνλ©΄μ μ΄μ μ 보κ΄νλ νλ‘μΈμ€ μνλ₯Ό 볡ꡬνλ κ³Όμ μ λ§ν©λλ€.
-> νλ‘μΈμ€λ κ° λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉλ°μ μ¬μ©λλ―λ‘, μΊμ λ©λͺ¨λ¦¬ μ΄κΈ°νμ κ°μ λ¬΄κ±°μ΄ μμ μ΄ μ§νλμμ λ μ€λ²ν€λκ° λ°μν λ¬Έμ κ° μ‘΄μ¬ν©λλ€.
νλμ μμ© νλ‘κ·Έλ¨μμ μ¬λ¬ μ€λ λλ₯Ό ꡬμ±ν΄ κ° μ€λ λκ° νλμ μμ μ μ²λ¦¬νλ κ²
μ€λ λλ€μ΄ 곡μ λ©λͺ¨λ¦¬λ₯Ό ν΅ν΄ λ€μμ μμ μ λμμ μ²λ¦¬νλλ‘ ν΄μ€λλ€.
μ₯μ
- λ 립μ μΈ νλ‘μΈμ€μ λΉν΄ 곡μ λ©λͺ¨λ¦¬λ§νΌμ μκ°, μμ μμ€μ΄ κ°μ
- μ μ λ³μμ μ μ λ³μμ λν μλ£ κ³΅μ κ°λ₯
λ¨μ
- μμ μ± λ¬Έμ
- νλμ μ€λ λκ° λ°μ΄ν° 곡κ°μ 무λλ리면, λͺ¨λ μ€λ λκ° μλ λΆλ₯ μνμ λΉ μ§λλ€.(곡μ λ©λͺ¨λ¦¬λ₯Ό κ°κΈ° λλ¬Έ)
-> λ©ν° μ€λ λμ μμ μ±μ λν λ¨μ μ Critical Section κΈ°λ²μ ν΅ν΄ λλΉν©λλ€.
νλμ μ€λ λκ° κ³΅μ λ°μ΄ν° κ°μ λ³κ²½νλ μμ μ λ€λ₯Έ μ€λ λκ° κ·Έ κ°μ μ½μΌλ €ν λ λ°μνλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λκΈ°ν κ³Όμ
μνΈ λ°°μ , μ§ν, νμ λ λκΈ°λ₯Ό μΆ©μ‘±ν΄μΌν©λλ€.
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4