π Process && Thread
μ»΄ν¨ν° κ΄λ ¨ μ 곡νμλ€μ΄λ©΄ λ€λ€ νλ²μ©μ λ€μ΄λ΄€μκ±°λ€. μ°μ μ μλ₯Ό λ¨Όμ νλ² λ³΄μ.
νλ‘μΈμ€(Process) : μ΄μ체μ λ‘λΆν° μμμ ν λΉλ°μ μμ μ λ¨μ
μ€λ λ(Thread) : νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€ν νλ¦μ λ¨μ
μ΄ν΄νκΈ° μ½κ² λΉμ λ₯Ό λ€μ΄λ³΄μ.
νλ‘μΈμ€λ λ§₯λλ λ κ°κ²(λ
립λ μλ 곡κ°)
μ€λ λλ λ§₯λλ λμ μ§μλ€(μ¬κ³ , κ³μ°λ, κ³΅κ° κ³΅μ )
μ μμ λΉμ λ μ΄ μ λλ‘ μ 리νκ³ ,
μ΄μ μ€μ λ‘ λ¬΄μμ΄ λ€λ₯΄κ³ μ λ¬Έμ κ° λ°μνλμ§ κ΅¬μ‘°μ μΌλ‘ μ΄ν΄λ³΄μ.
νλ‘κ·Έλ¨
νλ‘μΈμ€μ μ€λ λμ λν΄ μμΈν μ€λͺ
μ νκΈ° μν΄μλ λ¨Όμ νλ‘κ·Έλ¨μ λν΄ μμμΌνλ€.
νλ‘κ·Έλ¨μ λͺ¨λ₯΄λ μ¬λμ΄ μ΄λ¨μ΄,,ν μ μμ§λ§ λ§μ νλ‘κ·Έλ¨μ λν΄ μ€λͺ
ν΄λ΄λΌ νλ©΄ μ λλ‘ λ΅νλ μ¬λμ΄ κ±°μ μμκ±°λ€.
μ°μ νλ‘κ·Έλ¨μ μ μμ νμΌμ΄ μ μ₯ μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μ μ μΈ μνλ₯Ό λ§νλ€.
μ΄μ체μ κ° λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄ μ€μΌ νλ‘κ·Έλ¨μ΄ μ€νλλλ°, μμ§ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄ μ£Όμ§ μμμ λ©λͺ¨λ¦¬μ μ¬λΌκ° μμ§ μλ€ νλ κ±°λ€. λ κ·Έλ κΈ°μ μ€νλμ§ μμμ μ μ (static)μΈ μνκ° λλ κ±°κ³ ..
λ²μ¨ μ΄λ ΅λ€. μ½κ² μ€λͺ
νλ©΄ μκΉ νλ‘μΈμ€κ° κ°κ²λΌκ³ νκ³ μ€λ λκ° μ§μλ€μ΄λΌ νμΌλ©΄ νλ‘κ·Έλ¨μ κ·Έ κ°κ²μ μ€κ³λλΌκ³ μκ°νλ©΄ λλ€.
κ²°λ‘ μ νλ‘κ·Έλ¨μ μμ§ μ€νλμ§ μμ (μ€κ³λλκΉ μμ§ λ§λ€μ§ μμ) μνμΈκ±°λ€.
μ°λ¦¬κ° μ°λ μλμ°μ *.exe νμΌμ΄λ λ§₯μ *.dmg νμΌμ²λΌ μ¬μ©μκ° λλ¬ μ€ννκΈ° μ μ νμΌμ λ§νλ€. μ½λ λ©μ΄λ¦¬λΌκ³ μκ°νλ©΄ νΈνλ€.
νλ‘μΈμ€
κ·ΈλΌ μ μ μΈ νλ‘κ·Έλ¨μ μ€νμμΌ λμ μΈ μν, μ¦ μμ
μ€μΈ μνλ‘ λ§λ€λ©΄ λλΌν κΉ?
μ΄λ¬ν μνμ νλ‘κ·Έλ¨μ λ°λ‘ νλ‘μΈμ€λΌκ³ νλ€.

