1) Первую строчку вы поняли. То что нужен бесконечный цикл
Код:
while(true){}
А вообще вы не внимательно прочитали 2 статью. Там этот цикл есть.
Код:
start:
push ebx ; Load multiboot header location
; Execute the kernel:
cli ; Disable interrupts.
call main ; call our main() function.
jmp $ ; Enter an infinite loop, to stop the processor
; executing whatever rubbish is in the memory
; after our kernel!
Последней строчкой jmp $ входим в бесконечный цикл, для предотвращения выполнения мусора лежащего в памяти после ядра.
2) Что касается второй строчки про EOI. В 5 главе всё описано:
http://www.jamesmolloy.co.uk/tutorial_h ... 20PIT.htmlСистема прерываний в персональных компьютерах довольно сложная и запутанная.
Существует два PIC контролёра. Которые расположены в северном мосте. Они отвечают за внешние прерывания процессора от устройств: таймер, COM-порт, USB-контролер хоста и тд. Если есть внешние, то есть и внутренние. Такие как исключение при деление на 0, ошибка защиты, конец стека, страничная ошибка и тд.
Так вот PIC буферизирует прерывания от внешних устройств. Как только он отправил сигнал о прерывании в процессор PIC начинает блокировать все оставшиеся прерывания. Ждет пока процессор не освободиться. Как только процессор освободиться он должен послать сигнал EOI (End-of-Interupt) - конец прерывания. Если его не послать, то вы не получите больше прерываний. При этом проверка с Int 20h будет работать. Так как в данном случае это будет уже внутреннее прерывание.
И как я говорил что контроллеров PIC два, то нужно отправить в нужный. А работают они каскадом. Поэтому в одном случае конец прерывания посылается ведущему. Во втором случае ведущему затем ведомому.
3) Помимо того что контроллер прерываний PIC работает с блокировкой. Внешние устройства точно также работают с блокировкой, не все. Им тоже надо послать сигнал о конце прерывания.
У таймера это делать не нужно, так как мы выбрали такой режим где нет блокировки
outb(0x43, 0x36); Тут младшая цифра - отвечает за режим.
Код:
6d=0110b
^^^- 3 режим
http://ru.osdev.wikia.com/wiki/Программируемый_интервальный_таймерУ контроллера i8042, сброс совмещён с чтением сканкода 60h.
И так далее.