Three cases


<aside> ๐Ÿ’ก IRQ status

  1. IRQ_DISABLED = ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์€์ƒํƒœ(line)
  2. IRQ_WAITNG = ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š”์ƒํƒœ(์•„๋ฌด ์ธํ„ฐ๋ŸฝํŠธ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ)
  3. IRQ_PENDING = ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ, ์ปค๋„๋กœ ๋ณด๋‚ด์ง€๋Š” ์•Š์€ ์ƒํƒœ(๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘)
  4. IRQ_INPROGRESS = ์ปค๋„์ด ISR(Interrupt Service Routine)์„ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ

๊ฐ๊ฐ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ๋กœ 4๋น„ํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

</aside>

(CPU(i)๊ฐ€ IRQ(m)์˜ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ คํ•  ๋•Œ)

  1. IRQ(m)๋ผ์ธ์„ ์–ด๋А CPU๋„ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์„๋•Œ
  2. ๋‹ค๋ฅธ CPU๊ฐ€ IRQ(m)๋ผ์ธ์˜ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์„๋•Œ
  3. CPU(k)๊ฐ€ IRQ(m)๋ผ์ธ์˜ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ–ˆ์„๋•Œ

p.65

  1. IRQ(m)์ด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  2. APIC์€ IRQ(m)์ด ์–ด๋А CPU์— ๊ฐˆ์ง€ ์ •ํ•œ๋‹ค.
  3. CPU(i)๋Š” irq_desc[m].status(๊ตฌ์กฐ์ฒด์˜ ์ƒํƒœ)๋ฅผ PENDING์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
  4. PENDING์œผ๋กœ ๋ฐ”๊พธ๊ณ , ๋‹ค๋ฅธ CPU๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    1. ์•„๋ฌด๋„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์ง€ ์•Š์„๋•Œ๋Š” ์ž์‹ ์ด ์ฒ˜๋ฆฌํ•œ๋‹ค.
    2. ๋‹ค๋ฅธ CPU๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์„๋•Œ๋Š” ์–ด์ฐจํ”ผ ํ•˜๋‚˜์˜ ํ•œ๋ผ์ธ๋‹น CPU๋ฐ–์— ์ผ์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋˜ CPU๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.

p.72

p.90

ISR์ด ๋””๋ฐ”์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ• ๋•Œ

ISR๊ณผ ๋น„ํŠธ๋งŒ ์„ธํŒ…ํ•ด๋‘๊ณ  ๋‚˜์ค‘์— ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๋น„ํŠธ๋ฅผ โ€œsoft-irq pending bitโ€์ด๋ผ๊ณ ํ•œ๋‹ค.

do_irq()๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” irq ํ•จ์ˆ˜์ด๊ณ ,

do_softirq()๋Š” ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” irq ํ•จ์ˆ˜์ด๋‹ค.