μ μ¬μ§μ²λΌ μμ
κ΄λ¦¬μλ₯Ό μ΄μ΄λ³΄λ©΄ μ§κΈ μ€νμ€μΈ νλ‘μΈμ€λ€μ λ³Ό μ μλ€.
λͺ¨λ νλ‘κ·Έλ¨λ€μ μ΄μ체μ κ° λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μΌ μ€νλ μ μλλ°, νλ‘κ·Έλ¨μ΄ μ€ννκ² λλ©΄ νμΌμ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λκ³ , μ΄μ체μ λ‘λΆν° μμ€ν
μμ(CPU)μ ν λΉλ°μ νλ‘κ·Έλ¨ μ½λλ₯Ό μ€νμμΌ μλΉμ€λ₯Ό μ΄μ©ν μ μκ² λλκ±°λ€.
μ½κ² μ€λͺ
νλ©΄ νλ‘κ·Έλ¨μ κ°κ²μ μ€κ³λμΈλ°, μ€νμ νλ μκ° μ΄μ체μ κ° κ°κ²λ₯Ό νλ μ΄μ΄μ£Όλ κ±°λ€. λ©λͺ¨λ¦¬ μμ 곡κ°μ λ΄μ΄μ£Όκ³ μ½λ, λ³μ, ν¨μλ€μ κ·Έ 곡κ°μ λ°°μΉνλ€. μ΄κ² λ°λ‘ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ€λ λ§μ΄λ€.
λκ°μ μ ν리μΌμ΄μ
μ μ€ννλ©΄ νλ‘μΈμ€(λμ ), μ€ννμ§ μμΌλ©΄ νλ‘κ·Έλ¨(μ μ )μΈκ±°λ€.
μ€λ λ
μ€λ λλ νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€ν νλ¦μ λ¨μλ€.
κ³Όκ±°μλ νλμ νλ‘μΈμ€κ° νλμ μμ
μ μ²μλΆν° λκΉμ§ μ²λ¦¬νλ λ°©μμ΄ μΌλ°μ μ΄μλ€.
νμ§λ§ νλ‘κ·Έλ¨μ΄ μ μ 볡μ‘ν΄μ§λ©΄μ ν λ²μ μ¬λ¬ μμ
μ λμμ μ²λ¦¬ν΄μΌ νλ μν©μ΄ μκ²Όλ€.
μλ₯Ό λ€μ΄, νλ©΄μ λ λλ§νλ©΄μ μ¬μ©μ μ
λ ₯μ λ°κ³ λ€νΈμν¬ ν΅μ μ μ²λ¦¬ν΄μΌ νλ€.
νλμ μ€ν νλ¦μΌλ‘ μ΄ λͺ¨λ μΌμ μ²λ¦¬νλ©΄ μ€κ°μ λκΈ° μκ°μ΄ λ°μνκ³ , νλ‘κ·Έλ¨μ λ©μΆ κ²μ²λΌ 보μ΄κ² λλ€.
μ΄μ체μ λ νλ‘μΈμ€λ§λ€ λ
립λ λ©λͺ¨λ¦¬ 곡κ°μ λΆμ¬νλλ°,
μ΄ λλΆμ μμ μ±μ ν보λμ§λ§ νλ‘μΈμ€λ₯Ό μ¬λ¬ κ° μμ±νλ©΄ λ©λͺ¨λ¦¬μ μμ μ¬μ© λΉμ©μ΄ 컀μ§λ€.
κ·Έλμ λ±μ₯ν κ°λ
μ΄ λ°λ‘ μ€λ λλ€.
μ€λ λλ νλμ νλ‘μΈμ€ μμμ μμμ 곡μ νλ©΄μ λμμ μ¬λ¬ μμ
μ μνν μ μκ² ν΄μ€λ€.
μλ₯Ό λ€μ΄ λ§₯λλ λ κ°κ²λ₯Ό μκ°ν΄λ³΄μ.
μλμ΄ λ€μ΄μ€λ©΄ μ£Όλ¬Έμ λ°κ³ , νλ²κ±°λ₯Ό λ§λ€κ³ , κ³μ°μ νκ³ , μμμ μ λ¬ν΄μΌ νλ€.
λ§μ½ μ§μμ΄ ν λͺ
λΏμ΄λΌλ©΄ μ΄λ»κ² λ κΉ?
첫 λ²μ§Έ μλμ μ£Όλ¬Έμ λ°κ³
νλ²κ±°λ₯Ό λ§λ€κ³
κ°μνκΉμ νκΈ°κ³
κ³μ°κΉμ§ λλΈ λ€μμμΌ
λ€μ μλμ μ£Όλ¬Έμ λ°μ μ μλ€.
μ΄λ κ² λλ©΄ κ°κ²λ κΈλ°© μ€μ΄ κΈΈμ΄μ§κ³ μλλ€μ κΈ°λ€λ¦¬κ² λλ€.
νμ§λ§ μ§μμ΄ μ¬λ¬ λͺ
μ΄λΌλ©΄ μν©μ΄ λ¬λΌμ§λ€.
κ°μ κ°κ² μμμ μ¬λ¬ μμ
μ΄ λμμ μ§νλκΈ° λλ¬Έμ ν¨μ¬ λΉ λ₯΄κ² μΌμ μ²λ¦¬ν μ μκΈ°λλ¬Έμ΄λ€.
μ¦, νλ‘μΈμ€κ° νλ‘κ·Έλ¨μ μ€ν νκ²½μ΄λΌλ©΄ μ€λ λλ κ·Έ μμμ μ€μ λ‘ μΌμ μννλ μ€ν νλ¦μ΄λ€.
νλ‘μΈμ€μ μμ ꡬ쑰
μ§κΈκΉμ§ νλ‘μΈμ€μ μ€λ λμ κ°λ
μ λν΄ μμ보μλ€.
κ·Έλ λ€λ©΄ μ¬κΈ°μ ν κ°μ§ μ§λ¬Έμ΄ μκΈ΄λ€.
νλ‘μΈμ€κ° μ΄μ체μ λ‘λΆν° ν λΉλ°λ μμμ ꡬ체μ μΌλ‘ 무μμΌκΉ?
νλ‘μΈμ€λ λ¨μν βμ€ν μ€μΈ νλ‘κ·Έλ¨βμ΄λΌλ κ°λ
μ κ·ΈμΉμ§ μλλ€.
μ€μ λ‘λ μ΄μ체μ λ‘λΆν° λ©λͺ¨λ¦¬ 곡κ°μ ν λΉλ°μ κ·Έ μμμ μ½λμ λ°μ΄ν°λ₯Ό μ€ννλ€.
μ¦, νλ‘μΈμ€λ μμ λ§μ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°μ§κ³ λμνλ€.
μλμ μ¬μ§μ νλμ νλ‘μΈμ€κ° λ©λͺ¨λ¦¬λ₯Ό μ΄λ»κ² μ¬μ©νκ³ μλμ§ λ³΄μ¬μ£Όλ ꡬ쑰μ΄λ€.

