-
νλμ¨μ΄μ μΈν°λ½νΈ κ° λ°μν μμ λΆν° μΈν°λ½νΈ μ²λ¦¬ ν μ΄μ μ μ€νλλ μμ μΌλ‘ λμκ°κΈ°κΉμ§μ κ³Όμ μ μμΈν μ€λͺ νμμ€.-
νλμ¨μ΄μ μΈν°λ½νΈ κ° λ°μνλ©΄,νλμ¨μ΄μ컨νΈλ‘€λ¬μμ 물리μ μΈ μ κΈ° μ νΈ ννμ μΈν°λ½νΈ λ₯Ό λ²μ€λ₯Ό ν΅ν΄μΈν°λ½νΈ 컨νΈλ‘€λ¬λ‘ μ λ¬νλ€. -
μΈν°λ½νΈ 컨νΈλ‘€λ¬λ μ¬λ¬ λλ°μ΄μ€λ‘λΆν° μ€λ μΈν°λ½νΈ μ νΈλ₯Ό λͺ¨μCPUμ μΈν°λ½νΈ λΌμΈ μ΄ νμ±ν λλ€λ©΄CPUμκ² μΈν°λ½νΈ λ₯Ό 보λΈλ€.μΈν°λ½νΈ 컨νΈλ‘€λ¬μ μ‘΄μ¬ μ΄μ λ, μ€μ§ νλμ μΈν°λ½νΈ νμ κ°μ§μΌλ‘μ¨ λ μ΄μμ λλ°μ΄μ€μμ λμμ μΈν°λ½νΈ λ₯Ό 보λ΄λ©΄ μΈν°λ½νΈ λ₯Ό μμ€ν κ°λ₯μ±μ΄ μλCPUμ νκ³λ₯Ό 극볡νκΈ° μν¨μ΄λ€.μΈν°λ½νΈ 컨νΈλ‘€λ¬μλ μ¬λ¬ κ°μ νμ΄ μκ³ , λμμ μΈν°λ½νΈ κ° λ°μν΄λ μ°μ μμμ λ°λΌ μΈν°λ½νΈ λ₯Ό μ²λ¦¬νλ€.
-
CPUκ° μΈν°λ½νΈ μ νΈλ₯Ό λ°μΌλ©΄, μΈν°λ½νΈ μμ€ν μ λΉνμ±ν νλ€. κ·Έλ€μ, νμ¬ μ€ν μ€μΈ λͺ λ Ήμ΄λ₯Ό λλ§μΉκ³ , κΈ°μ‘΄μ Program Counter κ°μ μ€ν μ μ μ₯νλ€. μ΄λ μΈν°λ½νΈ κ° μ»€λμ μνμ λ°©ν΄νλ€λ©΄ μ μ₯νλ μ€νμ 컀λ μ€ν μ΄ λ κ²μ΄κ³ , μ¬μ©μ νλ‘μΈμ€μ μνμ λ°©ν΄νλ€λ©΄ μ¬μ©μ μ€ν μ΄ λ κ²μ΄λ€. -
CPUλ μΈν°λ½νΈ λ²‘ν° ν μ΄λΈ μ μ°Έκ³ νμ¬ ν΄λΉ μΈν°λ½νΈ λΌμΈ μ μμΉλ₯Ό μμλΈλ€. κ·Έ ν μμλΈ μΈν°λ½νΈ λΌμΈ μ μμΉλ‘ λΆκΈ°νλ€.- μ΄λ,
CPUκ° μ»€λ λͺ¨λ λ‘ μ§μ νλ μ νν μμ μ μΈμ μΌκΉ?
μΈν°λ½νΈ λ²‘ν° ν μ΄λΈ μ λ³΄ν΅ μ»€λ μμμ 첫 λ²μ§Έ μ£Όμ λ²μ§λΆν° λ²‘ν° ννλ‘ μ μ₯λμ΄μμΌλ©° μ΄ λ²‘ν° ν μ΄λΈ μ μ κ·ΌνκΈ° μν΄ μ»€λ μμμΌλ‘ λ€μ΄κ°κΈ°μ
CPUκ° λ²‘ν° ν μ΄λΈ μ μ κ·Όνλ μκ° μ μ λͺ¨λ μμ 컀λ λͺ¨λ λ‘ μ νλλ€. - μ΄λ,
-
μΈν°λ½νΈ λΌμΈ μ μ΄κΈ° μ§μ μμΉμλ μ΄μ λΈλ¦¬ μ½λκ° μλ€. μ΄ μ½λλ IRQ λ²νΈλ₯Ό μ μ₯νκ³ μΈν°λ½νΈ κ° μ€λ¨μν¨ μμ μ λ μ§μ€ν° κ°λ€μ μ€ν μ μ μ₯νλ€. κ·Έλ€μ 컀λμ
do_IRQ()λ₯Ό νΈμΆνλ€. -
do_IRQ()ν¨μλ μ΄μ μ μ μ₯ν IRQ λ²νΈλ₯Ό μ΄μ©ν΄ μΈν°λ½νΈ λΌμΈ μ μμλ΄κ³ , μμ μ΄ ν΄λΉ μΈν°λ½νΈ λ₯Ό μΈμ§νλ€λ κ²μ μΈν°λ½νΈ λ₯Ό 보λΈνλμ¨μ΄μκ² μλ¦°λ€. κ·Έλ¦¬κ³ ν΄λΉ μΈν°λ½νΈ λΌμΈ μ λΉνμ±νμμΌ κ°μ μΈν°λ½νΈ μ μ¬μ§μ μ λ§λλ€. -
do_IRQ()ν¨μλ ν΄λΉ μΈν°λ½νΈ λΌμΈ μ μ ν¨ν νΈλ€λ¬ κ° μλμ§ νμΈνκ³ ,handle_IRQ_event()ν¨μλ₯Ό μ€νν¨μΌλ‘μ¨ μΈν°λ½νΈ νΈλ€λ¬ λ₯Ό μ€ννλ€. -
handle_IRQ_event()ν¨μλCPUκ° μ²μ μΈν°λ½νΈ λ₯Ό λ°μμ λ μΈν°λ½νΈ μμ€ν μ λΉνμ±ννμμΌλ―λ‘, νΈλ€λ¬ ν¨μ μΈμμIRQF_DISABLEDνλκ·Έκ° μμ§ μλ€λ©΄ λ€μ μΈν°λ½νΈ μμ€ν μ νμ±νν΄μΌ νλ€.IRQF_DISABLEDμΈμκ° μ§μ λ μνλΌλ©΄ λͺ¨λ μΈν°λ½νΈ κ° λΉνμ±νλ μνμμ νΈλ€λ¬ λ₯Ό μ€ννλ€. -
μΈν°λ½νΈ λΌμΈ μ ν΄λΉνλ λͺ¨λ νΈλ€λ¬ λ₯Ό μ€νν ν,
handle_IRQ_event()ν¨μλ λ€μ μΈν°λ½νΈ λ₯Ό λΉνμ±ννκ³do_IRQ()ν¨μλ‘ λ°ννλ€. -
do_IRQ()ν¨μλ‘ λ°ν ν λ€μ μ΄κΈ° μ§μ μμΉλ‘ λμκ°μret_from_intr()ν¨μκ° μ€νλλ€.ret_from_intr()ν¨μλ μ΄κΈ° μ§μ μ½λμ λ§μ°¬κ°μ§λ‘ μ΄μ λΈλ¦¬ λ‘ μμ±λμ΄ μλ€. μ΄ ν¨μλneed_reschedλ³μκ° μ€μ λμ΄ μλμ§ νμΈνμ¬ κ·Έμ λ°λΌ μ€μΌμ€λ§ μμ μ μννλ€.- μΈν°λ½νΈ κ° μ¬μ©μ νλ‘μΈμ€λ₯Ό μ€λ¨ν κ²½μ°
schedule()ν¨μ νΈμΆ
- μΈν°λ½νΈ κ° μ»€λ μ체λ₯Ό μ€λ¨ν κ²½μ°
preempt_countκ°μ΄ 0μΈ κ²½μ°μλ§schedule()ν¨μ νΈμΆκ·Έ μΈμ κ²½μ°μλ 컀λμ μ μ νλ κ²μ΄ μμ νμ§ μκΈ° λλ¬Έμ΄λ€.
- μΈν°λ½νΈ κ° μ¬μ©μ νλ‘μΈμ€λ₯Ό μ€λ¨ν κ²½μ°
-
schedule() ν¨μκ° λ°νλ μ΄ν, λλ λκΈ° μ€μΈ νλ‘μΈμ€κ° μλ κ²½μ° λ μ§μ€ν°μ μ μ₯νλ μ΄μ μμ μ λ¬Έλ§₯ μ 볡ꡬνμ¬ μ€λ¨νλ μμ μ κ³μ μ§ννλ€.
-
-
- μ μ cli() ν¨μ λ
clear interruptλ‘ μμ€ν λͺ¨λ νλ‘μΈμ€μ μΈν°λ½νΈ λ₯Ό λΉνμ±νμν€λ ν¨μμ΄λ€. μ΄ ν¨μμ μ£Ό μ¬μ©μ²λ 곡μ λ°μ΄ν° μ λν μ κ·Όμ μ ννκΈ° μν¨μ΄μμ§λ§ μ΄λ₯Ό μν λͺ©μ μΌλ‘ μ 체 μΈν°λ½νΈ_ λ₯Ό λΉνμ±νμν€λ κ²μ μμ€ν μ±λ₯μ μμ²λ bottleneck μ΄μκΈ°μ μ΄ ν¨μλ₯Ό μ κ±°ν΄ λͺ κ°μ§ μ΄μ μ μ»μλ€.- λλΌμ΄λ² κ°λ°μλ μ κΈ κ΅¬νμ μν΄
cli()ν¨μλ₯Ό μ¬μ©νμ§ μκ³ λͺ©μ μ λ§κ² μ κΈ μ ꡬννκ² λμλ€. - 2.5 λ²μ κ°λ° κ³Όμ μμ
cli()ν¨μμ κ°μ μΈν°λ½νΈ μμ€ν μ μ€λ³΅λ μ½λλ₯Ό λΉλ‘―ν λ§μ μ½λλ₯Ό μ 리νμ¬ μ΄ν΄νκΈ° μ½κ³ κ°λ¨ν μ½λκ° λ§λ€μ΄μ‘λ€.
- λλΌμ΄λ² κ°λ°μλ μ κΈ κ΅¬νμ μν΄
- μ μ cli() ν¨μ λ
-
-
μΈν°λ½νΈ νΈλ€λ¬ λ
μ΄μ체μ μ νμν λΆλΆμ΄λ μ€νν λ λͺ κ°μ§ μ μ½μ΄ μλ€.- λΉλκΈ°μ μΌλ‘ μ€νλλ―λ‘, λ€λ₯Έ μΈν°λ½νΈ νΈλ€λ¬ λ₯Ό ν¬ν¨ν λ€λ₯Έ μ€μν μ½λλ₯Ό μ€λ¨μν¬ μ μλ€.
- μ΅μ μ κ²½μ°
IRQF_DISABLEDνλκ·Έκ° μ€μ λμ§ μμΌλ©΄ μ²λ¦¬ μ€μΈ μΈν°λ½νΈ λ₯Ό λΉνμ±νμν¨ μνμμ μ€νλκ³ , μ΅μ μ κ²½μ°IRQF_DISABLEDνλκ·Έκ° μ€μ λμλ€λ©΄ νμ¬ νλ‘μΈμ μ λͺ¨λ μΈν°λ½νΈ λ₯Ό λΉνμ±νμν¨ μνμμ μ€νλλ€. - νλ‘μΈμ€ 컨ν μ€νΈ κ° μλ μΈν°λ½νΈ 컨ν μ€νΈ μμ μ€νλμ΄ ν΄λ©΄ μν κ° λ μ μκΈ°μ μ¬μ©ν μ μλ ν¨μμ μ μ½μ΄ μμ΄ ν μ μλ μΌμ μ μ½μ λ°λλ€.
νλμ¨μ΄λ₯Ό λ€λ£¨κΈ° λλ¬Έμ μ²λ¦¬ μκ°μ΄ μ€μνλ€.
-
μμ λ¬Έμ μ μ ν΄μνκΈ° μν΄ μ΅λν μΈν°λ½νΈ νΈλ€λ¬ μμ μ€μν λͺ κ°μ§ κΈ°μ€μ μμ λ€μ μ λ°λΆ μμ μ²λ¦¬νκ³ λλ¨Έμ§ κ±°μ λͺ¨λ μΌμ νλ°λΆ μ²λ¦¬μμ ν΄κ²°νλ κ²μ΄ μ΄μμ μ΄λ€.
- μ λ°λΆ μμ μΈν°λ½νΈ νΈλ€λ¬ κ° μ²λ¦¬ν κ³ λ € μ¬νλ€
- μ€ν μκ°μ λ―Όκ°ν μμ
νλμ¨μ΄μ κ΄λ ¨λ μμ- λ€λ₯Έ μΈν°λ½νΈ κ° λ°©ν΄ν΄μλ μ λλ μμ
- μ΄μΈμ μμ μ νλ°λΆ μμ μ²λ¦¬νλ€.
λλΆλΆ μν©μμ μΈν°λ½νΈ νΈλ€λ¬ κ° μ’ λ£λ μ§νμ νλ°λΆ μ²λ¦¬κ° μ€νλλ€. κ·Έλ¬λ νλ°λΆ μ²λ¦¬μ ν΅μ¬μ λͺ¨λ μΈν°λ½νΈ κ° νμ±νλ μνμμ νλ°λΆ μ²λ¦¬λ₯Ό νλ€λ κ²μ΄λ€. μ λ°λΆ μ νλ°λΆ λ₯Ό ꡬλΆν΄ μΈν°λ½νΈ λΉνμ±ν μκ°μ μ΅μννμ¬ μμ€ν μ§μ°μκ° μ μ€μΌ μ μλ€.
- μ λ°λΆ μμ μΈν°λ½νΈ νΈλ€λ¬ κ° μ²λ¦¬ν κ³ λ € μ¬νλ€
-
-
-
- μ»΄νμΌ μ μ μ μΌλ‘ ν λΉλμ΄ λμ μΌλ‘ λ±λ‘νκ±°λ μ κ±°ν μ μλ€.
- μΈν°λ½νΈ 컨ν μ€νΈ μμ μ€νλμ΄ νλμ¨μ΄ μΈν°λ½νΈ κ° μλλΌλ©΄ μ μ ν μ μλ€.
- νλμ νλ‘μΈμ μμ κ°μ μ νμ
softirqκ° λμ μ€νν μ μλ€. - μ΅μνμ μ§λ ¬νλ§ μ κ³΅ν΄ μ μ ν λ½μ΄ νμνλ€.
-
softirqκΈ°λ°μΌλ‘ λ§λ€μ΄μ‘λ€.softirqμλ λ€λ₯΄κ² λμ μΌλ‘ ν λΉλλ€.- μΈν°νμ΄μ€κ° κ°λ¨νλ©°, λ½ μ¬μ© μ νμ΄
softirqμ λΉν΄ μ μ°νλ€. - μΈν°λ½νΈ 컨ν μ€νΈ μμ μ€νλμ΄ ν΄λ©΄ μν κ° λ μ μλ€.
- νλμ νλ‘μΈμ μμ λ μ΄μμ΄ λμμ μ€νλμ§ μλλ€.
-
- μ§μ°μμ μ 컀λ μ€λ λ ννλ‘ μ²λ¦¬νλ€.
- νλ‘μΈμ€ 컨ν μ€νΈ μμ μ€νλμ΄ ν΄λ©΄ μν κ° λ μ μμΌλ©° μ€μΌμ€λ§ μ λμμ΄λ€.
-
μ΄λ€ μν©μ μ’μκΉ?
-
softirq
- μΆ©λΆν μ€λ λνλμ΄ κΉμ λΆλΆκΉμ§ νλ‘μΈμλ³λ‘ λ³μλ₯Ό ꡬλΆν΄ μ¬μ©νλ μν©
- μ€ν μκ°μ μμ£Ό λ―Όκ°νκ³ μ¬μ©λΉλκ° λμ κ²½μ°
-
tasklet
- μΆ©λΆν μ€λ λνλμ΄ μμ§ μμ μν©
- κ°λ¨ν μΈν°νμ΄μ€λ₯Ό κ°μ§λ©° λμμ μ€νλμ§ μκΈ°μ ꡬν μμ μ΄ λ μ½λ€.
- λλΆλΆ μν©μμ
softirqλ³΄λ€ μ°μ μΌλ‘ κ³ λ €λλ€.
-
workqueue
- μ§μ° μμ μ νλ‘μΈμ€ 컨ν μ€νΈ μμ μ€νν΄μΌ νλ€λ©΄ μ¬μ©
- 컀λ μ€λ λ λ₯Ό μ¬μ©νκΈ°μ 컨ν μ€νΈ μ ν λΉμ©μ΄ νμνλ©° ν΄λ©΄ μν κ° νμ μλ€λ©΄ κ΅³μ΄ μ¬μ©ν μ΄μ λ μλ€.
-
-