μ°λ¦¬κ° νν λ§νλ νλ‘κ·Έλ¨μ΄λ νμΌμ΄ μ μ₯ μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μνμ΄λ©° μ»΄ν¨ν°μμ μ€νλλ λͺ λ Ήμ΄ λͺ¨μμ΄ λ€μ΄ μλ λ°μ΄ν° λ©μ΄λ¦¬λ₯Ό μλ―Ένλ€. κ·Έκ²μ λλΈν΄λ¦νμ¬ μ€νμν€κΈ° μ κΉμ§λ νλ‘κ·Έλ¨ μ체λ‘λ μλ¬΄λ° μλ―Έκ° μλ€. νλ‘κ·Έλ¨μ μ€ννλ©΄ νλ‘κ·Έλ¨ μμ λ€μ΄ μλ λͺ λ Ήμ΄κ° ν μ€μ© μ€νλλ©΄μ νλ‘κ·Έλ¨μ λκ° νλμ νλ μνκ° λλ€. μ΄λ₯Ό νλ‘μΈμ€λΌκ³ νλ€.
Q. νλ‘μΈμ€μ μ€λ λμ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
1. νλ‘μΈμ€(Process)
- μ΄μ체μ λ‘λΆν° μμ(νλ‘μΈμ, νμν μ£Όμ 곡κ°, λ©λͺ¨λ¦¬ λ±)μ ν λΉλ°λ μμ μ λ¨μμ΄μ μ»΄ν¨ν°μμ μ€νλκ³ μλ νλ‘κ·Έλ¨μ λ§νλ©° CPUμ€μΌμ€λ§μ λμμ΄ λλ μμ (task)μ΄λΌλ μ©μ΄μ κ±°μ κ°μ μλ―Έλ‘ μ°μΈλ€.
- νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ©΄ νλ‘μΈμ€κ° μΈμ€ν΄μ€ν(λ
립μ μΈ κ°μ²΄)κ° μΌμ΄λκ³ , μ΄ν μ΄μ체μ μ CPU μ€μΌμ€λ¬μ λ°λΌ CPUκ° νλ‘μΈμ€λ₯Ό μ€ννλ€.
β» ex) Pinko.exe μ€ννμΌμ λ λ² ν΄λ¦νλ©΄ Pinko'νλ‘μΈμ€'κ° μμλλ€.
- λ 립λ λ©λͺ¨λ¦¬ μμ(Code, Data, Stack, Heapμ ꡬ쑰)μ ν λΉ λ°λλ€.
- κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μ μ€νλκ³ , ν νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£κ΅¬μ‘°μ μ κ·Όν μ μλ€.
( νλ‘μΈμ€μ μν )
μμ±(create) | - fork( ) λλ exec( )ν¨μλ₯Ό ν΅ν΄ μμ±ν¨. PCBκ° ν λΉλ¨. - fork( ) λΆλͺ¨ νλ‘μΈμ€μ μ£Όμ 곡κ°μ κ·Έλλ‘ λ³΅μ¬νλ©°, μλ‘μ΄ μμ νλ‘μΈμ€λ₯Ό μμ±νλ ν¨μ. μ£Όμ 곡κ°λ§ 볡μ¬ν λΏμ΄μ§ λΆλͺ¨ νλ‘μΈμ€μ λΉλκΈ° μμ λ±μ μμνμ§λ μλλ€. - exec( ) μλ‘κ² νλ‘μΈμ€λ₯Ό μμ±νλ ν¨μμ΄λ€. |
λκΈ°(ready) | - λ©λͺ¨λ¦¬ 곡κ°μ΄ μΆ©λΆνλ©΄ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ μλλ©΄ μλ μνλ‘ λκΈ°νκ³ μμΌλ©° CPUμ€μΌμ€λ‘λΆν° CPUμμ κΆμ΄ λμ΄μ€κΈ°λ₯Ό κΈ°λ€λ¦¬λ μνμ΄λ€ |
λκΈ° μ€λ¨(ready suspended) | - λ©λͺ¨λ¦¬ λΆμ‘±μΌλ‘ μΌμμ€λ¨λ μνμ΄λ€. |
μ€λ¨(blocked) | - μ΄λ€ μ΄λ²€νΈκ° λ°μν μ΄ν κΈ°λ€λ¦¬λ©° νλ‘μΈμ€κ° μ°¨λ¨λ μν.I/O λλ°μ΄μ€μ μν μΈν°λ½νΈλ‘ μ΄λ° νμμ΄ λ§μ΄ λ°μλλ€. |
μΌμ μ€λ¨(block suspended) | - μ€λ¨λ μνμμ νλ‘μΈμ€κ° μ€νλλ €κ³ νμ§λ§ λ©λͺ¨λ¦¬ λΆμ‘±μΌλ‘ μΌμ μ€λ¨λ μνμ΄λ€. |
μ€ν(running) | |
μ’ λ£(terminated) | - λ©λͺ¨λ¦¬μ CPU μμ κΆμ λͺ¨λ λκ³ κ°λ μνλ₯Ό λ§νλ€. λΆλͺ¨ νλ‘μΈμ€κ° μμ νλ‘μΈμ€λ₯Ό κ°μ μν€λ λΉμλ°μ μ’ λ£(abort)λ‘ μ’ λ£λλκ²λ μλ€ |
Q. PCB?
νλ‘μΈμ€ μ μ΄ λΈλ‘(Process Control Block)μ μ΄μ체μ μμ νλ‘μΈμ€μ λν λ©νλ°μ΄ν°λ₯Ό μ μ₯ν 'λ°μ΄ν°'λ₯Ό λ§νλ€. νλ‘μΈμ€μ μ€μν μ 보λ₯Ό ν¬ν¨νκ³ μκΈ° λλ¬Έμ μΌλ° μ¬μ©μκ° μ κ·Όνμ§ λͺ»νλλ‘ μ»€λ μ€νμ κ°μ₯ μλΆλΆμμ κ΄λ¦¬λλ€.
Q. λ©νλ°μ΄ν°?
λ©νλ°μ΄ν°(metadata)λ λ°μ΄ν°μ λν λ°μ΄ν°μ΄λ€. λλμ μ 보λ₯Ό ν¨μ¨μ μΌλ‘ μ°Ύμλ΄μ μ΄μ©νκΈ° μν΄ μΌμ ν κ·μΉμ λ°λΌ 컨ν μΈ μ λνμ¬ λΆμ¬λλ λ°μ΄ν°μ΄λ€.
2. μ€λ λ(Thread)
- νλ‘μΈμ€ λ΄μμ μ€νλλ μ¬λ¬ νλ¦μ λ¨μ
- κ°κ°μ μ€λ λλ λ³λμ λ μ§μ€ν°μ μ€νμ κ°κ³ μμ§λ§(-> μ΄λ κ° μ€λ λμμ μ€νλλ ν¨μμ λ‘컬 λ³μλ€μ΄ μ€λ λ λ§λ€ μλ€λ μλ―Έ), ν λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μλ€.
- λ©ν° μ€λ λ: νλμ νλ‘κ·Έλ¨ μμμ μ¬λ¬ μμ μ ν΄κ²°νλ κ².
- μ½ν μ€νΈ μ€μμΉ(context switch) : μ¬λ¬ νλ‘μΈμ€μ μ¬λ¬ μ€λ λλ₯Ό λμμ μ€νν΄μΌ νλ μ΄μ체μ λ μ΄λ κ² μ¬λ¬ νλ‘μΈμ€μ κ° νλ‘μΈμ€ μμ μλ μ€λ λλ€μ μΌμ μκ°λ§λ€ λ²κ°μ κ°λ©΄μ μ€ννλ κ². μ¦, κ° μ€λ λλ₯Ό μ€ννλ€ λ§κ³ λ€λ₯Έ μ€λ λλ₯Ό λ§μ μ€ννλ κ³Όμ μ μ½ν μ€νΈ μ€μμΉλΌκ³ νλ€. 컨ν μ€νΈ μ€μμΉ μ€νμ κΈ°λ³Έμ μΌλ‘ 'μ¬λ μ μ₯μμ μΎμ ν μ μλ' κ°κΈμ κΈ΄ μκ°μΌλ‘ μ΄λ£¨μ΄ μ§λ€. μ΄ μκ° λ¨μλ₯Ό νμ μ¬λΌμ΄μ€(time slice)λΌκ³ νλ€. CPUκ°μμ μ€λ λμ κ°μκ° κ°κ±°λ μ€λ λ κ°μκ° λ μ μΌλ©΄ 컨ν μ€νΈ μ€μμΉκ° λ°μν μ΄μ κ° μ μ§λ§ μ€λ λ κ°μκ° λ λ§μΌλ©΄ λ°λμ μ΄λ CPU μμμλ λ°μνλ€. (Runnable μ€νμ€μ μ€λ λκ° cpuκ°μλ³΄λ€ λ§μ κ²½μ°μλ§ μ±λ₯ λ¬Έμ κ° λ°μ.)
Q. λ©μΈ μ€λ λκ° λ¨Όμ μ’ λ£λλ©΄ μ΄λ»κ² λ κΉ?
λ©μΈ μ€λ λκ° μ΄λ―Έ μ’ λ£λμμ§λ§, λ€λ₯Έ μ€λ λκ° μμ§ λκ°λ₯Ό νκ³ μμ΄ νλ‘μΈμ€λ μ’ λ£νμ§ μκ³ κ³μ λ¨μ μλ μν©μ΄ λλ€. μ΄λ₯Ό μ’λΉ νλ‘μΈμ€λΌκ³ νλ€.
Reference.
λμ 1 : κ²μ μλ² νλ‘κ·Έλλ° κ΅κ³Όμ (κΈΈλ², λ°°νμ§)
λμ 2 : λ©΄μ μ μν CS μ 곡μ§μ λ ΈνΈ (κΈΈλ², μ£Όνμ² )
'π¨π»βπ» programming > β½ μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
(OS) CPU μ€μΌμ€λ§ (0) | 2022.12.13 |
---|---|
(OS) TCP/IP, UDP κ³μΈ΅κ΅¬μ‘°, OSI (2) | 2022.09.20 |
(OS) λ€νΈμν¬ κΈ°μ΄ (0) | 2022.09.07 |
(OS) μ΄μ체μ μ λ©λͺ¨λ¦¬ (0) | 2022.07.29 |
(OS) μλ£ν, λ°μ΄ν° ν¬κΈ° λ° μ μ μ ν <limits> (1) | 2022.07.06 |
μ νλ κ² λ³΄λ€ λ«κ² μ§
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!