μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 2017 Do it! Node.js νλ‘κ·Έλλ°(κ°μ ν) #Node.jsκ°μ #Node.js
- νμ΄μ
- IT νΉν
- node.js
- Node.js μ€μΉ
- κ°λ°νλ‘μ νΈ νΉν
- Today
- Total
Odds and Ends
μ΄μ체μ κ΅μ : Chap 04 Process λ³Έλ¬Έ
CHAP 04 Process
π νλ‘μΈμ€ κ°λ
* Processλ? λ©μΈ λ©λͺ¨λ¦¬μ λ‘λλμ΄ μ€νμ€μΈ νλ‘κ·Έλ¨
[νλ‘μΈμ€ μμ 5κ°μ§]
π‘μ½λ μΉμ (ν μ€νΈ μΉμ ) : κΈ°κ³μ΄ μ½λ, μ€ν μ½λ
π‘λ°μ΄ν° μΉμ : μ μ λ³μ (νλ‘κ·Έλ¨ μ€ν μ€ νμν data)
π‘μ€ν : ν¨μλ₯Ό νΈμΆν λ μμ λ°μ΄ν° μ μ₯μ₯μ, λ‘컬 λ³μ
π‘νλ‘κ·Έλ¨ μΉ΄μ΄ν°
: λ§μ΄ν¬λ‘ νλ‘μΈμμ μλ λ μ§μ€ν°, λ€μ μ€νλ λͺ λ Ήμ΄ μ£Όμλ₯Ό κ°μ§κ³ μμ΄ μ€νν κΈ°κ³μ΄ μ½λμ μμΉ μ§μ
π‘ν: μ€νμ€μ λ©λͺ¨λ¦¬ μμ²νλ©΄ ν λ©λͺ¨λ¦¬λ₯Ό ν λΉν΄μ€
[νλ‘μΈμ€ λ©λͺ¨λ¦¬ λ°°μΉ]
π νλ‘μΈμ€ μν
: νλ‘μΈμ€λ μ€νλλ©° μνκ° λ³νλ€. μνλ κ·Έ νλ‘μΈμ€μ νμ¬ νλμ λ°λΌ μ μλλ€. νλ‘μΈμ€λ λ€μμν μ€ νλμ μκ² λλ€.
1. new : νλ‘μΈμ€ μμ± μ€
2. running : λͺ λ Ήμ΄λ€ μ€ν μ€, CPUλ₯Ό κ°μ§κ³ μλ μν
3. wating : νλ‘μΈμ€κ° μ΄λ€ μ΄λ²€νΈ (μ μΆλ ₯ μλ£ or μ νΈ μμ κ°μ)κ° μΌμ΄λκΈΈ κΈ°λ€λ¦Ό
4. ready : . CPUκ° μ£Όμ΄μ§κΈ°λ₯Ό κΈ°λ€λ¦¬λ μν, νλ‘μΈμκ° μ²λ¦¬κΈ°μ ν λΉλκΈ°λ₯Ό κΈ°λ€λ¦°λ€
5. terminated : νλ‘μΈμ€μ μ€νμ΄ μ’ λ£λμλ€.
π‘ready vs wating μ°¨μ΄μ
- ready : λ€ μ€λΉ λ¨. CPU νλλ§ μμΌλ©΄ λ¨
- waiting : CPUμΈμλ μ€λΉ μλ¨. μ μΆλ ₯κ°μ νμ κΈ°λ€λ¦¬κ³ μμ
[νλ‘μΈμ€ μν λ€μ΄μ΄κ·Έλ¨]
: κ° νμ΄ν λ° μν μκΈ°
π‘scheduler dispatch (ready > running)
: μ μ΄κΆμ μ£Όλ κ². CPU κ°μ§
π νλ‘μΈμ€ μ μ΄ λΈλ‘ (PCB)
: μ΄μ체μ κ° νλ‘μΈμ€λ₯Ό μ μ΄νκΈ° μν΄ μ 보λ₯Ό μ μ₯ν΄ λλ κ³³μΌλ‘, νλ‘μΈμ€μ μν μ 보λ₯Ό μ μ₯νλ μλ£κ΅¬μ‘°
- κ° νλ‘μΈμ€λ μ΄μ체μ μμ νλ‘μΈμ€ μ μ΄λΈλ‘μ μν΄ ννλλ€.
- νλ‘μΈμ€ μ μ΄ λΈλ‘μ νΉμ νλ‘μΈμ€μ μ°κ΄λ μ¬λ¬ μ 보λ₯Ό μλ‘νλ€. (νλ‘κ·Έλ¨ μΉ΄μ΄ν°, μν λ±)
- PCB κ΅¬μ± μμ : νλ‘μΈμ€ μν, νλ‘κ·Έλ¨ μΉ΄μ΄ν°, CPU λ μ§μ€ν°, CPU Scheduling μ 보, λ©λͺ¨λ¦¬ κ΄λ¦¬ μ 보, Accounting μ 보, μ μΆλ ₯ μν μ 보
π‘PCBμ μ€νμ΄ ν¬ν¨λ κΉ?
: X, λ©λͺ¨λ¦¬ μ체λ₯Ό ν¬ν¨νμ§λ μκ³ λ©λͺ¨λ¦¬μ λν μ 보λ₯Ό κ°μ§λ€!!
π Context Switch (μ μ΄κΆ μ€ λ λ°μ, μν© μ λ³΄κ° λ°λλ€κ³ ν΄μ 컨ν μ€νΈ μ€μμΉ)
: p0κ° νμμμ μΈν°λ½νΈκ° κ±Έλ Έλ€κ³ κ°μ νμ λ, CPU μ μ΄κΆμ΄ μ΄μ체μ μ λμ΄κ°μ, μ΄ μ μ΄κΆμ P1μκ² μ£Όλ €κ³ ν¨. p0μ μμ μ μ μ₯νκ³ , νμ μ€νν λ λ€μ 볡ꡬν΄μΌν¨. μ΄ κ³Όμ μ 컨ν μ€νΈ μ€μμΉλΌκ³ νλ€.
> μ΄μ μμ μ μ₯, μλ‘ μμν μμ 볡μ.
- μΈν°λ½νΈλ μ΄μ체μ κ° cpuμ½μ΄λ₯Ό νμ¬ μμ μμ λΊμ΄ 컀λ 루ν΄μ μ€νν μ μκ² ν¨
- μΈν°λ½νΈ λ°μ μ, μμ€ν μ μΈν°λ½νΈ μ²λ¦¬κ° λλ ν λ¬Έλ§₯μ 볡ꡬνλλ‘ νμ¬ μ€νμ€μ΄ νλ‘μΈμ€λ₯Ό μ μ₯ (μ΄λ νλ‘μΈμ€λ₯Ό μ€λ¨νλ€κ° μ¬κ°νλ μμ μ΄λ€.)
- λ¬Έλ§₯μ PCBμ ννλλ€. λ¬Έλ§₯μ CPUμ λ μ§μ€ν° κ°, νλ‘μΈμ€ μν, λ©λͺ¨λ¦¬ κ΄λ ¨ μ 보 λ±μ ν¬ν¨νλ€.
- CPU μ½μ΄λ₯Ό λ€λ₯Έ νλ‘μΈμ€λ‘ κ΅ννλ €λ©΄ μ΄μ νλ‘μΈμ€ μν 보κ΄, μλ‘μ΄ νλ‘μΈμ€ μν 볡ꡬ μμ μ΄ νμνλ€. >> μ΄ μμ μ΄ μ»¨ν μ€νΈ μ€μμΉμ΄λ€.
- λ¬Έλ§₯κ΅νμ΄ μ§νλ λμ μμ€ν μ μλ¬΄λ° μΌμ λͺ»νκΈ° λλ¬Έμ, λ¬Έλ§₯κ΅ν μκ°μ μμν μ€λ²ν€λμ΄λ€. (μλλ κΈ°κ³λ§λ€ λ€λ¦)
- λ¬Έλ§₯ κ΅ν μκ°μ νλμ¨μ΄ μ§μμ ν¬κ² μ’μ°λ¨
π νλ‘μΈμ€ μ€μΌμ€λ§
- λ€μ€ νλ‘κ·Έλλ°μ λͺ©μ μ CPUμ μ΄μ©μ μ΅λν νκΈ° μν΄, νμ μ΄λ€ νλ‘μΈμ€κ° μ€νλλλ‘ νλ λ° μλ€.
> CPU λμ§λ§!
- νλ‘μΈμ€ μ€μΌμ€λ¬ : μ½μ΄μμ μ€ν κ°λ₯ν μ¬λ¬ νλ‘μΈμ€ μ€ νλμ νλ‘μΈμ€λ₯Ό μ ν (μλΆν μ ν΅ν΄ μ€ννλ νλ‘μΈμ€λ₯Ό μ£ΌκΈ°μ μΌλ‘ κ΅μ²΄νλ€. - λ³νμ±)
- λ€μ€ νλ‘κ·Έλλ° μ λ : νμ¬ λ©λͺ¨λ¦¬μ μλ νλ‘μΈμ€ μ
- I/O bound process : κ³μ°λ³΄λ€ I/O μμ μ λ λ§μ μκ°μ μλΉνλ νλ‘μΈμ€ (ex. νλλμ€ν¬ ν¬λ§· μμ )
- CPU bound process : κ³μ°μ λ λ§μ μκ°μ μλΉνμ¬ I/O μμ μ μμ²μ μμ£Ό μμ±νμ§ μλ νλ‘μΈμ€ (ex. νμ΄ κ° κ΅¬νκΈ° νλ‘κ·Έλ¨)
βA,B,C λͺ¨λ CPU-bound processλΌλ©΄, μ΄λ€ queueκ° λ§μ΄ μ°°κΉ?
= Ready Queue. I/O queueμ μμ²μ μμ±νμ§ μκΈ° λλ¬Έ
π CPU μ€μΌμ€λ§
- CPU μ€μΌμ€λ¬(short term μ€μΌμ€λ¬)μ μν μ ready νμ μλ νλ‘μΈμ€ μ€ μ νλ νλ‘μΈμ€μ cpu ν λΉνλ κ²μ΄λ€.
> CPU μ€μΌμ€λ¬λ CPUλ₯Ό ν λΉνκΈ° μν μ νλ‘μΈμ€λ₯Ό μμ£Ό μ νν΄μΌνλ€.
- job μ€μΌμ€λ¬(long term μ€μΌμ€λ¬)μ μν μ μ΄λ€ νλ‘μΈμ€λ₯Ό ready νμ λ£μ μ§ ν λΉνλ λμ΄λ€.
> λ©ν° νλ‘κ·Έλλ°μ μ μ΄νλ 컨νΈλ‘€λ¬λ‘ job λ¨μλ‘ λΆλ¦¬ν΄μ μ€μΌμ€μ μ§ λ€. (λλ¬Όκ², λλ¦¬κ² μ ν)
- Mid-term scheduler : Long-term + Short-term
π‘Job Queue (Long-term scheduler): λͺ¨λ νλ‘μΈμ€λ₯Ό ν¬ν¨νλ ν
π‘Ready Queue(CPU Scheduler(Short-term scheduler)) : ready μνμ νλ‘μΈμ€λ₯Ό ν¬ν¨νλ ν
π‘Device queues : I/Oλ₯Ό κΈ°λ€λ¦¬λ ν
π Scheduling Queues
: νλ‘μΈμ€κ° μμ€ν μ λ€μ΄μ€λ©΄ job queueμ λμ¬μ§λ€. μ΄ νλ μμ€ν μμ λͺ¨λ νλ‘μΈμ€λ€λ‘ ꡬμ±λλ€. μ£Ό λ©λͺ¨λ¦¬μ μ‘΄μ¬νλ©° process stateκ° readyμΈ νλ‘μΈμ€λ€μ ready queueλΌ λΆλ¦¬λ 리μ€νΈ μμ μ μ§λλ€. μ΄ νλ λ³΄ν΅ μ°κ²° 리μ€νΈλ‘ μ μ₯λλ€. ready queueμ ν€λλ 리μ€νΈμ 첫 λ²μ§Έμ λ§μ§λ§ PCBλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό ν¬ν¨νλ€. κ° PCBλ ready queueμ μλ λ€μ νλ‘μΈμ€λ₯Ό κ°λ¦¬ν€λ ν¬μΈν° νλλ₯Ό κ°μ§λ€. job queueμ ready queueλ§κ³ λ μ¬λ¬ νκ° μμ€ν μ μ‘΄μ¬νλ€. νλ‘μΈμ€κ° λμ€ν¬ κ°μ μ μΆλ ₯ μ₯μΉμ μμ²μ νλ€ κ°μ νμ. λ§μ½ μ΄ λμ€ν¬κ° λ€λ₯Έ νλ‘μΈμ€λ€μ μμ²μΌλ‘ λ°μλ€λ©΄, νλ‘μΈμ€λ λμ€ν¬λ₯Ό κΈ°λ€λ €μΌ ν μλ μλ€. νΉμ μ μΆλ ₯ μ₯μΉλ₯Ό λκΈ°νλ νλ‘μΈμ€λ€μ 리μ€νΈλ₯Ό device queueλΌκ³ νλ€. κ° μ₯μΉλ μ κ·Έλ¦Όμ²λΌ μμ μ device queueλ₯Ό κ°μ§λ€.
π queueing diagram
: νλ‘μΈμ€ μ€μΌμ€λ§μ 곡ν΅μ μΈ νν λ°©μμ μλ κ·Έλ¦Ό 2μ κ°μ queueing diagramμ΄λ€. κ° μ¬κ°νμ νλμ queueλ₯Ό λνλΈλ€. λ κ°μ§ νμ μ ν(ready queue, device queues)κ° μ‘΄μ¬νλ€. μμ queueλ₯Ό μλΉμ€νλ μμμ΄λ©°, νμ΄νλ μμ€ν μμ νλ‘μΈμ€λ€μ νλ¦μ νννλ€.
μλ‘μ΄ νλ‘μΈμ€λ μ²μμ ready queueμ λμΈλ€. νλ‘μΈμ€λ CPUλ₯Ό ν λΉλ°μ λ(dispatch)κΉμ§ ready queueμμ λκΈ°νλ€. νλ‘μΈμ€μ CPUκ° ν λΉλμ΄ μ€νλλ©΄ μλ μ¬κ±΄λ€ μ€ νλκ° λ°μν μ μλ€.
- νλ‘μΈμ€κ° I/O(μ μΆλ ₯)μ μμ²νμ¬ I/O queueμ λ£μ΄μ§ μ μλ€.
- νλ‘μΈμ€κ° child processλ₯Ό μμ±νκ³ κ·Έ νλ‘μΈμ€μ μ’ λ£λ₯Ό κΈ°λ€λ¦΄ μ μλ€.
- νλ‘μΈμ€κ° interruptμ κ²°κ³Όμ λ°λΌ κ°μ λ‘ CPUλ‘λΆν° μ κ±°λμ΄ ready queueμ λ€μ λμΌ μ μλ€.
νλ‘μΈμ€λ κ²°κ΅ waiting stateμμ ready stateλ‘ μ νλκ³ λ€μ ready queueμ λ£μ΄μ§λ€. νλ‘μΈμ€λ μ’ λ£λ λκΉμ§ μ΄ μ£ΌκΈ°λ₯Ό κ³μνλ©°, μ’ λ£λλ©΄ λͺ¨λ queueμμ μμ λκ³ νλ‘μΈμ€μ PCBμ μμμ λ°λ©(deallocate)νλ€.
π νλ‘μΈμ€μ λν μ°μ°
[νλ‘μΈμ€ μμ±]
- μ€νλλ λμ νλ‘μΈμ€λ μ¬λ¬ κ°μ μλ‘μ΄ νλ‘μΈμ€λ€μ μμ±ν μ μλ€.
- μμ±νλ νλ‘μΈμ€λ₯Ό λΆλͺ¨ νλ‘μΈμ€, μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ νλ‘μΈμ€λΌκ³ λΆλ₯Έλ€.
- μλ‘μ΄ νλ‘μΈμ€λ fork() μμ€ν μ½λ‘ μμ± in UNIX
- exec() μμ€ν μ½λ‘ μμ μ λ©λͺ¨λ¦¬ 곡κ°μ μλ‘μ΄ νλ‘κ·Έλ¨μ κ΅μ²΄νμ¬ νλ‘κ·Έλ¨ μ€ν μμ in UNIX
- μλ‘μ΄ νλ‘μΈμ€λ€μ κ°κ° λ€μ λ€λ₯Έ νλ‘μΈμ€ μμ±μ΄ κ°λ₯νλ©°, κ·Έ κ²°κ³Ό νλ‘μΈμ€ νΈλ¦¬λ₯Ό νμ±νλ€.
- λλΆλΆμ νλ μ΄μ체μ λ€μ μ μΌν νλ‘μΈμ€ μλ³μ(pid)λ₯Ό μ¬μ©νμ¬ νλ‘μΈμ€λ₯Ό ꡬλΆνλ€.
- pidλ μμ€ν μ κ° νλ‘μΈμ€μ κ³ μ ν κ°μ κ°μ§λλ‘ ν λΉλλ€.
π‘ λΆλͺ¨ νλ‘μΈμ€μ μμ νλ‘μΈμ€μ μμ 곡μ μ΅μ
1) λΆλͺ¨ μμκ° λͺ¨λ μμ 곡μ (κΈ°λ³Έ κ°)
2) μμμ΄ λΆλͺ¨μ μΌλΆ μμλ§ κ³΅μ
3) λΆλͺ¨ μμκ° μ΄λ ν μμλ 곡μ νμ§ μμ
π‘ νλ‘μΈμ€ μ€ν μ΅μ
1) λΆλͺ¨ μμ νλ‘μΈμ€ λμ μ€ν(λ©ν° νμ€νΉ)
2) λΆλͺ¨κ° μμμ μ’
λ£κΉμ§ κΈ°λ€λ¦Ό (wait)
[fork() μμ€ν μ½μ μ¬μ©νμ¬ λ³λμ νλ‘μΈμ€ μμ± - μ½λ]
>> μλ‘λ§λ€μ΄μ§ νλ‘μΈμ€μ pid = 0, return 0μΌλ child processμμ μμ μλ€.
[νλ‘μΈμ€ μ’ λ£]
: νλ‘μΈμκ° λ§μ§λ§ λ¬Έμ₯μ μ€νμ λλ΄κ³ , exit μμ€ν μ½μ μ¬μ©νμ¬ μ΄μ체μ μ μμ μ μμ λ₯Ό μμ²νλ©΄ μ’ λ£νλ€. μ΄ μμ μμ νλ‘μΈμ€λ μμ μ κΈ°λ€λ¦¬κ³ μλ λΆλͺ¨ νλ‘μΈμ€μ(wait μμ€ν μ½μ ν΅ν΄) μν κ°μ λ°νν μ μλ€. λ°ν μμλ 물리 λ©λͺ¨λ¦¬μ, κ°μλ©λͺ¨λ¦¬, μ΄λ¦° νμΌ, μ μΆλ ₯ λ²νΌλ₯Ό ν¬ν¨ν λͺ¨λ μμμ΄ ν λΉ ν΄μ λκ³ μ΄μ체μ λ‘ λ°λ©λλ€.
π‘λΆλͺ¨λ λ€μμ κ²½μ° abort() μμ€ν μ½μ μ΄μ©νμ¬ μμ μ€ νλμ μ€νμ μ’ λ£ν μ μλ€.
1) μμμ΄ ν λΉλ μμμ μ΄κ³Όνμ λ
2) μμμκ² ν λΉλ μ
λ¬΄κ° λ μ΄μ νμ μμ λ
3) λΆλͺ¨κ° exitνλλ° μ΄μ체μ λ λΆλͺ¨κ° exitν νμ μμμ΄ μ€νμ κ³μνλ κ²μ νμ©νμ§ μλ κ²½μ°
π‘ λͺλͺ μμ€ν μμλ λΆλͺ¨ νλ‘μΈμ€ μ’ λ£ ν μμ νλ‘μΈμ€κ° μ‘΄μ¬ν μ μλ€.
- cascading(μ°μ) μ’ λ£: νλ‘μΈμ€κ° μ μμ /λΉμ μμ μ΄λ μ’ λ£λλ©΄ λΉλ‘―λ λͺ¨λ μμνλ‘μΈμ€λ μ’ λ£λμΌν¨
- νλ‘μΈμ€ μ’ λ£ μ μ¬μ©νλ μμμ μ΄μ체μ κ° λμ°Ύμκ°
- μ’λΉ νλ‘μΈμ€: μμ νλ‘μΈμ€λ μ’ λ£λμμ§λ§ λΆλͺ¨ νλ‘μΈμ€κ° waitμ νΈμΆνμ§ μμκΈ° λλ¬Έμ νΈμΆ μκΉμ§ μ’ λ£ μνκ° νλ‘μΈμ€ ν μ΄λΈμ λ¨μμκ² λ μνλ₯Ό λ§ν¨
- κ³ μ νλ‘μΈμ€: λΈλͺ¨ νλ‘μΈμ€κ° wait() νΈμΆ λμ μ’ λ£λ₯Ό ν μν > μμν μμμ ν μ΄λΈμ μ’ λ£μνλ‘ λ¨μμμ΄μΌν¨
νλ‘μΈμ€κ° νμ
: μ 보 & μκ·Έλ μ£Όκ³ λ°μ νλ ₯
π‘νΉμ§
- λ€λ₯Έ νλ‘μΈμ€μ μν₯μ λ―ΈμΉκ±°λ μν₯μ λ°μ μ μλ€.
- μ 보 곡μ
- κ³μ° μλκ° λΉ¨λΌμ§
- λͺ¨λν
- νΈλ¦¬ν¨
- 2κ° μ΄μμ νλ‘μΈμ€κ° data share, in out ν¨κ» μ κ·Όν μ , κ°μ λ°μ΄ν° λμμ μ κ·Όνλ©΄ λ¬Έμ λ°μν¨ ! (λ μ΄μ€ 컨λμ μ΄λΌκ³ ν¨, κ²½μμν© μλ―Έ)
π νλ‘μΈμ€ κ° ν΅μ (IPC: Inter process Communication)
: μ΄μ체μ λ΄μμ μ€νλλ λ³ν νλ‘μΈμ€λ€μ λ 립μ μ΄κ±°λ νλ ₯μ μΈ νλ‘μΈμ€λ€ μΌ μ μλ€. μμ€ν μμ μ€ν μ€μΈ λ€λ₯Έ νλ‘μΈμ€λ€κ³Ό λ°μ΄ν°λ₯Ό 곡μ νμ§ μλ νλ‘μΈμ€λ λ 립μ μ΄λ€. νλ‘μΈμ€κ° μμ€ν μμ μ€ν μ€μΈ λ€λ₯Έ νλ‘μΈμ€λ€μκ² μν₯μ μ£Όκ±°λ λ°λλ€λ©΄ νλ ₯μ μΈ νλ‘μΈμ€μ΄λ€.
π‘νλ‘μΈμ€ νλ ₯μ νμ©νλ νκ²½μ μ 곡νλ μ΄μ
- μ 보 곡μ
- κ³μ° κ°μν (볡μ κ°μ μ²λ¦¬ μ½μ΄λ₯Ό κ°μ§ κ²½μ°μλ§ κ°λ₯ν¨μ μ μ!)
- λͺ¨λμ±
π‘ νλ ₯μ μΈ νλ‘μΈμ€λ€μ μ λ‘ λ°μ΄ν°λ₯Ό κ΅νν μ μλ ν΅μ (IPC) κΈ°λ²μ΄ νμνλ€.
- 곡μ λ©λͺ¨λ¦¬(shared memory): νλ ₯ νλ‘μΈμ€λ€μ μν΄ κ³΅μ λ©λͺ¨λ¦¬ μμ ꡬμΆλλ€. κ·Έ μμμ λ°μ΄ν°λ₯Ό μ½κ³ μ°κ³ ν¨μΌλ‘μ¨ μ 보λ₯Ό κ΅νν μ μλ€.
- λ©μμ§ μ λ¬(msg passing) : νλ ₯ νλ‘μΈμ€λ€ μ¬μ΄μ κ΅ν(send-receive)λλ λ©μμ§λ₯Ό ν΅νμ¬ μ 보κ΅νμ΄ μ΄λ£¨μ΄μ§λ€. μΆ©λμ ννΌν νμκ° μκΈ° λλ¬Έμ μ μ μμ λ°μ΄ν° κ΅νμ μ 리
π‘producer-consumer problem in νλ ₯νλ νλ‘μΈμ€ κ°
: νλ ₯ νλ‘μΈμ€λ₯Ό μν ν¨λ¬λ€μμΈ μμ°μ νλ‘μΈμ€λ μλΉμ νλ‘μΈμ€μ μν΄ μλΉλλ μ 보λ₯Ό μμ°
- 무νμ λ²νΌμΈ κ²½μ°(unbounded-buffer) : λ²νΌμ μ¬μ΄μ¦μ μ νμ΄ μκΈ° λλ¬Έμ κ³μν΄μ λ²νΌμ μ±μΈ μ μλ€.
- νμ λ λ²νΌμΈ κ²½μ°(bounded-buffer) : κ³ μ λ μ¬μ΄μ¦μ λ²νΌμΈ κ²½μ° λ²νΌκ° λ€ μ°Όλ€λ©΄ λμ΄μ μμ°μλ μλ¦¬κ° λκΈ° μ κΉμ§ λμ΄μ μμ°νλ©΄ μλκ³ , λ²νΌκ° ν λΉμ΄μλ€λ©΄ μλΉμλ μλΉν κ² μμμ μλ €μΌνλ€. (μ°λ νμ)
- νλ‘λμκ° enter() νΈμΆ
- μλΉμκ° remove() νΈμΆ
π 곡μ λ©λͺ¨λ¦¬(shared memory) μμ€ν μμμ νλ‘μΈμ€ κ° ν΅μ
- 곡μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ νλ‘μΈμ€ κ° ν΅μ μ νλ‘μΈμ€λ€μ΄ 곡μ νλ λ©λͺ¨λ¦¬ μμμ ꡬμΆν΄μΌνλ€.
- ν΅μ μ μ μ νλ‘μΈμ€μ μν΄ κ²°μ λλ©° μ΄μ체μ μκ΄μ΄ μλ!
- λμΌν λ©λͺ¨λ¦¬μ λμμ wirte μμ μ λ¬Έμ κ° λ°μ >> ν νλ‘μΈμ€λ§ μ°κΈ° κ°λ₯νλλ‘ λκΈ°ν ν΄μΌν¨
]π λ©μμ§ μ λ¬ (msg passing) μμ€ν μμμ νλ‘μΈμ€ κ° ν΅μ
- λ©μμ§ μ λ¬ λ°©μμ λμΌν μ£Όμ곡κ°μ 곡μ νμ§ μκ³ λ νλ‘μΈμ€λ€μ΄ ν΅μ νκ³ , κ·Έλ€μ λμμ λκΈ°ν ν μ μλλ‘ νμ©νλ κΈ°λ²μ μ 곡νλ€. λ©μμ§ μ λ¬ λ°©μμ ν΅μ νλ νλ‘μΈμ€λ€μ΄ λ€νΈμν¬μ μν΄ μ°κ²°λ λ€λ₯Έ μ»΄ν¨ν°λ€μ μ‘΄μ¬ν μ μλ λΆμ° νκ²½μμ νΉν μ μ©νλ€.
* λ κ°μ§ μ£Όμ°μ°
- send(message)
- receive(message)
: νλ‘μΈμ€κ° λ³΄λΈ λ©μμ§λ κ³ μ κΈΈμ΄(μμ€ν ꡬν easy, νλ‘κ·Έλλ° μμ difficult)μΌ μλ μκ³ , κ°λ³ κΈΈμ΄(μμ€ν ꡬν difficult, νλ‘κ·Έλλ° μμ easy)μΌ μλ μλ€.
π‘λ§μ½ νλ‘μΈμ€ Pμ Qκ° ν΅μ μ μνλ€λ©΄, ν΅μ μ°κ²°(link)κ° λ§λ€μ΄μ ΈμΌνλ€. νλμ λ§ν¬μ send()/receive() μ°μ°μ λ Όλ¦¬μ μΌλ‘ ꡬννλ λ€μμ λ°©λ²
- μ§μ ν΅μ or κ°μ ν΅μ
- λκΈ°μ or λΉλκΈ°μ ν΅μ
- μλ or λͺ μμ λ²νΌλ§
π μ§μ ν΅μ
- ν΅μ μ μ‘μμ μ μ΄λ¦μ΄ λͺ ννλ€.
- μ₯μ : νλ‘μΈμ€κ° νλ λμ΄λ λλ§λ€ νμν λ§ν¬ μκ° λμ΄μ ν¨μ¨μ λ¨μ΄μ§λ, μ°κ²°λ§ λλ©΄ νμ₯μ± good
- λ¨μ : νλ‘μΈμ€ μ΄λ¦ νΉμ ν΄μΌνκΈ° λλ¬Έμ μ΄λ¦ λ³κ²½ μ μ°κ΄λ λͺ¨λ λ€λ₯Έ νλ‘μΈμ€ λΆλΆ κ²μ¬ νμ(λͺ¨λμ± μ ν)
- send(p, message) - νλ‘μΈμ€ pμ λ©μμ§ μ μ‘
- receive(Q, messsage) - νλ‘μΈμ€ Qλ‘λΆν° λ©μμ§ μμ§
* μ§μ ν΅μ μ°κ²° νΉμ±
- ν΅μ μ μνλ κ° νλ‘μΈμ€ μλ€ μ¬μ΄μ μ°κ²°μ΄ μλμΌλ‘ ꡬμΆλλ€.
- μ°κ²°μ μ νν λ νλ‘μΈμ€ μ¬μ΄μλ§ μ°κ΄λλ€.
- ν΅μ νλ νλ‘μΈμ€λ€μ κ° μ μ¬μ΄μλ μ ννκ² νλμ μ°κ²°μ΄ μ‘΄μ¬ν΄μΌνλ€.
- μ‘μ μλ§ μμ μ μ΄λ¦μ μ§λͺ νλ κ²λ κ°λ₯ν¨(μ£Όμμ§μ λΉλμΉ)
π κ°μ ν΅μ
- λ©μμ§λ€μ΄ λ©μΌλ°μ€ λλ ν¬νΈλ‘ μ‘μ λκ³ κ·Έκ²μΌλ‘λΆν° μμ λλ€.
- λ©μΌλ°μ€λ κ³ μ μ idλ₯Ό κ°μ§λ€.
- λ€μμ μμ΄ν λ©μΌλ°μ€λ₯Ό ν΅ν΄ λ€λ₯Έ νλ‘μΈμ€λ€κ³Ό ν΅μ ν μ μλ€.
- λ νλ‘μΈμ€λ€μ΄ 곡μ λ©μΌλ°μ€λ₯Ό κ°μ§ λλ§ μ΄λ€ νλ‘μΈμ€κ° ν΅μ ν μ μλ€.
- send(A, message) : λ©μμ§λ₯Ό λ©μΌλ°μ€ Aλ‘ μ‘μ
- revecive(A, message) : λ©μμ§λ₯Ό λ©μΌλ°μ€ Aλ‘λΆν° μμ
* κ°μ ν΅μ μ°κ²° νΉμ±
- νμμ νλ‘μΈμ€λ€ μ¬μ΄μ μ°κ²°μ μ΄λ€ νλ‘μΈμ€κ° 곡μ λ©μΌλ°μ€λ₯Ό κ°μ§ λλ§ κ΅¬μΆλλ€.
- μ°κ²°μ λ κ° μ΄μμ νλ‘μΈμ€λ€κ³Ό μ°κ΄λ μ μλ€.
- ν΅μ νλ κ° νλ‘μΈμ€ μ¬μ΄μλ λ€μμ μλ‘ λ€λ₯Έ μ°κ²°μ΄ μ‘΄μ¬ν μ μκ³ , κ° μ°κ²°μ νλμ λ©μΌλ°μ€μ λμ
* κ°μ ν΅μ λ¬Έμ λ°μ μμ
: λ©μΌ λ°μ€ Aλ₯Ό νλ‘μΈμ€ p1,p2,p3κ° κ³΅μ ν λ νλ‘μΈμ€ p1 λ©μμ§λ₯Ό Aμ μ‘μ νκ³ (send(p1, A)) p2,p3λ κ°κ° receive()λ₯Ό μ€ννλ€. κ·Έλ λ€λ©΄ p2,p3 μ€ λκ° μ΄ λ©μμ§λ₯Ό μμ νλ κ°?
>> ν΄κ²°μ±
- νλμ λ§ν¬λ μ΅λ 2κ°μ νλ‘μΈμ€μ μ°κ΄λλλ‘ νμ©
- νμκ°μ μ΅λλ‘ νλμ νλ‘μΈμ€κ° receive() μ°μ°μ μ€ννλλ‘ νμ©
- μ΄λ νλ‘μΈμ€κ° λ©μμ§λ₯Ό μμ ν κ²μΈμ§ μμ€ν μ΄ μμλ‘ μ ννλλ‘ νλ€. μμ€ν μ μ‘μ μμκ² μμ μλ₯Ό μλ €μ€μΌνλ€.
* OSλ ν νλ‘μΈμ€μ λ€μμ νμ©νλ (μ°μ°)κΈ°λ² μ 곡
- μλ‘μ΄ λ©μΌ λ°μ€ μμ±
- λ©μΌλ°μ€λ₯Ό ν΅ν΄ μ‘μμ
- λ©μΌλ°μ€ μμ
π λκΈ°ν (Synchronization)
: λ©μμ§ μ λ¬μ blocking(λ΄μν)μ΄κ±°λ, no-blocking(λΉλ΄μν) λ°©μ μ΄λ€. κ°κ° λκΈ°μ/λΉλκΈ°μμΌλ‘λ λΆλ¦
- blocking send(synchronous) : μ‘μ νλ νλ‘μΈμ€λ λ©μμ§κ° μμ νλ‘μΈμ€ λλ λ©μΌλ°μ€μ μν΄ μμ λ λκΉμ§ λ΄μλλ€.
- blocking receive(asynchronous) : λ©μμ§κ° μ΄μ© κ°λ₯ν λκΉμ§ μμ νλ‘μΈμ€κ° λ΄μλλ€.
- non-blocking send : μ‘μ νλ νλ‘μΈμ€κ° λ©μμ§λ₯Ό 보λ΄κ³ μμ μ μ¬μμνλ€. (λ€μ λ©μμ§ λ³΄λ΄κΈ° > λ°μλ λ§λ μκ΄ μνλ μΉλ°κ°μ§)
- non-blocking receive : μ‘μ νλ νλ‘μΈμ€κ° μ ν¨ν λ©μμ§ λλ λμ λ°λλ€.
>> sendμ receive κ° λ€λ₯Έ μ‘°ν©λ κ°λ₯νλ€. λ§μΌ sendμ receiveκ° λͺ¨λ λ΄μνμΌ λ, μ‘μμ μκ° λλ°λΆ(μ½μ)λ₯Ό κ°μ§κ² λλ€.
π μμΌ
: μμΌμ ν΅μ μ κ·Ήμ μ λ»νλ€. λ νλ‘μΈμ€κ° λ€νΈμν¬ μμμ ν΅μ μ νλ €λ©΄ μ νλ‘μΈμ€λ§λ€ μ΄ λ κ°μ μμΌμ΄ νμν΄μ§λ€.
- μμΌμ IP μ£Όμ + ν¬νΈλ²νΈ λ κ°μ§λ₯Ό μ ν©ν νμμ΄λ€.
- μΌλ°μ μΌλ‘ μμΌμ ν΄λΌμ΄μΈνΈ-μλ² κ΅¬μ‘°λ₯Ό μ¬μ©νλ€.
- μλ²λ μ§μ λ ν¬νΈμ ν΄λΌμ΄μΈνΈ μμ² λ©μμ§κ° λμ°©νκΈ°λ₯Ό κΈ°λ€λ¦¬κ² λλ€. μμ²μ΄ μμ λλ©΄ μλ²λ ν΄λΌμ΄μΈνΈ μμΌμΌλ‘λΆν° μμ²μ μλ½ν¨μΌλ‘μ¨ μ°κ²°μ΄ μμ±λλ€.
- μ 보 λ°λ μͺ½/보λ΄λ μͺ½ λλ€ μμΌ μμ± κ°λ₯ (κΈνμͺ½μ΄ λ¨Όμ λ§λλ λ―)
>> μλ‘ λ€λ₯Έ μμ€ν μ λ νλ‘μΈμ€κ° λ€νΈμν¬λ₯Ό ν΅ν΄ λ©μμ§ μ λ¬ κ°λ₯
π UDP & TCP
* UDPλ?
: μλ λΉ λ¦, μΈν°λ·μΌλ‘ μμ± μ±ν
* TCPλ?
: 보λ΄λ κ³Όμ μμ TCP μ΄μ© μ, λ³΄λΈ λ¬Έμμ λ°λ μμκ° κ·Έλλ‘ μ μ§. μλ¬ μ²λ¦¬λ ν΄μ€. (μ ν λΌμΈ μ²λΌ, μλ‘ μ°κ²°ν΄λ κ²μ²λΌ λ°μ΄ν° μ μ‘λ¨. λλΆλΆμ μλΉμ€κ° TCPμ)
π μ격 νλ‘μμ νΈμΆ (RPCs) >> μμ€ν μ°κ²°λμ΄μμ΄ μ격 νΈμΆ κ°λ₯!!
: μμΌλ³΄λ€ μμ€ λμ ν΅μ μ΄ κ°λ₯νλ€. λ€νΈμν¬μ μ°κ²°λ λ μμ€ν μ¬μ΄μ ν΅μ μ μ¬μ©νκΈ° μνμ¬ νλ‘μμ νΈμΆ κΈ°λ²μ μΆμν νλ λ°©λ²μΌλ‘ μ€κ³λμλ€. νλ‘μΈμ€λ€μ΄ μλ‘ λ€λ₯Έ μμ€ν μμμ λμκ°κΈ° λλ¬Έμ λ©μμ§ κΈ°λ° ν΅μ μ ν΄μΌνλ€.
* μ€ν : μλ²μ μ€μ μ μ°¨μ λν ν΄λΌμ΄μΈνΈ μΈ‘ νλ‘μ(μ€κ³μλ²)μ΄λ€.
π Remote Method Invocation (RMI)
: λΆμ°λμ΄ μ‘΄μ¬νλ κ°μ²΄ κ°μ λ©μμ§ μ μ‘(λ©μλλ₯Ό νΈμΆνλ κ² ν¬ν¨)μ κ°λ₯νκ² νλ νλ‘ν μ½.
- RPCμ μ μ¬ν Java 맀컀λμ¦
- RMIλ₯Ό μ¬μ©νλ©΄ ν μ»΄ν¨ν°μ Java νλ‘κ·Έλ¨μ΄ μ격 κ°μ²΄μμ λ©μλλ₯Ό νΈμΆν μ μμ
+ π νμ΄ν
[ νμ΄ν ꡬν μ κ³ λ €ν 4κ°μ§ λ¬Έμ ]
1) νμ΄νκ° λ¨λ±‘ν ν΅μ μΈκ° μλ°©ν₯ ν΅μ μΈκ°?
2) μλ°©ν₯ ν΅μ μ΄ νμ©λλ€λ©΄ λ°μ΄μ€ λ°©μμΈκ°, μ μ΄μ€ λ°©μμΈκ°?
- λ°μ΄μ€ λ°©μ : νλ²μ νλ°©ν₯ μ μ‘λ§ (ex.무μ κΈ°)
- μ μ΄μ€ λ°©μ : λμμ μλ°©ν₯ λ°μ΄ν° μ μ‘ κ°λ₯ (ex.μ νν΅ν)
3) ν΅μ νλ λ νλ‘μΈμ€ κ° λΆλͺ¨ - μμ κ°μ νΉμ κ΄κ³κ° μ‘΄μ¬νλκ°?
4) νμ΄νλΌλ¦¬ λ€νΈμν¬λ₯Ό ν΅ν΄ ν΅μ μ΄ κ°λ₯νκ°? μλλ©΄ λμΌ κΈ°κ³ μ μ‘΄μ¬νλ λ νλ‘μΈμ€λΌλ¦¬λ§ ν΅μ κ°λ₯νκ°?
μΌλ° νμ΄ν (ordinary pipe)
: νμͺ½μΌλ‘λ§ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμΌλ©°, μ€μ§ λ¨λ°©ν₯ ν΅μ λ§ κ°λ₯νλ€. λ§μΌ μλ°©ν₯ ν΅μ μ΄ νμνλ€λ©΄, κ°κ° λ€λ₯Έ λ°©ν₯μ μ΄ 2κ°μ νμ΄νκ° νμ >> μΌλ° νμ΄νλ νμ΄νλ₯Ό μμ±ν νλ‘μΈμ€ μ΄μΈμλ μ κ·Ό λΆκ°λ₯νκΈ° λλ¬Έμ μ£Όλ‘ λΆλͺ¨ νλ‘μΈμ€κ° νμ΄νλ₯Ό μμ±νκ³ fork()λ‘ μμ±ν μμ νλ‘μΈμ€μ ν΅μ νκΈ° μν΄ μ¬μ©νλ€.
μ§λͺ νμ΄ν (named pipe)
: μΌλ° νμ΄νλ νμμ νλ‘μΈμ€κ° ν΅μ ν μ μλ λ°©λ²μ μ 곡νλ€. κ·Έλ¬λ μΌλ° νμ΄νλ μ€λ‘μ§ νλ‘μΈμ€λ€μ΄ μλ‘ ν΅μ νλ λμμλ§ μ‘΄μ¬νλ€. μ§λͺ νμ΄νλ μλ°©ν₯ ν΅μ μ΄ κ°λ₯νλ©°, λΆλͺ¨-μμ κ΄κ³κ° μλμ΄λ μ¬μ© κ°λ₯νλ€. μ¬λ¬ νλ‘μΈμ€ λ€μ΄ μ΄λ₯Ό μ¬μ©νμ¬ ν΅μ μ΄ κ°λ₯νλ€. μΆκ°λ‘ ν΅μ νλ‘μΈμ€κ° μ’ λ£λλλΌλ μ§λͺ νμ΄νλ κ³μ μ‘΄μ¬νλ€. > μ λμ€, μλμ° λλ€ μ§λͺ νμ΄ν μ 곡
'μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ΄μ체μ 6μ₯ CPU μ€μΌμ€λ§ (0) | 2022.10.28 |
---|---|
μ΄μ체μ κ΅μ Chap 05 μ€λ λ (0) | 2022.10.26 |
μ΄μ체μ κ΅μ : Chap03 μ΄μ체μ ꡬ쑰 (0) | 2022.10.18 |
μ΄μ체μ κ΅μ Chap02 μ»΄ν¨ν° ꡬ쑰 (0) | 2022.10.09 |
μ΄μ체μ κ΅μ Chap01 (0) | 2022.09.26 |