π’ chap13. λμμ±
β 13.1 λμμ± μκ°
- μμ¬μ½λ seudo-code μ¬μ©
- λμ μμ€ν concurrent systemκ³Ό λ³Έμ§μ μμ±
- POSIX μ€λ λ© λΌμ΄λΈλ¬λ¦¬ POSIX threading library
- λμμ μ€νλλ νλ‘κ·Έλ¨ λ΄λΆμ μ¬λ¬ λ‘μ§μ΄ μλ€λ μλ―Έ
- λμμ μ¬λ¬ μμ μ μ²λ¦¬ν μ μλ νλ‘κ·Έλ¨μ μμ±νλ κ°λ ₯ν λꡬ
- μ£Όλ‘ μ»€λμμ μ§μνλλ°, 컀λμ μ΄μ체μ μ μ¬μΈ΅λΆμ μλ€.
- λμμ μ²λ¦¬νλ μ΄μ
- νμΌμ λ€μ΄λ‘λνλ λμ μΉ μν
- μ νλΈμμ λΉλμ€λ₯Ό λ³Ό λμ κ°μ λΉλμ€μ€νΈλ¦¬λ° μλλ¦¬μ€ λΉλμ€ νλ μ΄μ΄λ μ΄μ μ λ€μ΄λ°μ μ½ν μΈ , μ¦ μ²ν¬chunkλ₯Ό κ³μ 보λ λμ λ€μ λΉλμ€ μ²ν¬λ₯Ό λ€μ΄λ‘λ
- μλ νλ‘μΈμ± νλ‘κ·Έλ¨ λ°±κ·ΈλΌμ΄λμμ λμμ μ¬λ¬ μμ μ μ€ν μλλ‘ νμ΄ννλ λμμλ λ§μΆ€λ² κ²μ¬κΈ°λ ν¬λ§·ν°κ° λ°±κ·ΈλΌμ΄ λμμ μ€ν
- ννκ³Ό λλΆμ΄ 골칫거리λ ν¨κ»
- μμ μ΄ λ³λ ¬μ μΌλ‘ μ€νλλ€λ μλ―Έμ΄μ§λ§, μλ°ν λ§ν΄ βμ°Έβμ μλλλ€ λμμ μ΄λΌλ λ§μ λ³λ ¬μ μΈ κ²κ³Όλ λ€λ₯΄κΈ° λλ¬Έ
β 13.2 λ³λ ¬μ±
- λ³λ ¬μ λ κ°μ§κ° λμμ λ°μνλ€λ μλ―Έ
- λμ μμ€ν μμλ λ€λ₯Έ μμ μ΄ κ³μ μ€ννλ €λ©΄ ν μμ μ μΌμ μ μ§
- νλ‘μΈμ± μ λprocessing unitμ λΆλ¦¬νκ³ κ²©λ¦¬νλ©° κ°κ° νΉμ μμ μ ν λΉ
- κ°μμ CPUκ° λ΄λΆμ μ½μ΄λ₯Ό μ€μ§ νλλ§ κ°μ Έμ λ³λ ¬ μμ μ νν μ μλ€κ³ κ°μ
- λλΆλΆμ μκ³ λ¦¬λ¬μ μμ°¨μ sequential μ΄λ©° λ³Έμ§μ μΌλ‘ λ³λ ¬μ μ΄μ§λ μμ΅λλ€. μ€λ λ©μ‘°μ°¨ κ° μ€λ λλ λ³λ ¬μ μΈ μ€ν νλ¦ excution flow μΌλ‘ λλ μ μλ μ¬λ¬ μμ°¨μ μ§μμ΄λ₯Ό κ°μ΅λλ€.
- μμ°¨μ μκ³ λ¦¬λ¬μ μ΄μ체μ μ μν΄ μ€νμ λ³λ ¬μ μΈ νλ¦μΌλ‘ μ½κ² μλ λΆν λ μ μμ΅λλ€. λ°λΌμ λ©ν° μ½μ΄ CPUλΌλ©΄ νΉμ CPU μ½μ΄μ μ€ν νλ¦μ κ°κ° ν λΉν΄μΌ νλ©°, ν΄λΉ μ½μ΄μ λ κ° μ΄μμ μ€ν νλ¦μ΄ ν λΉλμλ€λ©΄ μ΄λ€μ λͺ¨λ λ³λ ¬μ μΌλ‘ μ€νλ μ μκ³ λμμ μΈ νμκ° μ¦μ κ΄μ°°λ©λλ€.
- λ©ν° μ½μ΄ μμλ μ¬μ€μ μ½μ΄ κ° λ³λ ¬μ± λ° λμΌ μ½μ΄μ λμμ±μ΄ λ λ€ λ³΄μ΄λ, νΌν©λ νμκ° λνλ©λλ€.
- νμ¬μ μ΄μ체μ λ μμ§ λΆν μμ μ μννμ§ λͺ»ν©λλ€
β 13.3 λμμ±
- λ€μ€ μμ multitasking β λμμ±μ κ°μ κ°λ μ
- μμ€ν μ΄ λμμ μ¬λ¬ μμ μ κ΄λ¦¬ν λ, λ°λμ μμ μ΄ λ³λ ¬μ μΌλ‘ μ€νμ€μ΄λΌλ μλ―Έλ μλ
- μμ μ€μΌμ€λ¬ task schedulerλ μλ‘ λ€λ₯Έ μμ μ μμ£Ό λΉ λ₯΄κ² μ ννλ©°, μλΉν 짧μ μκ° λμ κ°κ°μ μμ μ μμ£Ό μ‘°κΈμ© μνν©λλ€.
- μ νswitching
- μΈμμ μΈ λ³λ ¬μ±μ ν νν
- λ©ν±μ€λ λ€μ€ μμ κ³Ό λμμ μΈ νλ‘μΈμ€λ₯Ό μ²λ¦¬νκΈ° μν΄ κ³ μλ μ΅μ΄μ μ΄μ체μ
- POSIX νΈν μ΄μ체μ
β 13.4 μμ μ€μΌμ€λ¬ μ λ
- λͺ¨λ λ€μ€ μμ (λ©ν°νμ€νΉ ) μ΄μ체μ λ 컀λμ μμ μ€μΌμ€λ¬ μ λ task scheduler unit λλ μ€μ¬μ μ€μΌμ€λ¬ μ λscheduler unitμ΄ μμ΄μΌ ν©λλ€.
- μμ
μ€μΌμ€λ¬ μ λμ κ΄ν λͺ κ°μ§ μ¬ν
- μ€μΌμ€λ¬λ μ€νμ κΈ°λ€λ¦¬λ μμ μ λν λκΈ°μ΄queueμ΄ μμ΅λλ€. μμ task or jobμ΄λ μ€ν μ λ³λμ νλ¦μμ μνλμ΄μΌ νλ μμ λ€μ μλ―Έν©λλ€.
- μΌλ°μ μΌλ‘ μ΄λ¬ν λκΈ°μ΄μ μ°μ μμκ° λμ μμ μ΄ λ¨Όμ μμλλλ‘ μ νν©λλ€.
- λͺ¨λ μμ μ¬μ΄μλ μμ μ€μΌμ€λ¬ νλ‘μΈμ€ μ λμ κ΄λ¦¬νκ³ κ³΅μ ν©λλ€. νλ‘μΈμ€ μ λμ΄ λΉμ΄ μμ λ(νλ‘μΈμ€ μ λμ μ¬μ©νλ μμ μ΄ μλ κ²½μ°), μμ μ€μΌμ€λ¬λ λ€λ₯Έ μμ μ΄ νλ‘μΈμ μ λμ μ¬μ©νλλ‘ νκΈ° μ μ λκΈ°μ΄μμ μ΄ μμ μ μ νν΄μΌ ν©λλ€. μμ μ΄ μ’ λ£λλ©΄ μμ μ€μΌμ€λ¬λ νλ‘μΈμ μ λμ ν΄μ ν΄ λ€μ μ¬μ©ν μ μλλ‘ ν λ€μ λ λ€λ₯Έ μμ μ μ νν©λλ€. μ΄λ μμ μ€μΌμ€λ§task scheduling μ΄λΌκ³ νλ©°, μμ μ€μΌμ€λ¬κ° μ΄λ₯Ό λ¨λ μΌλ‘ 맑μ΅λλ€.
- μμ μ€μΌμ€λ¬κ° μ¬μ©ν μ μλ μ¬λ¬ μ€μΌμ€λ§ μκ³ λ¦¬λ¬μ΄ μ‘΄μ¬ν©λλ€. νμ§λ§ μ΄ λͺ¨λ μκ³ λ¦¬λ¬μ νΉμ μꡬ μ¬νμ λ€λ£¨μ΄μΌ ν©λλ€. μλ₯Ό λ€λ©΄, μκ³ λ¦¬λ¬μ λͺ¨λ 곡νν΄μΌfair νλ©° μ΄λ€ μμ λ μ€λ μκ° λμ μ νλμ§ λͺ»ν μ± λκΈ°μ΄μμ κΈ°μ μνλ‘starved κ³μ κΈ°λ€λ €μλ μ λ©λλ€.
- μ νν μ€μΌμ€λ§ μ λ΅μ λ°λΌ μ€μΌμ€λ¬κ° νλ‘μΈμ€ μ λμ μ¬μ©νλ €λ©΄ μμ μ νΉμ ν νμ μ¬λΌμ΄μ€time slice λλ νμ νν time quantumμ μ§μ ν΄μΌ ν©λλ€. λλ μ€μΌμ€λ¬λ λ°λμ μμ μ΄ νλ‘μΈμ μ λμ ν΄μ ν λκΉμ§ κΈ°λ€λ €μΌ ν©λλ€.
- μ€μΌμ€λ§ μ λ΅μ΄ μ μ νpreemptiveμΌλ, μ€μΌμ€λ¬λ μ€ν μ€μΈ μμ μΌλ‘λΆν° CPU μ½μ΄λ₯Ό κ°μ λ‘ νμν΄μ λ€μ μμ μ μ½μ΄λ₯Ό μ 곡ν μ μμ΄μΌ ν©λλ€. μ΄λ₯Ό μ μ μ€μΌμ€λ§ preemptive schedulingμ΄λΌκ³ ν©λ λ€. λν μμ μ΄ CPUλ₯Ό μλ°μ μΌλ‘ ν΄μ νλ λ€λ₯Έ μ λ΅μ λΉμ μ μ€μΌμ€λ§ cooperative scheduling μ΄λΌκ³ ν©λλ€.
- μ μ μ€μΌμ€λ§ μκ³ λ¦¬λ¬μ νμ μ¬λΌμ΄μ€λ₯Ό μλ‘ λ€λ₯Έ μμ κ°μ κ· λ±νκ³ κ³΅ννκ² λ°°λΆνλ €κ³ ν©λλ€. μ°μ μμκ° μλ μμ μ λ μμ£Ό μ νλ μ μκ³ μ€μΌμ€λ¬μ ꡬνμ λ°λΌ λ κΈ΄ νμ μ¬λΌμ΄μ€λ₯Ό μ»μ μ μμ΅λλ€.
- μ ν λΆμ€
β 13.5 νλ‘μΈμ€μ μ€λ λ
- μ΄μ체μ μμ μμ μ΄λ νλ‘μΈμ€ λλ μ€λ λ
- μλΆν time-sharing λλ μ μ ν μ€μΌμ€λ¬
- μ μ ν μ€μΌμ€λ¬κ° μ€ν μ€μΈ νλ‘μΈμ€λ₯Ό μ€λ¨μκΈ°κ³ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μ€ν μνλ‘ λ°κΏ λλ§λ€ λ¬Έλ§₯κ΅νμ΄ λ°μ
- λ¬Έλ§₯ κ΅νμ΄ λΉ λ₯΄λ©΄ λΉ λ₯Όμλ‘, μ¬μ©μλ μμ μ΄ λ λ³λ ¬μ μΌλ‘ μ€νλλ€κ³ μ¬κΉλλ€. ν₯λ―Έλ‘κ²λ λλΆλΆμ μ΄μ체μ λ μ μ ν μ€μΌμ€λ¬λ₯Ό μ¬μ©
- λ¬Έλ§₯ κ΅νμλ κΈ°λ¬νκ³ λ
νΉν νΉμ§
- μμΈ‘ κ°λ₯νμ§ μλ€
- νΉμ λͺ λ Ήμ΄μ λ¬Έλ§₯ κ΅νμ΄ λ°μν νλ₯ μ΄ λͺ¨λ λͺ λ Ήμ΄μ λν΄ κ°λ€κ³ κ°μ νλ κ²
β 13.6 λ°μ μ μ μ½
- λ¬Έλ§₯ κ΅νμ΄ μμΈ‘ λΆκ°λ₯νλ€λ μ
- λ¬Έλ§₯ κ΅νμ΄ λ°μνλ μκ°μ λΆνμ€β λμμ μΌλ‘ μ€νλλ λͺ λ Ήμ΄μ λν΄ νμ€ν κ²μ?
μ½λ λ°μ€ 13-1 λ€μ―κ° λͺ λ Ή κ° μλ κ°λ¨ν μμ
1 2 3 4 5 6 7
μμ p { 1. num = 5 2. num++ 3. num = num - 2 4. X = 10 5. num = num + x }
- λ°λμ νΉμ μμλ‘ μ€νλμ΄μΌ νλ€
- λͺ¨λ μΈμ ν λ λͺ λ Ήμ΄ μ¬μ΄μ λ°μ μ μ μ½μ΄ μλ€
- μ΄ μ μ½μ λ¬Έλ§₯ κ΅νμ΄ λλλΌλ λ°λμ μ§μΌμ ΈμΌ ν©λλ€.
μ½λ λ°μ€ 13-2 λ¬Έλ§₯ κ΅νκ³Ό μμ μμ μμ ν μ€ν
1 2 3 4 5 6 7 8
Run 1: 1. num = 5 2. num++ >>>>> Context Switch <<<<< 3. num = num - 2 4. X = 10 >»» Context Switch <<<<< 5. num = num + x
- μ½λ λ°μ€ 13-3 λ¬Έλ§₯ κ΅νκ³Ό λλΆμ΄ ν λ λ€λ₯Έ μ€ν
1 2 3 4 5 6 7 8 9
Run 2: num = 5 Β» Context Switch Β« num++ num = num - 2 //2 Β» Context Switch Β« X = 10 Β» Context Switch Β« num = num + x //22
- μ΄λ¬ν μ μ½μ νΉμ μμ μ λν΄ μ 체μ μΌλ‘ κ²°μ λ‘ μ μΈ νμκ° μ‘΄μ¬νλ μ΄μ
- 곡μ μμμ ν λ³μλΌκ³ νκ³ , μ΄μ λν΄ μ½κΈ°/μ°κΈ° κΆνμ΄ λͺ¨λ μλ λμ μμ
μμ€ν
μ΄ μλ€κ³ κ°μ
- μ½κΈ°λ§ νλ€λ©΄ κ²°κ³Όλ νμ κ°λ€.
- μμ μ€ νλλΌλ 곡μ λ³μμ κ°μ μ°λ €κ³ νλ€λ©΄, μμ μ€μΌμ€λ¬κ° ν λΉν λ¬Έλ§₯ κ΅νμ΄ λͺ¨λ μμ μ μ 체 μνμ μν₯μ μ€ κ², μ€νν λλ§λ€ μνκ° μλ‘ λ€λ₯Ό μ μλ€λ μλ―Έ
- μμ μ μ€κ° μν intermediate state κ° μ€νλ§λ€ λ€λ₯Ό μ μκΈ° λλ¬Έ
- λ¬Έλ§₯ κ΅νμ μν₯μ μμνλ €λ©΄, λ€λ₯Έ μ€νμμ λμΌνκ² κ²°μ λλ κ²°κ³Όλ₯Ό μ»μΌλ €λ©΄ μ μ ν λκΈ° synchronization λ°©λ²μ μ¬μ©ν΄μΌ ν©λλ€.
β 13.7 λμμ±μ μ¬μ©ν΄μΌ νλ κ²½μ°
- λμμ±μλ μΈμ μ¬μ©ν΄μΌ νλμ§λ₯Ό μ μ μλ λͺ κ°μ§ μΌλ°μ μΈ ν¨ν΄
- νμ¬ λͺ λ Ήμ΄κ° λ€μ λͺ λ Ήμ΄λ₯Ό λΈλ‘νΉblocking
- μλ² νλ‘κ·Έλ¨, μ¬μ©μλ‘λΆν° λ¬Έμμ΄μ μ½μΌλ €λ κ²½μ°
- 첫 λ²μ§Έ ν¨ν΄μ 무기νμΌλ‘ μ€ν νλ¦μ μ°¨λ¨ν μ μλ λͺ λ Ήμ΄κ° μλ κ²½μ° μ΄ μ§μ μμ κΈ°μ‘΄μ νλ¦μ λ κ°μ λ³λμ νλ¦ λλ μμ μΌλ‘ λΆν ν΄μΌ ν©λλ€
- μΈ κ°μ§ λͺ©νλ₯Ό κ°λ μλ² κ·Έλ¨
- ν΄λΌμ΄μΈνΈλ‘λΆν° μ½μ λ μμ ν©μ κ³μ° νκ³ ν΄λΌμ΄μΈνΈμκ² κ·Έ κ²°κ³Όλ₯Ό λ°νν©λλ€.
- ν΄λΌμ΄μΈνΈμ λν μλΉμ€ μ¬λΆμ μκ΄μμ΄, μλΉμ€νλ ν΄λΌμ΄μΈνΈμ μλ₯Ό νμΌμ κ·μΉμ μΌλ‘ μμ±ν©λλ€.
- ν λ²μ μ¬λ¬ ν΄λΌμ΄μΈνΈμκ² μλΉμ€ν μ μμ΄μΌ ν©λλ€.
- μ½λ λ°μ€ 13-4 λ¨μΌ μμ
μ μ΄μ©ν΄ μλνλ μλ² νλ‘κ·Έλ¨
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
κ³μ°κΈ° μλ² { μμ Tl { 1. N = 0 2. μλ² μ€λΉ 3. μμν μν { 4. ν΄λΌμ΄μΈνΈλ₯Ό κΈ°λ€λ¦¬κΈ° 5. N = N + 1 6. Cμμ 첫 λ²μ§Έ μλ₯Ό μ½κ³ Xμ μ μ₯ 7. Cμμ λ λ²μ§Έ μλ₯Ό μ½κ³ Yμ μ μ₯ 8. Z = X + Y 9. Zλ₯Ό Cμ μ°κΈ° (write) 10. Cμ λν μ°κ²°μ μ’ λ£ 11. Nμ νμΌμ μ°κΈ° (write ) } } }
- μ΄ μ½λκ° μμ μΈκΈν λͺ©νλ₯Ό λ¬μ±ν μ μμμ 곧 보μ¬λλ¦¬κ² μ΅λλ€.
- λ€ λ²μ§Έ λͺ λ Ήμ΄ ν΄λΌμ΄μΈνΈλ₯Ό κΈ°λ€λ¦¬κΈ°λ μλ£ μκ°μ μ μ μλ λΈλ‘νΉ λͺ λ Ήμ΄μ λλ€.κ·Έλ¬λ―λ‘ λͺ λ Ήμ΄ 5,6κ³Ό λλ¨Έμ§λ μ€νλμ§ μμ΅λλ€. λ°λΌμ μ΄λ€ λͺ λ Ήμ΄λ μ ν΄λΌμ΄μΈνΈκ° μ¬ λκΉμ§ λ°λμ λκΈ°ν΄μΌ νκ³ ν΄λΌμ΄μΈνΈκ° μ¨ λ€μ μ΄λ€ λͺ λ Ήμ΄κ° μ€νλ μ μμ΅λλ€.
- λͺ λ Ήμ΄ 4μ μΆλ ₯μ μμ‘΄μ
μ½λ λ°μ€ 13-5 μΈ λμ μμ μΌλ‘ μλνλ μλ² νλ‘κ·Έλ¨μ μμ¬μ½λ
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 31
κ³μ°κΈ° μλ² { 곡μ μ: N μμ T1 { 1. N = 0 2. μλ² μ€λΉ 3. μμ T2λ₯Ό μ€ν° 4. μμν μν { 5. Nμ νμΌμ μ°κΈ° 6. 30μ΄ λκΈ° } } μμ T2 { 1. μμν μν { 2. ν΄λΌμ΄μΈνΈ Cλ₯Ό λκΈ°=>λΈλ‘νΉ 3. N = N + 1 4. Cμ λν μμ T3λ₯Ό μ€ν° } } μμ T3 { 1. Cμμ 첫 λ²μ§Έ μλ₯Ό μ½κ³ Xμ μ μ₯ 2. Cμμ λ λ²μ§Έ μλ₯Ό μ½κ³ Yμ μ μ₯ 3. Z = X + Y 4. Z λ₯Ό Cμ μ°κΈ° (write) 5. Cμ λν μ°κ²°μ μ’ λ£ } }
- ν΅μ¬μ μ€μν μ€κ³ μμΉ μ’ λ£ μκ°μ μ μ μκ±°λ μλ£ν λκΉμ§ μκ°μ΄ μ€λ 걸리λ λΈλ‘νΉ μμ μ΄ μμ λλ§λ€ μμ μ λ κ°μ λμ μμ μΌλ‘ λλμ΄μΌ ν©λλ€.
- μ€ν° λͺ λ Ήμ΄λ μλκ° κ½€ λΉ¨λΌμ μ ν΄λΌμ΄μΈνΈλ₯Ό λ°λ μμ μ λΈλ‘νΉνμ§ μμ΅λλ€.
- μμ T1μ μΈμ€ν΄μ€λ νλ, μμ T2μ μΈμ€ν΄μ€λ νλλ§ μμ§λ§, μμ T3 λ λͺ¨λ ν΄λΌμ΄μΈνΈμ λν΄ μ¬λ¬ μΈμ€ν΄μ€λ₯Ό κ°μ§ μ μμ΅λλ€.
μλ² νλ‘κ·Έλ¨μ ν΄λΌμ΄μΈνΈμ λν μλΉμ€ μ€λ¨ν©λλ€. μ΄λ₯Ό μλΉμ€ κ±°λΆdenial of service (DoS)
- 곡μ λ λ³μ Nμ λν΄ νΉν T2μ μΈμ€ν΄μ€μ κ°μ μμ μ€ νλκ° κ·Έ κ°μ λ³κ²½ν μ μλ€λ μ μ λλ€. ν μμ μ΄ μμ ν μ μλ 곡μ λ³μ κ° μ‘΄μ¬νλ―λ‘, λμ μμ μμ€ν μ λμμ± λ¬Έμ κ° λ°μνκΈ° μ½μ΅λλ€.
- 곡μ λ³μ μ λν΄ μ¬κ°ν λ°μ΄ν° κ²½μdata race λ¬Έμ
β 13.8 곡μ μν
- μμ κ°λ₯ν 곡μ μνκ° μλ μ¬λ¬ κ°μ λμ μμ μ΄ μ€νλλ λμ, λ¬Έλ§₯ μ ν ν¨ν΄μ λΆνμ€μ±μ΄ λͺ¨λ μμ μ μ 체 μνλ₯Ό μ΄λ»κ² λΉκ²°μ λ‘ μ non-deteminismμΌλ‘ λ§λλμ§ κ°λ΅ν μ€λͺ
- μνstate λΌλ μ©μ΄λ₯Ό λ€μΌλ©΄ νΉμ μμ μ μΌλ ¨μ λ³μμ κ·Έμ ν΄λΉνλ κ°
- μ€κ° μνλ μ΄μ λΉμ·νκ² μμ μ΄ νΉμ λͺ λ Ήμ μ€ννμ λ κΈ°μ‘΄μ λͺ¨λ 곡μ λμ§ μμ λ³μ λ° κ·Έμ ν΄λΉνλ κ°μ μ§ν©
- 곡μ μνλ νΉμ μμ μ λμ μμ μμ€ν μ΄ μ½κ±°λ μμ ν μ μλ λ³μμ κ·Έμ ν΄λΉνλ κ°μ λͺ¨μ
μ½λ λ°μ€ 13-7 μμ κ°λ₯ν 곡μ μνκ° μλ λμ μμ λ κ°λ‘ ꡬμ±λ μμ€ν
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
λμ μμ€ν { 곡μ μν { X : μ μ = o } μμ P { A: μ μ 1. A = X 2. A = A + 1 3. X = A 4. Xλ₯Ό μΆλ } μμ Q { B : μ μ 1. B = X 2. B = B + 2 3. X = B 4. Xλ₯Ό μΆλ } }
- μμ°¨μ μΌλ‘ μ΄λ¬ν μμ μ€ννλ©΄ λ¬Έλ§₯ κ΅νμ μ νμ§ μκ³ λ κ²°μ λ‘ μ μΈ κ²°κ³Όκ° λμ΅λλ€.
- μ½λ λ°μ€ 13-8 λμμ μΌλ‘ μ€ννμ λ μμ
Pμ Qμ λν΄ ν μΈν°λ¦¬λΉ | μμ
P | μμ
μ€μΌμ€λ¬ | μμ
Q | | βββ | ββββ- | ββ- | | | λ¬Έλ§₯ κ΅ν | | | | | B = X | | B = B + 2 | | | λ¬Έλ§₯ κ΅ν | | | A = X | | | | | λ¬Έλ§₯ κ΅ν | | | | | X = B | | | λ¬Έλ§₯ κ΅ν | | | A = A + 1 | | X = A | | | | | λ¬Έλ§₯ κ΅ν | | | | | print X | | | λ¬Έλ§₯ κ΅ν | | | print X | | | | | λ¬Έλ§₯ κ΅ν | |
- μ΄ μλ리μ€λ νΉμ μ§μ μμ λ¬Έλ§₯ κ΅νμ΄ λ°μνλ μ¬λ¬ μλλ¦¬μ€ μ€ νλμΌ λΏμ λλ€. κ° μλ리μ€λ μΈν°λ¦¬λΉμ΄λΌκ³ ν©λλ€
- μ€ν μ¬μ΄μλ νμ΄ μ‘΄μ¬ν μ μμ΅λλ€ . μ΄λ¬ν νμ μμΈ‘ν μ μμΌλ©°, μ€νμ μΆμ νλ©΄ μ΄ μΈν°λ¦¬λΉμ λλΌμ΄ κ²°κ³Όλ₯Ό λ³μ΅λλ€. μ΅μ’ κ²°κ³Όλ‘ λ λ€ 3μ μΆλ ₯νλ¦¬λΌ μμνμ§λ§, νλ‘μΈμ€Pλ κ° 1μμΆλ ₯νκ³ νλ‘μΈμ€Qλ μΆλ ₯2λ₯Ό μΆλ ₯ν©λλ€.
- λ³νμ§ μμ μ± λ¨μ μμ΄μΌ νλ λ€λ₯Έ μ€μν μ μ½μ΄ μ‘΄μ¬ν©λλ€. μ΄λ¬ν μ μ½λ€μ λ°μ΄ν° κ²½μ λλ κ²½μμν race condition λ₯Ό ν¬ν¨
- μ½λ λ°μ€ 13-9 λμμ μΌλ‘ μ€νν λ μμ
Pμ Qμ λ€λ₯Έ μΈν°λ¦¬λΉ | μμ
P | μμ
μ€μΌμ€λ¬ | μμ
Q | | ββ | ββββ- | ββ | | | λ¬Έλ§₯ κ΅ν | | | | | B = X | B = B + 2 X = B | | | λ¬Έλ§₯ κ΅ν | | | A = X A = A + 1 | | | | | λ¬Έλ§₯ κ΅ν | | | | | print X | | | λ¬Έλ§₯ κ΅ν | | | X = A print X | | | | | λ¬Έλ§₯ κ΅ν | |
- λ μμ 3κ°μ μμ μΌλ‘ μ΄λ£¨μ΄μ§ Cμ κ°λ¨ν X++ κ΅¬λ¬Έμ΄ λ¨μΌ νμ μ¬λΌμ΄μ€μμ μ€ν λμ§ μμΌλ¦¬λΌλ μ .
- μμμ μΈ μμ μ΄ μλλ©° 3κ°μ λ μμ μμμ λͺ λ Ήμ΄λ‘ ꡬμ±λμ΄ μμ΅λλ€. μμμ λͺ λ Ήμ΄λ λ μμ μμ μΌλ‘ λλ μ μμΌλ©° λ¬Έλ§₯ κ΅νμΌλ‘ μΈν΄ μΈν°λ½νΈλ μλ μμ΅λλ€.
- 곡μ μμμ μ κ·Όνλ €λ μμ μ΄ λ§μ μ μμΌλ―λ‘, λμμ± λ¬Έμ λ κΉκ² 곡λΆν΄ κ²°κ³Όλ₯Ό μμΈ‘ν μ μλ(κ²°μ λ‘ μ μΈ) λ©μ»€λμ¦μ μ°ΎμΌμΌ ν©λλ€.
- μμ μ€μΌμ€λ¬λ νμ΄λ¨Έ μΈν°λ½νΈtimer interruptλ₯Ό λ°μμν€κΈ° μν΄ νμ΄λ¨Έλ₯Ό λ§μΆκΈ° μ μ λκΈ°μ΄μμ μμ μ μ νν© λλ€. κ·Έλ¦¬κ³ CPU μ½μ΄λ₯Ό λ λμ μ νν μμ μ μν μμμ ν λΉν©λλ€
β 13.9 λ§λ¬΄λ¦¬
- λμμ±κ³Ό λ³λ ¬μ±μ μ μνμ΅λλ€.
- κ° λ³λ ¬ μμ μ μμ μ μμ ν νλ‘μΈμ μ λμ΄ νμνμ§λ§.
- λμ μμ μ νλ‘μΈμ νλλ₯Ό 곡μ ν μ μμ΅λλ€.
- λμ μμ μ νλμ νλ‘μΈμ μ λμ μ¬μ©νμ§λ§, μμ μ€μΌμ€λ¬λ νλ‘μΈμμ μκ°μ κ΄λ¦¬νκ³ νλ‘μΈμλ₯Ό λ€λ₯Έ μμ κ°μ 곡μ ν©λλ€. κ·Έ κ²°κ³Ό κ°κ°μ μμ μμ μλ§μ λ¬Έλ§₯ μ νκ³Ό μλ‘ λ€λ₯Έ μΈν°λ¦¬λΉμ΄ λ°μν©λλ€.
- λΈλ‘νΉ λͺ λ Ήμ΄λ₯Ό μκ°νμ΅λλ€. λν λμμ±μ μ¬μ©ν μμ μ μμνλ ν¨ν΄κ³Ό, μμ νλλ₯Ό λ λλ μ μ΄μμ λμ μμ μΌλ‘ λΆν νλ λ°©λ²μ μ€λͺ νμ΅λλ€.
- 곡μ μνκ° λ¬΄μμΈμ§ μ€λͺ νμ΅λλ€. μ¬λ¬ μμ μ΄ κ°μ 곡μ μνλ₯Ό μ½κ³ μ°λ €κ³ ν λ. 곡μ μνκ° λ°μ΄ν° κ²½μκ³Ό κ°μ μ¬κ°ν λμμ± λ¬Έμ λ₯Ό μ΄λ»κ² μΌκΈ°ν μ μλμ§λ μ΄ν΄λ΄€μ΅λλ€.
This post is licensed under CC BY 4.0 by the author.