βοΈ νλ‘μΈμ€(Process) / μ€λ λ(Thread) κ°λ μ 리
π μμ½
- νλ‘κ·Έλ¨: μ΄λ μμ μ νκΈ° μν΄ μ€νλ μ μλ νμΌ
- νλ‘μΈμ€: λ©λͺ¨λ¦¬μ μ¬λΌκ°κ³ , μ΄μ체μ λ‘λΆν° CPUλ₯Ό ν λΉλ°μ μ€ν μ€μΈ νλ‘κ·Έλ¨
- μ€λ λ: νλ‘μΈμ€ λ΄μμ λ 립μ μΌλ‘ μ€νλλ νλ¦ λ¨μ
β νλ‘μΈμ€ (Process)
νλ‘μΈμ€λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ μλ―Έν©λλ€.
κ·ΈλΌ νλ‘κ·Έλ¨μ 무μμΌκΉμ? νλ‘κ·Έλ¨μ μ»΄ν¨ν°μμ μ€νν μ μλ νμΌμ λ§ν©λλ€.
λ€λ§ μμ§ νμΌμ μ€ννμ§ μμμΌλ―λ‘ κ·Έλ₯ νΉμ ν μμ μ μν΄ μμ±λ μ½λ λ©μ΄λ¦¬μΌ λΏμ λλ€.
μ΄μ체μ κ° μ¬μ©μμ μ€ν μμ²μ μν΄ λμ€ν¬μ μλ νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬μ μ¬λ¦¬κ³ μ€ννλ©΄ νλμ νλ‘μΈμ€κ° λ©λλ€.
λμ€ν¬ λ΄μμ μΌλ°μ μΌλ‘ νλ‘κ·Έλ¨μ text, data, bssλ‘ κ΅¬μ±λμ΄ μμμ΅λλ€.
text(code) | μ½λ. CPUκ° μ€μ λ‘ μ€νν κΈ°κ³μ΄ λͺ λ Ήμ΄μ λͺ¨μ. |
data | μ΄κΈ°νλ μλ£ κ΅¬μ. int count =100; μ²λΌ μ μΈκ³Ό μ΄κΈ°νκ° λ μ μ/μ μ λ³μλ₯Ό μλ―Έ. |
bss | μ΄κΈ°νλμ§ μμ μλ£ κ΅¬μ. κ°μ μκ³ κ³΅κ°λ§ μ μλμ΄ μμ. |
μ΄ νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬ 곡κ°μΌλ‘ μ¬λΌκ°λ©΄μ stackκ³Ό heap μμ 곡κ°μ΄ λ©λͺ¨λ¦¬μμ λμ μμ±λ©λλ€.
stack | μ§μ λ³μμ κ°μ΄ νΈμΆν ν¨μκ° μ’
λ£λλ©΄ λλμμ¬ μμμ μΈ μλ£λ₯Ό μ μ₯νλ μμ. ν¨μμ νΈμΆμ΄ μλ£λλ©΄ μλ©Έλ¨. μλμΌλ‘ κ΄λ¦¬λ¨. |
heap | λ°νμμ new λ±μΌλ‘ ν λΉ λλ λμ λ©λͺ¨λ¦¬. μ¬μ©μ(κ°λ°μ)μ μν΄ λ©λͺ¨λ¦¬ 곡κ°μ΄ λμ μΌλ‘ ν λΉλκ³ ν΄μ λ¨. |
λν Process Control Block(PCB)μ΄ μΆκ°λλλ°, λ§ κ·Έλλ‘ νλ‘μΈμ€λ₯Ό κ΄λ¦¬νλ λΈλ‘μΌλ‘ νλ‘μΈμ€ ID, λ©λͺ¨λ¦¬ μ£Όμ λ±μ μ 보λ₯Ό κ°μ§κ³ μμ΅λλ€.
μ΄μ체μ λ μ΄ PCBλ₯Ό ν΅ν΄ ν΄λΉ νλ‘μΈμ€μ λν μ 보λ₯Ό μ»κ³ νλ‘μΈμ€λ₯Ό κ΄λ¦¬ν©λλ€.
μ΄ λͺ¨λ λ©λͺ¨λ¦¬ ꡬ쑰(text, data, bss, heap, stack)λ₯Ό program imageλΌκ³ νλ©°, μ¬κΈ°μ νκ²½ λ³μ λ± runtime μ€μ μ 보(environment)κ° ν¨κ» ꡬμ±λμ΄ νλ‘μΈμ€μ λ©λͺ¨λ¦¬ 곡κ°μ μ΄λ£Ήλλ€.
μ΄ν μ΄μ체μ κ° CPUλ₯Ό ν΄λΉ νλ‘μΈμ€μ ν λΉνμ¬ μ½λλ₯Ό μ€νν©λλ€.
νλ‘κ·Έλ¨κ³Ό νλ‘μΈμ€μ κ°λ μ κ°λ¨νκ² μ 리νμλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- νλ‘κ·Έλ¨: μ΄λ€ μμ
μ νκΈ° μν΄ μ€νν μ μλ νμΌ
- λμ€ν¬ λ΄μ μ μ₯λμ΄ μμ§λ§, λ©λͺ¨λ¦¬μ μ¬λΌκ°μμ§ μλ μ½λ λ©μ΄λ¦¬
- νλ‘μΈμ€: μ€νλμ΄ μμ
μ€μΈ νλ‘κ·Έλ¨
- λ©λͺ¨λ¦¬ λ΄μ μ μ¬λκ³ , CPU μμμ ν λΉλ°μ μ€νλκ³ μλ μν
- νλ‘μΈμ€λΌλ¦¬λ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όν μ μ
π νλ‘μΈμ€ ꡬ쑰
text(code) | μ½λ. CPUκ° μ€μ λ‘ μ€νν κΈ°κ³μ΄ λͺ λ Ήμ΄μ λͺ¨μ |
data | μ΄κΈ°νλ μλ£ κ΅¬μ int count =100; μ²λΌ μ μΈκ³Ό μ΄κΈ°νκ° λ μ μ/μ μ λ³μλ₯Ό μλ―Έ |
bss | μ΄κΈ°νλμ§ μμ μλ£ κ΅¬μ int count;μ²λΌ κ°μ μκ³ κ³΅κ°λ§ μ μλμ΄ μμ |
stack | μ§μ λ³μμ κ°μ΄ νΈμΆν ν¨μκ° μ’
λ£λλ©΄ λλμμ¬ μμμ μΈ μλ£λ₯Ό μ μ₯νλ μμ. ν¨μμ νΈμΆμ΄ μλ£λλ©΄ μλ©Έλ¨. μλμΌλ‘ κ΄λ¦¬λ¨. |
heap | λ°νμμ new λ±μΌλ‘ ν λΉ λλ λμ λ©λͺ¨λ¦¬. μ¬μ©μ(κ°λ°μ)μ μν΄ λ©λͺ¨λ¦¬ 곡κ°μ΄ λμ μΌλ‘ ν λΉλκ³ ν΄μ λ¨. |
PCB | Process Control Block. νλ‘μΈμ€ ID, λ©λͺ¨λ¦¬ μ£Όμ λ±μ μ 보λ₯Ό ν¬ν¨νκ³ μμ. |
β μ€λ λ (Thread)
μ€λ λλ νλ‘μΈμ€ μμμ λ 립μ μΌλ‘ μ€νλλ νλ¦μ λ¨μμ λλ€.
μ΄ν΄νκΈ° μ¬μ΄ μλ‘ ν¬λ‘¬ λΈλΌμ°μ κ° μμ΅λλ€.
ν¬λ‘¬μ΄λΌλ νλ‘κ·Έλ¨μ μ€ννλ©΄, νλμ νλ‘μΈμ€κ° μμ±λ©λλ€.
μ΄ ν¬λ‘¬μμ μ°λ¦¬λ μΈν°λ· κΈ°μ¬λ₯Ό μ½κΈ°λ, λ€λ₯Έ μ°½μμ μ νλΈλ₯Ό 보기λ νκ³ , λ λ€λ₯Έ μ°½μμ κ²μμ νκΈ°λ νλ©° μ¬λ¬ μΌμ ν μ μμ΅λλ€.
μ¦, νλμ νλ‘μΈμ€ μμμ μ¬λ¬ μμ λ€μ΄ λμμ μ§νλλλ° μ΄ μμ λ€μ μλ‘ λ 립μ μ λλ€.
νλμ νλ‘μΈμ€ μμ μ¬λ¬ μ€λ λλ€μ΄ μκ³ , μ΄λ‘ μ μΌλ‘λ μ€λ λ μκ° λ§μ μλ‘ λμμ ν μ μλ μμ μ΄ λ§μμ§λλ€.
(μ€μ λ‘λ λ³λ ¬λ‘ μνλλ μ€λ λ μλ CPI μ½μ΄ μμ λ°λΌ μ νλ©λλ€.)
νλ‘μΈμ€ λ΄μμ μ€λ λλ‘ λμ μμ μ΄ κ°λ₯ν κ²μ μ€λ λλΌλ¦¬ νλ‘μΈμ€μ μμμ 곡μ νκΈ° λλ¬Έμ λλ€.
νλ‘μΈμ€μ λ©λͺ¨λ¦¬ μμ μ€ text, data, heapμ λ€λ₯Έ μ€λ λλ€λΌλ¦¬ μλ‘ κ³΅μ λκ³
stack μμμ μ€λ λλ§λ€ μλ‘κ² ν λΉλ°μ λ³λμ stackμ κ°μ§λλ€.
stackμ ν¨μ νΈμΆ μ μ λ¬λλ μΈμλ μ§μ λ³μ λ±μ μ μ₯νλ 곡κ°μΌλ‘ λ 립μ μΈ μ€νμ κ°μ§μΌλ‘μ¨ μ€λ λλ λ 립μ μΌλ‘ ν¨μλ₯Ό νΈμΆν μ μκ³ , λ 립μ μΈ μ€ν νλ¦μ κ°μ§ μ μκ² λ©λλ€.
λ³λμ stackμ κ°μ§κ³ μμ§λ§ heap λ©λͺ¨λ¦¬λ νλ‘μΈμ€μ heap μμμ λͺ¨λ 곡μ νκΈ° λλ¬Έμ
μλ‘ λ€λ₯Έ μ€λ λμμ κ°μ Έμ μ½κ³ μΈ μ μμ΅λλ€.
νλ‘μΈμ€λΌλ¦¬λ μλ‘ λ 립λ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ―λ‘ μλ‘ μν₯μ λΌμΉμ§ μμ§λ§
μ€λ λλ€μ νλ‘μΈμ€μ λ©λͺ¨λ¦¬λ₯Ό 곡μ νκΈ° λλ¬Έμ, νλμ μ€λ λκ° μλͺ»λ λ©λͺ¨λ¦¬ μ κ·Όμ΄λ μμΈλ₯Ό λ°μμν€λ©΄ λ€λ₯Έ μ€λ λμλ μν₯μ μ£Όμ΄ μ 체 νλ‘μΈμ€κ° λΆμμ ν΄μ§ μ μμ΅λλ€.
μ°Έκ³ μλ£