- μ½λ μμ(Code / Text)
- νλ‘κ·Έλλ¨Έκ° μμ±ν νλ‘κ·Έλ¨ ν¨μλ€μ μ½λκ° CPUκ° ν΄μ κ°λ₯ν κΈ°κ³μ΄ ννλ‘ μ μ₯
- λ°μ΄ν° μμ(Data)
- μ½λκ° μ€νλλ©΄μ μ¬μ©νλ μ μ λ³μλ κ°μ’ λ°μ΄ν°λ€μ λͺ¨μ
- μ€ν μμ(Stack)
- μ§μ λ³μ κ°μ νΈμΆν ν¨μκ° μ’ λ£λλ©΄ λμμ¬ μμ μλ£λ₯Ό μ μ₯νλ λ 립μ 곡κ°. ν¨μμ νΈμΆκ³Ό ν¨κ» ν λΉλλ©°, νΈμΆμ΄ μλ£λλ©΄ μλ©Έ
- μ€ν μμ μ΄κ³Ό μ stack overflow λ°μ
- ν μμ
- μμ±μ, μΈμ€ν΄μ€μ κ°μ λμ μΌλ‘ ν λΉλλ λ°μ΄ν°λ€μ μν΄ μ‘΄μ¬νλ 곡κ°
- μ¬μ©μμ μν΄ λ©λͺ¨λ¦¬ 곡κ°μ΄ λμ μΌλ‘ ν λΉ, ν΄μ
μ μ¬μ§μμ μ€νκ³Ό ν μμμ μμλλ‘ νμ΄νλ μ€ν μμκ³Ό ν μμμ νλ‘μΈμ€κ° μ€νλλ λμ ν¬κΈ°κ° λμ΄λ¬λ€ μ€μ΄λ€κΈ°λ νλ λμ μμμ ννν κ²μ΄λ€.
κ·ΈλΌ νμ΄νκ° μλ μ½λμ λ°μ΄ν° μμμ? μ μΈν λ κ·Έ ν¬κΈ°κ° κ²°μ λλ μ μ μμμ΄λ€.
μ¦ νλμ νλ‘μΈμ€λ μ΄λ° λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°μ§λ©° μ€νλλ€.
κ·Έλ λ€λ©΄ μ€λ λλ μ΄ λ©λͺ¨λ¦¬ ꡬ쑰μμ μ΄λ€ μμμ 곡μ νκ³ μ΄λ€ μμμ λ
립μ μΌλ‘ μ¬μ©ν κΉ?
μ€λ λμ μμ ꡬ쑰
νλμ νλ‘μΈμ€ μμμ μ€νλλ μ¬λ¬ μ€λ λλ μ΄ μμμ μ΄λ»κ² μ¬μ©ν κΉ?

