Прерывание - это внезапный (по желанию устройства) переход к выполнению обработчика прерываний (с возможностью в любой момент завершить обработку прерывания и вернуться к выполнению прерванной программы).
Exception - это тоже как бы прерывание, но возникает не внезапно, а при выполнении программы, т.е. предсказуемо с т.з. программиста, который сам написал такую программу (т.е. мог предусмотреть, но не стал).
Ну, есть ещё exception из-за свопинга. Для программиста - не предсказуемо.
Я вот тоже не вышел из реального режима. Там я прерывания перехватывал, а в защищённый режим уже не стал вникать - это какое-то уродство.
Чтобы изучить вопрос - посмотрите, как это сделано в операционках с открытым исходным колом: FreeBSD, Linux. Возможно, имеет смысл начать со старых версий - которые ещё не работали с ACPI и PnP.
А ещё имеет смысл забить на *86 и писать операционку для ARM - там д.б. намного проще.
Цитирую вопрос топиккастера: "Пытаюсь писать ОС на си и ассемблере".
Т.е. предпосылка "Если речь про обычную ОС" - неверна: топиккастер сам пишет ядро.
Работать с устройствами, не используя прерываний - можно в режиме пулинга (pooling), т.е. регулярного опроса. Однако, такой способ обычно оказывается слишком дорогим по расходу процессорного времени, т.к. устройство приходится опрашивать и тогда, когда оно не требует обслуживания со стороны процессора.
Ну и, формально говоря, при этом используются прерывания от таймера.
Ну, можно выделить под пулинг одно ядро процессора - полностью. Но это совсем уже глупо.
Расскажите, почему у Вас столь сильная неприязнь к прерываниям, что Вы даже кушать не можете?
Ресурсы показывают программы top и ps. Если почитать маны по ним - то там также есть ссылки на другие программы, которые могут подсказать причину зависания.
Учтите, что эти программы показывают не скрипты, а интерпретаторы скриптов.
Если скрипт продолжает работать и потребляет процессор - то он зациклился. Если не работает - то заткнулся на том, что не смог получить какие-то ресурсы (например, открыть файл).
За написание кода по работе - человек получает награду в этой жизни, в виде зарплаты.
За написание опенсорса - человек получает награду в вечной жизни.
Прерывание - это внезапный (по желанию устройства) переход к выполнению обработчика прерываний (с возможностью в любой момент завершить обработку прерывания и вернуться к выполнению прерванной программы).
Exception - это тоже как бы прерывание, но возникает не внезапно, а при выполнении программы, т.е. предсказуемо с т.з. программиста, который сам написал такую программу (т.е. мог предусмотреть, но не стал).
Ну, есть ещё exception из-за свопинга. Для программиста - не предсказуемо.
Я вот тоже не вышел из реального режима. Там я прерывания перехватывал, а в защищённый режим уже не стал вникать - это какое-то уродство.
Чтобы изучить вопрос - посмотрите, как это сделано в операционках с открытым исходным колом: FreeBSD, Linux. Возможно, имеет смысл начать со старых версий - которые ещё не работали с ACPI и PnP.
А ещё имеет смысл забить на *86 и писать операционку для ARM - там д.б. намного проще.