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
μΌλ‘ κ΄λ¦¬λλ μ€λ λκ° μλλ° κ·Έλ₯ μ΄λ°κ² μꡬλ μ λλ‘ μκ³ μμΌλ©΄ λλ€κ³ νλ€.