Process
π νλ‘μΈμ€λ?
- νλ‘μΈμ€λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ λ§νλ€.
- μμΌλ‘ μκΈ°ν  κ²μ λͺ¨λ μ¬μ©μ νλ‘κ·Έλ¨μ κ΄μ μμ 보λ κ²μ΄λ€.(μ΄μμ²΄μ  μλβοΈ)
νλ‘μΈμ€μ λ¬Έλ§₯(context)
- 
    νλ νλ‘μΈμ€λ λ©ν°νμ€νΉ νκ²½μ΄κΈ° λλ¬Έμ μ΄ μμ μ  μμ μλ€κ°λ€ νλ©΄μ μ€ννλ €λ©΄ νλ‘μΈμ€κ° μ΄λκΉμ§ μ€ννμλμ§λ₯Ό μ μ μλ λ¬Έλ§₯ μ λ³΄κ° νμνλ€. 
- CPUμν μνλ₯Ό λνλ΄λ νλμ¨μ΄ λ¬Έλ§₯- Program Counter
- κ°μ’
 register
 
- νλ‘μΈμ€μ μ£Όμ 곡κ°
    - code, data, stack
 
- code, data, stack
- νλ‘μΈμ€ κ΄λ ¨ 컀λ μλ£ κ΅¬μ‘°
    - PCB (Process Control Block) : νλ‘μΈμ€κ° μ€νλ  λλ§λ€ νλμ© λ§λ€μ΄μ νλ‘μΈμ€μ CPU,λ©λͺ¨λ¦¬λ₯Ό μΌλ§λ μ€μΌ ν μ§, μ΄λκΉμ§ μ€ννλμ§ μ΄μ νλμ νμ§λ μλμ§ κ΄λ¦¬νκΈ° μν μλ£κ΅¬μ‘°
- Kernal stack : νλ‘μΈμ€λ§λ€ λ³λλ‘ λλ€.
 
- PCB (Process Control Block) : νλ‘μΈμ€κ° μ€νλ  λλ§λ€ νλμ© λ§λ€μ΄μ νλ‘μΈμ€μ 
νλ‘μΈμ€μ μν (Process State)
- CPUκ° νλλΌκ³ κ°μ νμ λ νλ‘μΈμ€λ μνκ° λ³κ²½λλ©° μνλλ€.
Running
- CPUλ₯Ό μ‘κ³- instructionμ μνμ€μΈ μν
- Time interrupt,- System callμ΄ μκΈ°κ² λλ©΄- CPUλ₯Ό λ€μ λ΄μ΄μ£Όκ² λλ€.
Ready
- CPUλ₯Ό κΈ°λ€λ¦¬λ μν(λ©λͺ¨λ¦¬ λ±- CPUλ₯Ό μ»κΈ° μν λ€λ₯Έ 쑰건μ λͺ¨λ λ§μ‘±νκ³ )
- CPUλ₯Ό μ»κΈ° μν- Ready queueμμ κΈ°λ€λ¦¬κ³ μλ€.
Blocked (wait, sleep)
- CPUλ₯Ό μ£Όμ΄λ λΉμ₯- instructionμ μνν μ μλ μν
- Processμμ μ΄ μμ²ν event(ex. I/O)κ° μ¦μ λ§μ‘±λμ§ μμ μ΄λ₯Ό κΈ°λ€λ¦¬λ μν- μ) λμ€ν¬μμ νμΌμ μ½μ΄μμΌ νλ κ²½μ°
 
New
- νλ‘μΈμ€κ° μμ±μ€μΈ μν
Terminated
- μν(execution)μ΄ λλ μνμΈλ° μμ
μ΄ μμ ν λλ κ²μ μλκ³  μ λ¦¬ν  κ²μ΄ λ¨μμλ μνμ΄λ€.
PCB (Process Control Block)
- μ΄μ체μ κ° κ° νλ‘μΈμ€λ₯Ό κ΄λ¦¬νκΈ° μν΄ νλ‘μΈμ€λΉ μ μ§νλ μ 보
- λ€μμ κ΅¬μ± μμλ₯Ό κ°μ§λ€(κ΅¬μ‘°μ²΄λ‘ μ μ§).
1) OSκ° κ΄λ¦¬μ μ¬μ©νλ μ 보
- Process state, Process ID
- scheduling information, priority
2) CPU μν κ΄λ ¨ νλμ¨μ΄ κ°
- Program counter, registers
3) λ©λͺ¨λ¦¬ κ΄λ ¨
- Code, data, stackμ μμΉ μ λ³΄
4) νμΌ κ΄λ ¨
- Open file descriptorsβ¦
λ¬Έλ§₯ κ΅ν (Context Switch)
- CPUλ₯Ό ν νλ‘μΈμ€μμ λ€λ₯Έ νλ‘μΈμ€λ‘ λ겨주λ κ³Όμ 
- CPUκ° λ€λ₯Έ νλ‘μΈμ€μκ² λμ΄κ° λ μ΄μ체μ λ λ€μμ μννλ€.- CPUλ₯Ό λ΄μ΄μ£Όλ νλ‘μΈμ€μ μνλ₯Ό κ·Έ νλ‘μΈμ€μ- PCBμ μ μ₯
- CPUλ₯Ό μλ‘κ² μ»λ νλ‘μΈμ€μ μνλ₯Ό- PCBμμ μ½μ΄μ΄
 