μ€λ λλ κ°μ νλ‘μΈμ€ μμμ λμνκΈ° λλ¬Έμ λλΆλΆμ μμμ 곡μ νλ€.
νλ‘μΈμ€μ 4κ°μ§ λ©λͺ¨λ¦¬ μμ μ€ Code, Data, Heapμ νλ‘μΈμ€μ μν λͺ¨λ μ€λ λκ° ν¨κ» μ¬μ©νλ€.
μ΄ μμλ€μ νλ‘μΈμ€ λ¨μλ‘ ν λΉλλ μμμ΄κΈ° λλ¬Έμ μ€λ λλ§λ€ λ°λ‘ μ‘΄μ¬νμ§ μλλ€.
μ¦ νλμ μ€λ λκ° ν μμμ μμ±ν κ°μ²΄λ λ°μ΄ν°λ₯Ό λ€λ₯Έ μ€λ λκ° κ°μ Έμ μ½κ±°λ μμ ν μ μλ€.
νμ§λ§ μ€λ λλ κ°κ° λ
립μ μΈ μ€ν νλ¦μ κ°μ§κΈ° λλ¬Έμ Stack μμμ μ€λ λλ§λ€ λ³λλ‘ ν λΉλλ€.
μ€νμλ ν¨μ νΈμΆ μ 보, μ§μ λ³μ, μ€ν νλ¦ μ 보 λ±μ΄ μ μ₯λλλ° λ§μ½ μ¬λ¬ μ€λ λκ° νλμ μ€νμ 곡μ νκ² λλ©΄ μ€ν νλ¦μ΄ μλ‘ μμ¬ νλ‘κ·Έλ¨μ΄ μ μμ μΌλ‘ λμν μ μκΈ° λλ¬Έμ΄λ€.
νμ§λ§ μ΄λ¬ν ꡬ쑰λ μ₯μ λ§ μλ κ²μ μλλ€.
μ€λ λκ° λλΆλΆμ λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ€λ κ²μ μ±λ₯ λ©΄μμλ μ 리νμ§λ§ μμ μ± λ©΄μμλ μ·¨μ½ν μ μλ€.
μ¬κΈ°μ νλ‘μΈμ€μ μ€λ λμ μ€μν μ°¨μ΄λ₯Ό νλ λ μ μ μλ€.
λ§μ½ μ΄λ€ νλ‘μΈμ€ νλμμ μ€λ₯κ° λ°μνμ¬ κ°μ λ‘ μ’
λ£λλ€λ©΄ λ€λ₯Έ νλ‘μΈμ€μλ μ΄λ€ μν₯μ΄ μμκΉ?
곡μ νκ³ μλ νμΌμ μμμν€λ κ²½μ°κ° μλλΌλ©΄ λ³΄ν΅ λ€λ₯Έ νλ‘μΈμ€μλ μν₯μ μ£Όμ§ μλλ€.
νλ‘μΈμ€λ κ°κ° λ
립λ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νκΈ° λλ¬Έμ΄λ€.
κΈ°λ³Έμ μΌλ‘ κ° νλ‘μΈμ€λ λ©λͺ¨λ¦¬ μμμ μλ‘ λ€λ₯Έ μ£Όμ 곡κ°(Address Space)μμ μ€νλλ€.
λ°λΌμ ν νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£κ΅¬μ‘°μ μ§μ μ κ·Όν μ μλ€.
νμ§λ§ μ€λ λλ μν©μ΄ λ€λ₯΄λ€.
μ€λ λλ κ°μ νλ‘μΈμ€ μμμ Code, Data, Heap μμμ 곡μ νλ€.
κ·Έλμ νλμ μ€λ λμμ μΉλͺ
μ μΈ μ€λ₯κ° λ°μνλ©΄ κ°μ νλ‘μΈμ€μ μν λ€λ₯Έ μ€λ λλ€ μμ ν¨κ» μ’
λ£λλ€.
μ½λ©μ νλ€ λ³΄λ©΄ Segmentation Fault κ°μ μ€λ₯λ‘ νλ‘κ·Έλ¨ μ μ²΄κ° μ’
λ£λλ κ²½νμ ν΄λ³Έ μ μ΄ μμ κ²μ΄λ€.
μ΄λ νλμ μ€ν νλ¦μμ λ°μν μ€λ₯κ° νλ‘μΈμ€ μ 체μ μν₯μ μ£ΌκΈ° λλ¬Έμ΄λ€.
νλ‘μΈμ€λ₯Ό νλμ νλ‘κ·Έλ¨μ΄λΌκ³ 보면, μ€λ λλ κ·Έ μμμ μ€νλλ κ°κ°μ ν¨μ νλ¦κ³Ό λΉμ·ν μν μ νλ€.
λ°λΌμ νλμ μ€ν νλ¦μμ μΉλͺ
μ μΈ μ€λ₯κ° λ°μνλ©΄ κ°μ νλ‘μΈμ€ μμμ λμνλ λͺ¨λ μ€ν νλ¦μ΄ ν¨κ» μ€λ¨λλ κ²μ΄λ€.
νλ‘μΈμ€μ μμ 곡μ
μ§κΈκΉμ§ μ€λͺ
μ 보면 ν κ°μ§ μλ¬Έμ΄ μκΈΈ μ μλ€.
νλ‘μΈμ€λ μλ‘ λ
립λ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ€κ³ νλλ°
κ·Έλ λ€λ©΄ νλ‘μΈμ€λΌλ¦¬λ μ λ§ μ무 μμλ 곡μ ν μ μλ κ²μΌκΉ?
κΈ°λ³Έμ μΌλ‘λ κ·Έλ λ€.
κ° νλ‘μΈμ€λ μλ‘ λ€λ₯Έ μ£Όμ 곡κ°μμ μ€νλκΈ° λλ¬Έμ
ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ λ³μλ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όνλ κ²μ λΆκ°λ₯νλ€.
νμ§λ§ μ€μ μ΄μ체μ μμλ μ¬λ¬ νλ‘κ·Έλ¨μ΄ μλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μμΌ νλ μν©μ΄ λ§λ€.
μλ₯Ό λ€μ΄ μΉ λΈλΌμ°μ μ λ€μ΄λ‘λ νλ‘κ·Έλ¨, λλ μλ²μ λ°μ΄ν°λ² μ΄μ€ κ°μ νλ‘κ·Έλ¨λ€μ μλ‘ λ°μ΄ν°λ₯Ό κ΅νν΄μΌ νλ€.
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ΄μ체μ μμλ
νλ‘μΈμ€ κ° ν΅μ (IPC, Inter Process Communication) λ°©λ²μ μ 곡νλ€.
λνμ μΈ IPC λ°©μμλ Pipe, Message Queue, Shared Memory, Socketμ΄ μλ€.
μ΄λ¬ν λ©μ»€λμ¦μ ν΅ν΄ μλ‘ λ
립λ νλ‘μΈμ€λ€λ λ°μ΄ν°λ₯Ό κ΅ννλ©° νλ ₯ν μ μλ€.
μ 리
μ§κΈκΉμ§ νλ‘μΈμ€μ μ€λ λμ κ°λ
κ³Ό λ©λͺ¨λ¦¬ ꡬ쑰μ λν΄ μ΄ν΄λ³΄μλ€.
νλ‘μΈμ€λ μ΄μ체μ λ‘λΆν° μμμ ν λΉλ°μ μ€νλλ νλ‘κ·Έλ¨μ λ¨μμ΄λ©°
κ°κ° λ
립λ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ€.
λ°λ©΄ μ€λ λλ νλμ νλ‘μΈμ€ μμμ μ€νλλ νλ¦μ λ¨μλ‘
Code, Data, Heap μμμ 곡μ νλ©΄μ λμνλ€.
μ΄λ¬ν ꡬ쑰 λλΆμ μ€λ λλ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ¬λ¬ μμ
μ λμμ μ²λ¦¬ν μ μμ§λ§
μμμ 곡μ νκΈ° λλ¬Έμ μμ μ± μΈ‘λ©΄μμλ μ£Όμκ° νμνλ€.
λ€μ κΈμμλ μ΄λ¬ν νΉμ§μ λ°νμΌλ‘
λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λμ μ°¨μ΄μ λν΄ μ΄ν΄λ³΄μ.