[OS] Processμ λν΄ μμ보μ.
νλ‘μΈμ€μ νλ‘κ·Έλ¨μ μ°¨μ΄
νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ μ¬λμ΄ μ€νλκ³ μλ μνλ₯Ό νλ‘μΈμ€λΌκ³ λ§ν©λλ€.
.exe λ .dmgμ κ°μ νμΌ -> νλ‘κ·Έλ¨ ( μ μ μΈ μν )
μ΄ νλ‘κ·Έλ¨μ μ€νμμΌ λ©λͺ¨λ¦¬μ μ μ¬ -> νλ‘μΈμ€ ( λμ μΈ μν )
- λͺ¨λ νλ‘κ·Έλ¨μ μ΄μ체μ κ° μ€νλκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μ£Όμ΄μΌ μ€νλ μ μμ΅λλ€.
νλ‘μΈμ€ | νλ‘κ·Έλ¨ |
μ€νλμ΄ μμ μ€μΈ νλ‘κ·Έλ¨ | νλμ μ½λ λ©μ΄λ¦¬κ° μ»΄νμΌ κ³Όμ μ κ±°μ³ μ€ννμΌλ‘ λ§λ€μ΄μ§ νμΌ |
νμΌμ΄ λ©λͺ¨λ¦¬μ μ μ¬λμ΄ μ€νλκ³ μλ μν | νμΌμ΄ μ μ₯μ₯μΉμ μ‘΄μ¬νμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μν |
κ·Έλ λ€λ©΄ νλ‘μΈμ€μ μ€λ λλ μ°¨μ΄λ 무μμΌκΉμ.
νλ‘μΈμ€μ μ€λ λ μ°¨μ΄
μ€λ λλ νλ‘μΈμ€ λ΄ μμ μ νλ¦μ μ§μΉν©λλ€.
νλ‘μΈμ€ | μ€λ λ |
OSλ‘λΆν° μμμ ν λΉλ°μ μμ μ λ¨μλ‘ λ©λͺ¨λ¦¬μ νλ‘κ·Έλ¨μ΄ μ μ¬λμ΄ μλ μν. | νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€ν νλ¦μ λ¨μ |
λ€λ₯Έ νλ‘μΈμ€μ 격리λμ΄ μκΈ° λλ¬Έμ νλ‘μΈμ€κ° ν΅μ μ νκΈ° μν΄μλ IPCλ₯Ό μ¬μ©ν΄μΌ ν¨. | λ€λ₯Έ μ€λ λμ 격리λμ΄ μμ§ μμΌλ―λ‘ κ·Έλ₯ ν΅μ ν μ μμΌλ―λ‘ νλ‘μΈμ€λ³΄λ€ μλκ° λΉ λ¦. |
λ€λ₯Έ νλ‘μΈμ€μ λ 립μ μ΄λ―λ‘ λ¬Έμ κ° μκΈ΄λ€κ³ ν΄μ λ€λ₯Έ νλ‘μΈμ€μ μν₯μ μ£Όμ§ μμ. | ν μ€λ λμ λ¬Έμ κ° μκΈ°λ©΄ λμΌ νλ‘μΈμ€ λ΄μ λ€λ₯Έ μ€λ λμ νλ‘μΈμ€μ μν₯μ μ€ μ μμ. |
μμ±κ³Ό μ’ λ£μ λ λ§μ μκ°μ΄ μμ. | μμ±κ³Ό μ’ λ£μ λΉκ΅μ μ μ μκ°μ΄ μμ |
μ‘°κΈ λ μ½κ² λ§νμλ©΄ μ€λ λλ νλ‘μΈμ€μμ ν λΉλ°μ μμμ μ΄μ©νμ¬ νλμ νλ‘μΈμ€μμμ μΌλ ¨μ μμ λ€μ μ§ννλ λ¨μλ‘, μ€λ λκ° νλκ° μλ€λ©΄ μ±κΈ μ€λ λ, μ¬λ¬κ° μλ€λ©΄ λ©ν° μ€λ λλΌκ³ λΆλ¦ λλ€.
νλ‘κ·Έλ¨μ μ»΄νμΌ κ³Όμ
1. μ μ²λ¦¬κΈ° ( Preprocessor )
- μμ€μ½λμ μ£Όμ μ κ±°, ν€λνμΌ λ³ν©. λ§€ν¬λ‘ μΉννμ¬ μ»΄νμΌν μ μλ *.i νμΌμ μμ±
2. μ»΄νμΌλ¬ ( Compiler )
- μ μ²λ¦¬κΈ°μμ λ§λ€μ΄μ§ *.i νμΌμ μ€λ₯λ₯Ό μ²λ¦¬νκ³ , μ½λλ₯Ό μ΅μ ν νλ μμ μ νμ¬ μ΄μ λΈλ¦¬μ΄λ‘ λ³νν *.s file μ μμ±
3. μ΄μ λΈλ¬ ( Assembler )
- μ΄μ λΈλ¦¬μ΄λ‘ μμ±λ *.s fileμ *.o λͺ©μ νμΌμ μμ±
4. λ§μ»€
- λͺ©μ νμΌμ ν΅ν΄ μ€νν μ μλ *.exe, *.out νμ₯μμ νλ‘κ·Έλ¨μ μμ±
νλ‘μΈμ€μ λ©λͺ¨λ¦¬ ꡬ쑰
μ΄μ체μ λ νλ‘κ·Έλ¨μ΄ μ€νλμ΄ νλ‘μΈμ€κ° λλ©΄ νλ‘μΈμ€μ μ μ ν λ©λͺ¨λ¦¬λ₯Ό ν λΉν©λλ€.
μμμΌλ‘ ꡬλΆνλ©΄ μ€ν μμ, ν μμ, λ°μ΄ν° μμ(BSS/Data Segment), μ½λ μμμΌλ‘ ꡬλΆν©λλ€.
- μ€ν μμ : μ§μλ³μ, λ§€κ°λ³μ, ν¨μκ° μ μ₯. μ»΄νμΌ μ ν¬κΈ°κ° κ²°μ μ§λ§, ν¨μκ° ν¨μλ₯Ό νΈμΆνλ μ¬κ· ν¨μκ°μ κ²½μ°λ λ°νμ μ ν¬κΈ°κ° λ³κ²½λ¨. (λμ )
- μ§μλ³μ, λ§€κ°λ³μ, μ€νλλ ν¨μμ μν΄ λμ΄λκ±°λ μ€μ΄λλ λ©λͺ¨λ¦¬ μμμΌλ‘, μ¬κ· ν¨μμ κ²½μ° λ§€λ² μλ‘μ΄ μ€ν νλ μμ΄ μ¬μ©λκΈ° λλ¬Έμ ν¨μ λ΄μ λ³μ μ§ν©μ΄ ν΄λΉ ν¨μμ λ€λ₯Έ μΈμ€ν΄μ€ λ³μλ₯Ό λ°©ν΄νμ§ μμ.
- ν μμ : λμ ν λΉν λ μ¬μ©λλ μμμΌλ‘ λ°νμ μ ν¬κΈ°κ° κ²°μ (λμ )
- malloc(), free() ν¨μλ₯Ό ν΅ν΄ ν λΉνκ³ ν΄μ νλ©° λμ μΌλ‘ κ΄λ¦¬ν μ μμΌλ©°, λμ μΌλ‘ κ΄λ¦¬λλ μλ£κ΅¬μ‘° (ex : Cppμ vector, Javaμ Collection)κ° μ΄ ν μμμ μ μ₯λ©λλ€.
- λ°μ΄ν° μμ : μ½λκ° μ€νλλ©΄μ μ¬μ©λλ μ μ λ³μκ° μ μ₯λ μμμΌλ‘ BSS Segmentμ Data Segmentλ‘ κ΅¬λΆ. (μ μ )
- BSS Segment : 0μΌλ‘ μ΄κΈ°νλκ±°λ μ΄κΈ°ν λμ§ μμ μ μ λ³μ, static, constλ‘ μ μΈλ λ³μκ° μ μ₯λλ μμ
- Data Segment : 0μ΄ μλ κ°μΌλ‘ μ΄κΈ°νλ μ μ λ³μ, static, constλ‘ μ μΈλ λ³μκ° μ μ₯λλ μμ
- μ½λ μμ : μμ€μ½λκ° CPUκ° ν΄μν μ μλ κΈ°κ³μ΄ ννλ‘ μ μ₯λμ΄ μλ μμ. (μ μ )
μ€λ λλ ν μμ, λ°μ΄ν° μμ, μ½λ μμμ 곡μ νλ€!
- νλμ νλ‘μΈμ€μμ νμλ μ€λ λλ€μ νλ‘μΈμ€μμ μ¬μ©λλ λ©λͺ¨λ¦¬ μμ μ€ μ€ν μμμ μ μΈν ν, λ°μ΄ν°, μ½λ μμμ 곡μ ν΄μ μ¬μ©νκ³ , μ€ν μμμ κ°κ°μ μ€λ λκ° κ°κ° λ³λλ‘ κ°μ§λλ€.
- μ€λ λλ κ°κ°μ μ€νμ κ°μ§μΌλ‘μ¨ λ 립μ μΈ ν¨μ νΈμΆμ΄ κ°λ₯νλ©°, μ΄μ λ°λΌ λ 립μ μΈ μ€ννλ¦μ κ°μ§ μ μκ² μ΅λλ€.
PCB (Process Control Block)
- νλ‘μΈμ€μ λν λ©ν λ°μ΄ν°λ₯Ό μ μ₯νκ³ μλ λ°μ΄ν° λΈλ‘μΌλ‘ 컀λ μ€νμ μ μ₯λ©λλ€.
- κ° νλ‘μΈμ€λ§λ€ κ³ μ μ PCBκ° μμ±λκ³ , νλ‘μΈμ€κ° μ’ λ£λλ©΄ PCBκ° μ κ±°λ¨.
[컀λ μ€ν]
- κ°μ λ©λͺ¨λ¦¬λ μ€νκ΅¬μ‘°λ‘ λμ΄ μλ μ¬μ©μ 곡κ°κ³Ό 컀λ 곡κ°μΌλ‘ ꡬλΆλλ©°, μ¬μ©μ μ€ν - 컀λ μ€νμΌλ‘ λΆλ₯΄κΈ°λ ν¨.
- 컀λ μ€ν : 컀λ λͺ¨λμμλ§ μ κ·Ό κ°λ₯
- μ¬μ©μ μ€ν : μ¬μ©μ λͺ¨λμμλ§ μ κ·Ό κ°λ₯
PCBμ ꡬ쑰
- νλ‘μΈμ€μ μν : λκΈ°μ€, μ€ν μ€ λ± νλ‘μΈμ€μ μν
- νλ‘μΈμ€ λ²νΈ : κ° νλ‘μΈμ€μ κ³ μ μλ³ λ²νΈ (Process ID, PID)
- νλ‘κ·Έλ¨ μΉ΄μ΄ν° : μ΄ νλ‘μΈμ€μ λνμ¬ μ€νλ λ€μ λͺ λ Ήμ΄μ μ£Όμμ λν ν¬μΈν°. (Program Counter, PC)
- λ μ§μ€ν° κ΄λ ¨ μ 보
- λ©λͺ¨λ¦¬ μ ν μ 보 : νλ‘μΈμ€μ λ©λͺ¨λ¦¬ κ΄λ ¨ μ 보
- μ΄λ¦° νμΌ μ 보 : νλ‘μΈμ€λ₯Ό μν΄ μ΄λ¦° νμΌ λͺ©λ‘
Context Switching
컨ν μ€νΈ μ€μμΉμ CPUκ° ν νλ‘μΈμ€μμ λ€λ₯Έ νλ‘μΈμ€λ‘ μ ννκΈ° μν΄ PCBλ₯Ό κΈ°λ°μΌλ‘ νλ‘μΈμ€μ μνλ₯Ό μ μ₯νκ³ λ€μ 볡μμν€λ μΌλ ¨μ κ³Όμ μΌλ‘, μ¬λ¬ κ°μ νλ‘μΈμ€λ₯Ό λ²κ°μκ°λ©° μ€ννμ¬ CPU νμ©λ₯ μ λμ΄κΈ° μν΄ νμνλ©°, νλ‘μΈμ€κ° μ’ λ£λκ±°λ, μΈν°λ½νΈμ μν΄ λ°μλκΈ°λ ν©λλ€.
- νλ‘μΈμ€ 1μ΄ μ€ν μ€μ μΈν°λ½νΈ λ°μ -> νλ‘μΈμ€ 1μ μνλ₯Ό PCBμ μ μ₯.
- CPUκ° λμ§ μλλ‘ νκΈ° μν΄ νλ‘μΈμ€ 2μ μνλ₯Ό PCBλ‘λΆν° λΆλ¬μ CPUμ λ‘λ©.
- μΈν°λ½νΈ μ’ λ£ -> νλ‘μΈμ€ 1μ λ€μ CPUμ μ¬λ €μΌ ν¨.
- νλ‘μΈμ€ 1μ CPUμ μ¬λ¦¬κΈ° μν΄ μΈν°λ½νΈλ₯Ό λ°μμμΌ PCBμ νλ‘μΈμ€ 2μ μν μ μ₯.
- νλ‘μΈμ€ 1λ₯Ό λΆλ¬μ€κΈ° μν΄ PCBλ‘λΆν° μνλ₯Ό λΆλ¬μ΄.
- νλ‘μΈμ€ 1μ CPUμ λ‘λ©
컨ν μ€νΈ μ€μμΉμμ λ°μνλ λΉμ©
1. μ ν΄μκ°μ λ°μ
- 컨ν μ€νΈ μ€μμΉμ ν λ λ§λ€ μ ν΄μκ°( CPUκ° μΌμ νμ§ μκ³ μ¬λ μκ° )μ΄ μ겨 CPUμ κ°μ©μ±μ΄ λ¨μ΄μ§λ λΉμ©μ΄ λ°μ.
2. μΊμ λ―Έμ€
- νλ‘μΈμ€κ° κ°μ§κ³ μλ λ©λͺ¨λ¦¬ μ£Όμκ° κ·Έλλ‘ μμΌλ©΄ μλͺ»λ μ£Όμλ³νμ΄ μ겨 TLB κ³μΈ΅μμ μ£Όμλ³νμ μν΄ κΈ°μ‘΄μ μ£Όμλ₯Ό μ κ±°νλ μΊμ ν΄λ¦¬μ΄ κ³Όμ μ΄ μΌμ΄λ, μΊμλ―Έμ€κ° λ°μ.
3. μ€λ²ν€λ
- PCBλ₯Ό μ μ₯νκ³ , λΆλ¬μ€λ λΉμ©
- μ€μΌμ€λ§μ λν λΉμ©
- μ€λ λ κ°μ 컨ν μ€νΈ μ€μμΉ λΉμ©/μκ° < νλ‘μΈμ€ κ° μ»¨ν μ€νΈ μ€μμΉ λΉμ©/μκ°
>> μ무λλ μ€λ λλΌλ¦¬λ μ€νμμμ μ μΈνκ³ λ λͺ¨λ κ°μ 곡κ°μ 곡μ νλ€λ³΄λ, νλ‘μΈμ€μ λΉν΄ 컨ν μ€νΈ μ€μμΉ λΉμ©κ³Ό μκ°μ΄ μ λ€λ μ₯μ μ΄ μμ΅λλ€.
νλ‘μΈμ€ μν
νλ‘μΈμ€κ° μ€νλλ λμ λ³κ²½λλ κ³ μ μνλ₯Ό λ§ν©λλ€. PCBμ μ μ₯λλ©°, μΌλ°μ μΌλ‘ 5κ°μ§μ μνλ₯Ό κ°μ§λλ€.
- μμ± (NEW) : νλ‘μΈμ€κ° μμ±λ μνλ‘ PCBλ§ ν λΉλ μν. fork(), exec()μ κ°μ νΈμΆμ ν΅ν΄ νλ‘μΈμ€κ° μμ±λκΈ°λ§ ν μν.
- μ€λΉ (READY) : μ€νμ μν΄ κΈ°λ€λ¦¬λ μνλ‘, μ€λΉ νμ λ€μ΄κ°μ λκΈ°νλ©΄μ CPU μ€μΌμ€λ¬λ‘λΆν° CPU μμ κΆμ΄ λμ΄μ€κΈ°λ₯Ό κΈ°λ€λ¦¬λ μν.
- μ€ν (RUNNING) : CPU μμ κΆκ³Ό λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ, λͺ λ Ήμ΄λ€μ μνμ€μΈ μν.
- λκΈ° (WAITING) : νλ‘μΈμ€ μ€ν λμ€ (μ μΆλ ₯κ³Ό κ°μ) μ΄λ²€νΈκ° λ°μνμ¬ μ μ μ€λ¨λ μν
- μ’ λ£ (EXIT) : νλ‘μΈμ€κ° μ€νμ μλ£νκ³ μ’ λ£λ μνλ‘, λ©λͺ¨λ¦¬μμ μ κ±°λλ©°, CPU μμ κΆμ μμ μν.
<μ°Έκ³ μλ£>
π©π» μμ ν μ 볡νλ νλ‘μΈμ€ vs μ€λ λ κ°λ
νλμ μ΄ν΄νλ νλ‘μΈμ€ & μ€λ λ κ°λ μ 곡 μ§μ μμ΄ μ»΄ν¨ν°μ νλ‘κ·Έλ¨μ μ΄μ©νλλ°λ λ¬Έμ μμ΄ μμ§λ§ μννΈμ¨μ΄λ₯Ό κ°λ°νλ μ¬λμΌλ‘μ μ»΄ν¨ν° μ€ν λ΄λΆ μμλ₯Ό λ°μ Έλ³΄κ² λ λ, μ
inpa.tistory.com