βοΈ System callμ΄λ Interrupt λ°μμ λ°λμ Context switchκ° μΌμ΄λλ κ²μ μλλ€.
System callμ΄λ Interrupt λ°μ ν λ€λ₯Έ νλ‘μΈμ€μκ² CPUλ₯Ό λ겨쀬μ λ Context switchκ° μΌμ΄λλ κ²μ΄μ§ κ°μ νλ‘μΈμ€μκ² λ€μ CPUλ₯Ό 쀬μ λμ Context switchκ° μΌμ΄λ κ²μ΄ μλλ€.
- Context switchκ° μΌμ΄λλ©΄- cache memoryλ₯Ό λΉμμΌ νλλ° μ΄κ±° μμ²΄κ° μλΉν μ€λ²ν€λλ₯Ό μΌμΌν¨λ€.
νλ‘μΈμ€λ₯Ό μ€μΌμ€λ§νκΈ° μν ν
Job queue
- νμ¬ μμ€ν  λ΄μ μλ λͺ¨λ νλ‘μΈμ€μ μ§ν©
Ready queue
- νμ¬ λ©λͺ¨λ¦¬ λ΄μ μμΌλ©΄μ CPUλ₯Ό μ‘μμ μ€νλκΈ°λ₯Ό κΈ°λ€λ¦¬λ νλ‘μΈμ€μ μ§ν©
Device queues
- I/O deviceμ μ²λ¦¬λ₯Ό κΈ°λ€λ¦¬λ νλ‘μΈμ€μ μ§ν©
πΈ νλ‘μΈμ€λ€μ κ° νλ€μ μ€κ°λ©° μνλλ€.
π μ€μΌμ€λ¬ (Scheduler)
Long-term scheduler (μ₯κΈ° μ€μΌμ€λ¬ or job scheduler)
- μμ νλ‘μΈμ€ μ€ μ΄λ€ κ²λ€μ ready queueλ‘ λ³΄λΌμ§ κ²°μ 
- νλ‘μΈμ€μ memory(λ° κ°μ’ μμ)μ μ£Όλ λ¬Έμ  κ²°μ 
- degree of Multiprogramming(λ©λͺ¨λ¦¬μ μ¬λΌκ° μλ νλ‘μΈμ€μ μ) μ μ΄
- νμ§λ§ time sharing systemμλ λ³΄ν΅ μ₯κΈ° μ€μΌμ€λ¬κ° μλ€(무쑰건ready)
Short-term scheduler (λ¨κΈ° μ€μΌμ€λ¬ or CPU scheduler)
- μ΄λ€ νλ‘μΈμ€λ₯Ό λ€μλ²μ runningμν¬μ§ κ²°μ 
- νλ‘μΈμ€μ CPUλ₯Ό μ£Όλ λ¬Έμ  κ²°μ 
- μΆ©λΆν λΉ¨λΌμΌ ν¨ (millisecond λ¨μ)
Medium-term scheduler (μ€κΈ° μ€μΌμ€λ¬ or Swapper)
- time sharing systemμμλ μ€κΈ° μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ€.
- μ¬μ κ³΅κ° λ§λ ¨μ μν΄ μΌλΆ νλ‘μΈμ€λ₯Ό ν΅μ§Έλ‘ λ©λͺ¨λ¦¬μμ λμ€ν¬λ‘ μ«μλΈλ€.
- νλ‘μΈμ€μκ²μ memoryλ₯Ό λΊλ λ¬Έμ  κ²°μ 
- degree of Multiprogrammingμ μ΄
μ€κΈ° μ€μΌμ€λ¬λ₯Ό μ¬μ©νλ©΄μ λ°λλ νλ‘μΈμ€μ μν
Running
- CPUλ₯Ό μ‘κ³- instructionμ μνμ€μΈ μν
- Time interrupt,- System callμ΄ μκΈ°κ² λλ©΄- CPUλ₯Ό λ€μ λ΄μ΄μ£Όκ² λλ€.
Ready
- CPUλ₯Ό κΈ°λ€λ¦¬λ μν(λ©λͺ¨λ¦¬ λ±- CPUλ₯Ό μ»κΈ° μν λ€λ₯Έ 쑰건μ λͺ¨λ λ§μ‘±νκ³ )
- CPUλ₯Ό μ»κΈ° μν- Ready queueμμ κΈ°λ€λ¦¬κ³ μλ€.
Blocked (wait, sleep)
- I/Oλ±μ- eventλ₯Ό (μ€μ€λ‘) κΈ°λ€λ¦¬λ μν- μ) λμ€ν¬μμ νμΌμ μ½μ΄μμΌ νλ κ²½μ°
 
