Прерывания
Объясните, пожалуста, чайнику в асемблере, что такое прерывание по сути.
Цитата:
Originally posted by Fatal
Объясните, пожалуста, чайнику в асемблере, что такое прерывание по сути.
Объясните, пожалуста, чайнику в асемблере, что такое прерывание по сути.
Прерывание выполнения кода наверное :) Управление передаётся обработчику, адрес его указан в таблице прерываний(IDT или просто таблица в реальном режиме), и возвращается после окончания работы этого самого обработчика на инструкцию следующую за int, или просто продолжается выполнение в случае аппаратного прерывания(IRQ).
Цитата:
Originally posted by (C)dragon
Прерывание выполнения кода наверное :) Управление передаётся обработчику.
Прерывание выполнения кода наверное :) Управление передаётся обработчику.
А что такое обработчик?
Это процедура, которая вызывается при возникновении прерывания. Литературу читать надо.
К процу идут такие линии, на них устройство подаёт сигнал, если мол оно закончило текущую работу, в ответ проц выбирает из IDT или из табицы, которая начинается с 0-го адреса адресс подпрограммы, и вызывает эту подпрограмму. Эти линии называют IRQ. Но подпрограмм(говорят векторов прерываний) 255, т.е больше чем этих линий. Эти подпрограммы можно также вызвать так int <номер подпрограммы>. К примеру, когда sound blaster отыграл весь звук, который ему передали, вызывается нужная подпрограмма, которая суёт ему новый кусок. Но, как я говорил, векторов больше, чем сигналов, и поэтому на прерываниях висят так же системные подпрограммы, например на int 21h - висит главная подпрограмма-интерфейс к твоей проге от MSDOS, например, настроив регистры, и вызвав int 21h ты можешь создать файл, вывести строку на экран и т.д. Ядро NT тоже имеет такую подпрограмму, токо я номер вектора незнаю, но зовут это NativeApi, а у линуха такая подпрограмма забита на 80h-м прерывании. А юзают это потому, что доступно это любой программе, а то ведь передавать адрес неудобно, на подпрограмму, и с появлением защищённого режима процессора, с вызовом прерывания возможен одновременная смена приоритета, как запрограммишь...Поэтому и юзает Линуха и Винда для себя прерывание, чтоб из режима пользователя, в режим ядра переходить так.