νλ‘μΈμ€ κ°λ (Process Concept)
μ°λ¦¬κ° μ΄μ체μ λ₯Ό λ
Όμν λ ν κ°μ§ μ₯μ λ λͺ¨λ CPU νλλ€μ μ΄λ»κ² λΆλ₯Ό κ²μΈκ° νλ λ°μ μλ¬Έμ΄ μμ΅λλ€. μ΄μ°½κΈ° μ»΄ν¨ν°λ μμ
(job)μ μ€ννλ μΌκ΄μ²λ¦¬ μμ€ν
μ΄μκ³ , μ¬μ©μ νλ‘κ·Έλ¨ λλ νμ€ν¬(task)λ₯Ό μ€ννλ μλΆν μμ€ν
μ΄ λ€λ₯Ό μ΄μμ΅λλ€. λ¨μΌ μ¬μ©μ μμ€ν
μμλ μ¬μ©μλ μλ νλ‘μΈμ, μΉ λΈλΌμ°μ λ° μ μ λ©μΌ ν¨ν€μ§μ κ°μ μ¬λ¬ νλ‘κ·Έλ¨μ ν λ²μ μ€νν μ μμ΅λλ€. λν λ€μ€ νμ€νΉμ μ§μνμ§ μλ μλ² λλ μ₯μΉμμμ κ°μ΄ μ»΄ν¨ν°κ° ν λ²μ νλμ νλ‘κ·Έλ¨λ§ μ€νν μ μλλΌλ μ΄μ체μ λ λ©λͺ¨λ¦¬ κ΄λ¦¬μ κ°μ μ체 νλ‘κ·Έλ¨λ λ΄λΆ νλμ μ§μν΄μΌ ν μλ μμ΅λλ€. μ¬λ¬ μΈ‘λ©΄μμ μ΄λ¬ν λͺ¨λ νλμ μ μ¬νλ―λ‘ μ΄λ¬ν λͺ¨λ νλμ νλ‘μΈμ€λΌκ³ λΆλ₯Ό μ μμ΅λλ€.
μ°λ¦¬λ κ°μΈμ μΌλ‘ λ νλμ μΈ μ©μ΄μΈ νλ‘μΈμ€λ₯Ό μ νΈνμ§λ§, μ΄μ체μ μ μ£Όμ νλμ΄ μμ
μ²λ¦¬μΈ μμ μ λ§μ μ΄μ체μ μ΄λ‘ λ° μ©μ΄κ° κ°λ°λμκΈ° λλ¬Έμ μμ
(job)μ΄λΌλ μ©μ΄λ μμ¬μ μΌλ‘ μ€μν μλ―Έκ° μμ΅λλ€. λ°λΌμ μΌλΆ μ μ ν κ²½μ° μ΄μ체μ μ μν μ μ€λͺ
ν λ μμ
μ μ¬μ©ν©λλ€. μλ₯Ό λ€μ΄, νλ‘μΈμ€κ° μμ
μ΄λΌλ μ©μ΄λ₯Ό λ체νλ€λ μ΄μ λ§μΌλ‘ μμ
(μ: μμ
μ€μΌμ€λ§)μ΄λΌλ λ¨μ΄λ₯Ό ν¬ν¨ν μΌλ°μ μΌλ‘ ν΅μ©λλ μ©μ΄λ₯Ό μ¬μ©νμ§ μλ κ²μ μ€ν΄μ μμ§κ° μμ΅λλ€.
(1) νλ‘μΈμ€(The Process)
λΉκ³΅μμ μΌλ‘, νλ‘μΈμ€λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ λλ€. νλ‘μΈμ€μ νμ¬ νλμ μνλ νλ‘κ·Έλ¨ μΉ΄μ΄ν° κ°κ³Ό νλ‘μΈμ λ μ§μ€ν°μ λ΄μ©μΌλ‘ λνλ λλ€. νλ‘μΈμ€μ λ©λͺ¨λ¦¬ λ°°μΉλ μΌλ°μ μΌλ‘ μ¬λ¬ μΉμ (μμ)μΌλ‘ ꡬλΆλλ©° μλμ μ΄λ―Έμ§μ λνλ μμ΅λλ€.
μ΄λ¬ν μΉμ (μμ)μλ λ€μμ΄ ν¬ν¨λ©λλ€.
- ν μ€νΈ μΉμ : μ€ν μ½λ
- λ°μ΄ν° μΉμ : μ μ λ³μ
- ν μΉμ : νλ‘κ·Έλ¨ μ€ν μ€μ λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬
- μ€ν μΉμ : ν¨μλ₯Ό νΈμΆν λ μμ λ°μ΄ν° μ μ₯μ₯μ(μ: ν¨μ 맀κ°λ³μ, λ³΅κ· μ£Όμ λ° μ§μ λ³μ)
ν
μ€νΈ λ° λ°μ΄ν° μΉμ
μ ν¬κΈ°λ κ³ μ λκΈ° λλ¬Έμ νλ‘κ·Έλ¨ μ€ν μκ° λμ ν¬κΈ°κ° λ³νμ§ μμ΅λλ€. κ·Έλ¬λ μ€ν λ° ν μΉμ
μ νλ‘κ·Έλ¨ μ€ν μ€μ λμ μΌλ‘ μ€μ΄λ€κ±°λ μ»€μ§ μ μμ΅λλ€. ν¨μκ° νΈμΆλ λλ§λ€ ν¨μ 맀κ°λ³μ, μ§μ λ³μ λ° λ³΅κ· μ£Όμλ₯Ό ν¬ν¨νλ νμ±ν λ μ½λ(activation record)κ° μ€νμ νΈμλ©λλ€. ν¨μμμ μ μ΄κ° λλμμ€λ©΄ μ€νμμ νμ±ν λ μ½λκ° ν λ©λλ€. λ§μ°¬κ°μ§λ‘ λ©λͺ¨λ¦¬κ° λμ μΌλ‘ ν λΉλ¨μ λ°λΌ νμ΄ μ»€μ§κ³ λ©λͺ¨λ¦¬κ° μμ€ν
μ λ°νλλ©΄ μΆμλ©λλ€. μ€ν λ° ν μΉμ
μ΄ μλ‘μ λ°©ν₯μΌλ‘ 컀μ§λλΌλ μ΄μ체μ λ μλ‘ κ²ΉμΉμ§ μλλ‘ ν΄μΌ ν©λλ€.
μ°λ¦¬λ νλ‘κ·Έλ¨ κ·Έ μ체λ νλ‘μΈμ€κ° μλμ λͺ
μν΄μΌ ν©λλ€. νλ‘κ·Έλ¨μ λͺ
λ Ήμ΄ λ¦¬μ€νΈλ₯Ό λ΄μ©μΌλ‘ κ°μ§ λμ€ν¬μ μ μ₯λ νμΌ(μ€ν νμΌμ΄λΌκ³ λΆλ¦Ό)κ³Ό κ°μ μλμ μΈ μ‘΄μ¬(passive entity)μ
λλ€. μ΄μλ λμ‘°μ μΌλ‘ νλ‘μΈμ€λ λ€μμ μ€νν λͺ
λ Ήμ΄λ₯Ό μ§μ νλ νλ‘κ·Έλ¨ μΉ΄μ΄ν°μ κ΄λ ¨ μμμ μ§ν©μ κ°μ§ λ₯λμ μΈ μ‘΄μ¬(active entity)μ
λλ€. μ€ν νμΌμ΄ λ©λͺ¨λ¦¬μ μ μ¬λ λ νλ‘κ·Έλ¨μ νλ‘μΈμ€κ° λ©λλ€. μ€ν νμΌμ λ©λͺ¨λ¦¬μ μ μ¬νλ μΌλ°μ μΈ λ κ°μ§ λ°©μμ μ€ν νμΌμ λνλ΄λ μμ΄μ½μ λλΈ ν΄λ¦νλ λ°©μκ³Ό λͺ
λ Ήμ΄ λΌμΈμμμ prog.exe λλ a.outκ³Ό κ°μ΄ νμΌ μ΄λ¦μ μ
λ ₯νλ λ°©μμ
λλ€.
λ νλ‘μΈμ€λ€μ΄ λμΌν νλ‘κ·Έλ¨μ μ°κ΄λ μ μμ§λ§, μ΄λ€μ λ κ°μ λ³λμ μ€ν μμλ‘ κ°μ£Όν©λλ€. μλ₯Ό λ€μ΄, μ¬λ¬ μ¬μ©μκ° λ©μΌ νλ‘κ·Έλ¨μ μλ‘ λ€λ₯Έ 볡μ¬λ³Έμ μ€ννκ±°λ, λλ λμΌ μ¬μ©μκ° μΉ λΈλΌμ°μ νλ‘κ·Έλ¨μ μ¬λ¬ 볡μ¬λ³Έμ νΈμΆν μ μμ΅λλ€. μ΄λ€ κ°κ°μ λ³λμ νλ‘μΈμ€μ΄λ©°, ν
μ€νΈ μΉμ
μ΄ λλ±νλ€ ν μ§λΌλ λ°μ΄ν°, ν λ° μ€ν μΉμ
μ λ€λ₯Ό μ μμ΅λλ€. νλ‘μΈμ€κ° μ€νλλ κ³Όμ μμ λ§μ νλ‘μΈμ€λ₯Ό μμ±νλ κ²μ΄ 보ν΅μ
λλ€.
νλ‘μΈμ€ μμ²΄κ° λ€λ₯Έ κ°μ²΄λ₯Ό μν μ€ν νκ²½μΌλ‘ λμν μ μλ€λ μ¬μ€μ μ£Όλͺ©ν΄μΌ ν©λλ€. Java νλ‘κ·Έλλ° νκ²½μ΄ μ’μ μλ₯Ό 보μ¬μ€λλ€. λλΆλΆμ μν©μμ μ€ν κ°λ₯ν Java νλ‘κ·Έλ¨μ Java κ°μ κΈ°κ³(JVM) μμμ μ€νλ©λλ€. JVMμ μ μ¬λ Java μ½λλ₯Ό ν΄μνκ³ κ·Έ μ½λλ₯Ό λμ νμ¬ μ κΈ°κ³μ΄λ₯Ό μ΄μ©νμ¬ νλμ μ·¨νλ νλ‘μΈμ€λ‘μ νλ‘κ·Έλ¨μ μ€νν©λλ€. μλ₯Ό λ€μ΄, μ»΄νμΌλ Java νλ‘κ·Έλ¨ Program.classλ₯Ό μ€ννκΈ° μν΄ λ€μκ³Ό κ°μ΄ λͺ
λ Ήμ μ
λ ₯ν κ²μ
λλ€.
java Program
java λͺ
λ Ήμ΄λ JVMμ 보ν΅μ νλ‘μΈμ€μ²λΌ μ€νμν€κ³ , JVMμ Java νλ‘κ·Έλ¨ Programμ κ°μκΈ°κ³ μμμ μ€νν©λλ€. μ΄ κ°λ
μ λ€λ₯Έ κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ΄ μλλΌ Java μΈμ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν¨λ€λ μ μ μ μΈνλ©΄ λͺ¨μμ€νκ³Ό λμΌν κ°λ
μ
λλ€.
(2) νλ‘μΈμ€ μν(Process State)
νλ‘μΈμ€λ μ€νλλ©΄μ κ·Έ μνκ° λ³ν©λλ€. νλ‘μΈμ€μ μνλ λΆλΆμ μΌλ‘ κ·Έ νλ‘μΈμ€μ νμ¬μ νλμ λ°λΌμ μ μλ©λλ€. νλ‘μΈμ€λ λ€μ μν μ€ νλμ μκ² λ©λλ€.
- μλ‘μ΄(new): νλ‘μ νΈκ° μμ± μ€μ΄λ€.
- μ€ν(running): λͺ λ Ήμ΄λ€μ΄ μ€νλκ³ μλ€.
- λκΈ°(wating): νλ‘μΈμ€κ° μ΄λ€ μ΄λ²€νΈ(μ μΆλ ₯ μλ£ λλ μ νΈμ μμ κ°μ)κ° μΌμ΄λκΈ°λ₯Ό κΈ°λ€λ¦°λ€.
- μ€λΉ(readty): νλ‘μΈμ€κ° μ²λ¦¬κΈ°μ ν λΉλκΈ°λ₯Ό κΈ°λ€λ¦°λ€.
- μ’ λ£(treminated): νλ‘μΈμ€μ μ€νμ΄ μ’ λ£λμλ€.
μ΄λ€ μ΄λ¦μ μμμ μ΄κ³ , μ΄μ체μ λ§λ€ λ³ν©λλ€. κ·Έλ μ§λ§, μ΄λ€μ΄ λνλ΄λ μνλ€μ λͺ¨λ μμ€ν μμ μ°Ύμλ³Ό μ μμ΅λλ€. λν μ΄λ€ μ΄μ체μ λ νλ‘μΈμ€ μνλ₯Ό λμ± μμΈνκ² λ¬μ¬νμ¬ κ΅¬λ³ν©λλ€. μ΄λ νμκ°μ ν μ²λ¦¬κΈ° μ½μ΄μμλ μ€μ§ νλμ νλ‘μΈμ€λ§μ΄ μ€νλλ€λ κ²μ μΈμνλ κ²μ΄ μ€μν©λλ€. κ·Έλ μ§λ§, λ§μ νλ‘μΈμ€κ° μ€λΉ μλ£ λ° λκΈ° μνμ μμ μ μμ΅λλ€. μλ μ΄λ―Έμ§λ μ΄λ€ μνμ ν΄λΉνλ μν λ€μ΄μ΄κ·Έλ¨(state diatgram)μ λλ€.
(3) νλ‘μΈμ€ μ μ΄ λΈλ‘(Process Control Block)
κ° νλ‘μΈμ€λ μ΄μ체μ μμ νλ‘μΈμ€ μ μ΄ λΈλ‘(process control block, PCB)(νμ€ν¬ μ μ΄ λΈλ‘μ΄λΌκ³ λ λΆλ¦½λλ€)μ μν΄ ννλ©λλ€. μλ μ΄λ―Έμ§λ PCBλ₯Ό λνλ λλ€.
νλ‘μΈμ€ μ μ΄ λΈλ‘μ νΉμ νλ‘μΈμ€μ μ°κ΄λ μ¬λ¬ μ 보λ₯Ό μλ‘νλ©°, λ€μκ³Ό κ°μ κ²λ€μ ν¬ν¨ν©λλ€.
- νλ‘μΈμ€ μν: μνλ μλ‘μ΄(new), μ€λΉ(ready), μ€ν(running), λκΈ°(waiting) λλ μ μ§(halted) μν λ±μ΄λ€.
- νλ‘κ·Έλ¨ μΉ΄μ΄ν°: νλ‘κ·Έλ¨ μΉ΄μ΄ν°λ μ΄ νλ‘μΈμ€κ° λ€μμ μ€νν λͺ λ Ήμ΄μ μ£Όμλ₯Ό κ°λ¦¬ν¨λ€.
- CPU λ μ§μ€ν°λ€: CPU λ μ§μ€ν°λ μ»΄ν¨ν°μ ꡬ쑰μ λ°λΌ λ€μν μμ μ νμ κ°μ§λ€. λ μ§μ€ν°μλ λμ°κΈ°(accumulator), μΈλ±μ€ λ μ§μ€ν°, μ€ν λ μ§μ€ν°, λ²μ©(general-purpose) λ μ§μ€ν°λ€κ³Ό μν μ½λ(condition code) μ λ³΄κ° ν¬ν¨λλ€. νλ‘κ·Έλ¨ μΉ΄μ΄ν°μ ν¨κ» μ΄ μν μ 보λ, λμ€μ νλ‘μΈμ€κ° λ€μ μ€μΌμ€ λ λ κ³μ μ¬λ°λ₯΄κ² μ€νλλλ‘ νκΈ° μν΄μ μΈν°λ½νΈ λ°μ μ μ μ₯λμ΄μΌ νλ€.
- CPU-μ€μΌμ€λ§ μ 보: μ΄ μ 보λ νλ‘μΈμ€ μ°μ μμ, μ€μΌμ€ νμ λν ν¬μΈν°μ λ€λ₯Έ μ€μΌμ€ 맀κ°λ³μλ₯Ό ν¬ν¨νλ€.
- λ©λͺ¨λ¦¬ κ΄λ¦¬ μ 보: μ΄ μ 보λ μ΄μ체μ μ μν΄ μ¬μ©λλ λ©λͺ¨λ¦¬ μμ€ν μ λ°λΌ κΈ°μ€(base) λ μ§μ€ν°μ νκ³(limit) λ μ§μ€ν°μ κ°, μ΄μ체μ κ° μ¬μ©νλ λ©λͺ¨λ¦¬ μμ€ν μ λ°λΌ νμ΄μ§ ν μ΄λΈ λλ μΈκ·Έλ¨ΌνΈ ν μ΄λΈ λ±κ³Ό κ°μ μ 보λ₯Ό ν¬ν¨νλ€.
- νκ³(accounting) μ 보: μ΄ μ 보λ CPU μ¬μ© μκ°κ³Ό κ²½κ³Όλ μ€μκ°, μκ° μ ν, κ³μ λ²νΈ, μ‘ λλ νλ‘μΈμ€ λ²νΈ λ±μ ν¬ν¨νλ€.
- μ μΆλ ₯ μν μ 보: μ΄ μ 보λ μ΄ νλ‘μΈμ€μ ν λΉλ μ μΆλ ₯ μ₯μΉλ€κ³Ό μ΄λ¦° νμΌμ λͺ©λ‘ λ±μ ν¬ν¨νλ€.
μμ½νλ©΄ νλ‘μΈμ€ μ μ΄ λΈλ‘μ μ½κ°μ νκ³ λ°μ΄ν°μ ν¨κ» νλ‘μΈμ€λ₯Ό μμμν€κ±°λ λ€μ μμμν€λ λ° νμν λͺ¨λ λ°μ΄ν°λ₯Ό μν μ μ₯μμ μν μ ν©λλ€.
(4) μ€λ λ(Threads)
μ΄μ κΉμ§ μ 리ν νλ‘μΈμ€ λͺ¨λΈμ νλ‘μΈμ€κ° λ¨μΌμ μ€ν μ€λ λλ₯Ό μ€ννλ νλ‘κ·Έλ¨μμ μμνμ΅λλ€. μλ₯Ό λ€λ©΄, λ§μΌ ν μ€λ λκ° μλ νλ‘μΈμ νλ‘κ·Έλ¨μ μ€ν μ€μ΄λ©΄, μ€νλλ λͺ
λ Ήμ΄μ λ¨μΌ μ€λ λκ° μ‘΄μ¬ν©λλ€. μ΄ λ¨μΌ μ μ΄ μ€λ λλ νλ‘μΈμ€κ° ν λ²μ λ¨μ§ ν κ°μ§ μΌλ§ μ€ννλλ‘ νμ©ν©λλ€. λ°λΌμ μ¬μ©μλ λ¬Έμλ₯Ό μ
λ ₯νλ©΄μ λμμ μ² μ κ²μ¬κΈ°λ₯Ό μ€νν μ μμ΅λλ€. λλΆλΆμ νλ μ΄μ체μ λ νλ‘μΈμ€ κ°λ
μ νμ₯νμ¬ ν νλ‘μΈμ€κ° λ€μμ μ€ν μ€λ λλ₯Ό κ°μ§ μ μλλ‘ νμ©ν©λλ€. κ·Έλ€μ λ°λΌμ νλ‘μΈμ€κ° ν λ²μ νλ μ΄μμ μΌμ μνν μ μλλ‘ νμ©ν©λλ€. μ΄λ¬ν νΉμ±μ λ€μ€ μ²λ¦¬κΈ° μμ€ν
μμ μ΄μ΅μ μ»μ μ μλλ°, μ¬λ¬ μ€λ λκ° λ³λ ¬λ‘ μ€νλ μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μ€ μ€λ λ μλ νλ‘μΈμλ νλμ μ€λ λμ μ¬μ©μ μ
λ ₯ κ΄λ¦¬λ₯Ό 맑기λ λμ λ€λ₯Έ μ€λ λκ° μ² μ κ²μ¬κΈ°λ₯Ό μννλλ‘ λ§λ€ μ μμ΅λλ€. μ€λ λλ₯Ό μ§μνλ μμ€ν
μμλ PCBλ κ° μ€λ λμ κ΄ν μ 보λ₯Ό ν¬ν¨νλλ‘ νμ₯λ©λλ€. μ€λ λλ₯Ό μ§μνκΈ° μν΄μλ μμ€ν
μ λ°μ κ±ΈμΉ λ€λ₯Έ μμ λ νμν©λλ€.
'ComputerScience π > μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[OS] μ€λ λμ λμμ±(Thread & Concurrency) (0) | 2022.02.14 |
---|---|
[OS] IPC μμ€ν μ μ¬λ‘(Examples of IPC Systems) (0) | 2022.02.10 |
[OS] νλ‘μΈμ€ κ° ν΅μ (Interprocess Communication, IPC) (0) | 2022.02.10 |
[OS] macOS, iOS μ Android μ΄μ체μ (0) | 2022.02.06 |
[OS] μμ€ν μ½(System Calls) (0) | 2022.02.05 |
[OS] μ¬μ©μμ μ΄μ체μ μΈν°νμ΄μ€(User and Operating-System Interface) (0) | 2022.02.03 |
λκΈ