- μμ μ΄ μμ²ν eventκ° λ§μ‘±λλ©΄Readyμνκ° λλ€.
Suspended (stopped)
- μΈλΆμ μΈ μ΄μ λ‘ νλ‘μΈμ€μ μνμ΄ μ μ§λ μν
- νλ‘μΈμ€λ ν΅μ§Έλ‘ λμ€ν¬μ swap outλλ€.- μ) μ¬μ©μκ° νλ‘κ·Έλ¨μ μΌμ μ μ§μν¨ κ²½μ° (break key)
- μμ€ν μ΄ μ¬λ¬ μ΄μ λ‘ νλ‘κ·Έλ¨μ μ μ μ€λ¨μν΄(λ©λͺ¨λ¦¬μ λ무 λ§μ νλ‘μΈμ€κ° μ¬λΌμ μμ λ)
 
- μΈλΆμμ resumeν΄ μ£Όμ΄μΌActiveμνκ° λλ€.
π μ€λ λ (Thread)
- νλ‘μΈμ€ νλμ CPUμνλ¨μ(Program Counter)λ§ μ¬λ¬κ° λκ³ μλ κ²
- μ€λ λλ₯Ό μ¬μ©νλ μ΄μ λ λ©λͺ¨λ¦¬ μ μ½κ³Ό μνμλλ₯Ό λμ΄κΈ° μν΄μλΌκ³ λ³Ό μ μλ€.
- λ§μ½ κ°μ νλ‘μΈμ€λ₯Ό μ¬λ¬κ° μ€νμν€κ³ μΆμ λ νλ‘μΈμ€λ₯Ό μ¬λ¬κ° λ§λ€λ©΄ κ·Έλ§νΌ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μΌ νλκΉ λ©λͺ¨λ¦¬ λλΉκ° 컀μ§λ€. κ·Έλ¦¬κ³ κ·Έ νλ‘μΈμ€λ€ κ°μ λ¬Έλ§₯ κ΅νμ΄ μΌμ΄λλ€λ©΄ μ€λ²ν€λλ ν΄ κ²μ΄λ€.
- νμ§λ§ νλ‘μΈμ€μ μ£Όμ곡κ°(λ©λͺ¨λ¦¬)μ ν¨κ» μ°λ©΄μ κ° νλ‘κ·Έλ¨λ§λ€ PCBμ μ½λλ₯Ό μ΄λκΉμ§ μ€ννλμ§λ§ μ μ₯ν΄ λκ³ μ½λ μμμμ κ°μ λ€λ₯Έ λΆλΆμ μ½λλ§ μ€ννλ©΄ λ©λͺ¨λ¦¬λ₯Ό μλ μ μλ€(κ·Έ νλ‘κ·Έλ¨μ μ μ₯λ λ°μ΄ν°μ μ½λκ° λ°λλ κ²μ΄ μλλκΉ). μ¦, νλ‘μΈμ€μCodeμDataμμλ§ ν¨κ» μ°λ κ²μ΄λ€.
- νμ§λ§ κ° μ€λ λλ³λ‘ ν¨μλ₯Ό μ΄λκΉμ§ μ€ννλμ§ λ±μ μ λ³΄λ κ°μ μκ³  μμ΄μΌ νκΈ° λλ¬Έμ ν¨μ μ€νκ³Ό κ΄λ ¨λ μ λ³΄λ₯Ό μ μ₯νλ Stackμμμ λ°λ‘ μ¬μ©ν΄μΌ νλ€.
- κ·Έλμ νλμ νλ‘μΈμ€λ₯Ό λ§λ€κ³  μ€λ λλ₯Ό μμ±νλ©΄ codeμdataμμμ 곡μ νκ³ κ° μ€λ λμstackμμμ΄ μ¬λ¬κ° λ§λ€μ΄μ§λ€.
μ€λ λ μ¬μ©μ μ₯μ 
μλ΅μ± - μ¬μ©μ μ μ₯μμ λΉ λ₯΄κ² λκ»΄μ§λ€
- λ§μ½ μΉνμ΄μ§λ₯Ό λ‘λνλ€κ³ νμ λ μ΄λ―Έμ§μ ν μ€νΈλ₯Ό λΆλ¬μ€λ μμ μ μλΉν μκ°μ΄ 걸리λ μμ μΈλ° μ€λ λλ₯Ό νλλ§ μ¨μ μΉνμ΄μ§κ° μμ ν μμ±λ λκΉμ§ κΈ°λ€λ Έλ€κ° μ¬μ©μμκ² λ³΄μ¬μ£Όλ©΄ μΉνμ΄μ§λ₯Ό νμνκΈ° μν μμ μ΄ λλ λκΉμ§ μ¬μ©μλ λΉ νλ©΄λ§ λ³΄κ³ μμ κ²μ΄λ€. μ΄κ²μ κ΅μ₯ν λ΅λ΅νκ² λκ»΄μ§λ€.
- μ΄ λ λ©ν° μ€λ λλ₯Ό μ¬μ©ν΄ μμ μ νλ©΄ ν μ€λ λκ° μ΄λ―Έμ§λ₯Ό λΆλ¬μ€λ λμ λ€λ₯Έ μ€λ λλ μΌμ° λ‘λλ ν μ€νΈλ₯Ό μ¬μ©μμκ² λ¨Όμ  λ³΄μ¬μ£Όκ³ μλλ€λ μ§ νλ μΌμ μνν μ μκ² λλ€. κ·Έλ¬λ©΄ λ΅λ΅ν¨μ λ§μ΄ μ€μΌ μ μλ€.
μμ 곡μ
- μμμ μμ νλ―μ΄ νλ‘μΈμ€λ νλλ§ λκ³  PCλregisterλ§ λ°λ‘ μ¬μ©ν΄μ νλ‘μΈμ€λ₯Ό μ€ννλ©΄ μμμ ν¨μ¨μ μΌλ‘ μΈ μ μλ€.
κ²½μ μ±
- μ€ν μλ μΈ‘λ©΄μμλ νλ‘μΈμ€λ₯Ό μΆκ°νλ κ² λ³΄λ€λ μ€λ λλ₯Ό μΆκ°νλ κ²μ΄ ν¨μ¬ λΉ λ₯΄λ€.
- λ¬Έλ§₯ κ΅νμ΄ μΌμ΄λ¬μ λμλ μ€λ λ κ°μ νλ κ²μ΄ μ€λ²ν€λκ° ν¨μ¬ μ λ€.
λ³λ ¬μ±
- CPUκ° μ¬λ¬κ°μΈ νκ²½μμ κ°κ°μ μ€λ λκ° λ³λ ¬μ μΌλ‘ μμ μ ν μ μμ΄ λμμ μ²λ¦¬ν μ μλ μμ μ΄ λμ΄λλ€.
μ€λ λμ ꡬν μ€νμΌ
- μ€λ λλ₯Ό ꡬννλ μ€νμΌμ΄ λ€ κ°μ§ μλ€.
Kernel Threads
- μ΄μ체μ μ μ§μμ λ°μ κ΄λ¦¬λλ μ€λ λ
- κ·Έλμ OSκ° μ€λ λμ μ‘΄μ¬λ₯Ό μκ³ μλ€.
- μ) Windows 95/98/NT,Solaris,Digital UNIX,Mach
User Threads
- μ¬μ©μ λ 벨μμ λΌμ΄λΈλ¬λ¦¬μ μ§μμ λ°μ κ΄λ¦¬λλ μ€λ λ
- κ·Έλμ OSλ μ€λ λμ μ‘΄μ¬λ₯Ό μ μ μλ€.OSμ μ₯μμ 보면 νλ‘μΈμ€ νλκ° μ€νλκ³ μλ κ²μ΄λ€.
- μ¬μ©μ νλ‘μΈμ€ μ€μ€λ‘κ° μ€λ λλ₯Ό κ΄λ¦¬νλ€.
- μ) POSIX Pthreads,Mach C-threads,Solaris threads
그리고 real-timeμΌλ‘ κ΄λ¦¬λλ μ€λ λκ° μλλ° κ·Έλ₯ μ΄λ°κ² μꡬλ μ λλ‘ μκ³  μμΌλ©΄ λλ€κ³  νλ€.
