2007年8月12日 星期日

note1-interrupt

interrupt是由IC i8259提供, 當irq進來時, 需要irq_handler接序動作, minix3把這個寫在gate_table裏面, 原本應當是如此就可以結束. 但因minix3把所有在gate_table的irq_handler寫成同一個function, 再由傳入的參數(即irq的值)決定call到哪個irq_handler, 因此就在i8259.c內多了一個註冊irq_handler的程式: put_irq_handler, 此function主要有個 array指向所有irq的function, 如果同一個irq有數個handlers, 則以link list連接.
在clock, system裏面用的stack是在程式內定義好的一段區域 k_stktop, 把k_stktop load 到sp, 就可以把_restart填到stack裏面當return address, 所以每次interrupt結束都會跑restart那段程式, run next_ptr.