IRQ = interrupt request
PIC = pick interrupt controller
IRQ Line 별로 4개의 status가 있다.
action → ISR을 참조하고 있다. 연결리스트로 IRQ Line에 모든 디바이스들이 연결되어 있다.(IRQ라인중에 어떤 디바이스인지)
IRQ가 여러개 있을때 이 IRQ Line을 묶어둔 구조체가 **irq_desc[]**이다.
IRQ 라인의 디바이스에서 인터럽트를 발생시키면 중간의 PIC에 걸쳐서 기다리다 CPU의 커널로 전송된다.
인터럽트하면 IRQ의 Status가 어딨는지 확인한다.
그렇다면 모든 CPU가 IRQ에 접근할 수 있다는 것이다. 그 의미는 IRQ는 shared memory 즉, 임계구역(critical section)으로 동시에 2개 이상의 CPU가 접근하면, data race가 발생한다. 그래서 Lock을 하여 다른 CPU의 접근을 막는다.
Handler는 CPU 앞에 있는 APIC이냐 IRQ 라인을 관리하는 PIC이냐를 관리한다.
irq = irq number(irq line number)