OSDev

для всех
Текущее время: 29 апр 2024, 17:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: 18 фев 2013, 21:44 

Зарегистрирован: 19 май 2011, 14:54
Сообщения: 73
Разница между аппаратным и программным вызовом INT в способе поступления в процессор. Аппаратные прерывания поступают в процессор через контроллер прерываний. Контроллер прерываний позволяет осуществлять маппинг номеров прерываний, что и делается всегда. Т.е. аппаратные прерывания нумеруются, начиная с нулевого, но за счет контроллера прерываний, мапятся на другой диапозон номеров обработчиков прерываний.

Что касается конкретно прерывания #MF от математического сопроцессора, то вопрос этот сложный, не позволяющий дать однозначного ответа, поскольку в процессе эволюции обработка этого прерывания менялась. Хорошее описание можно найти по ссылке http://www.openwatcom.org/index.php/Math_error_handling_on_x87.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 22:28 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
achesnokov писал(а):
Разница между аппаратным и программным вызовом INT в способе поступления в процессор. Аппаратные прерывания поступают в процессор через контроллер прерываний. Контроллер прерываний позволяет осуществлять маппинг номеров прерываний, что и делается всегда. Т.е. аппаратные прерывания нумеруются, начиная с нулевого, но за счет контроллера прерываний, мапятся на другой диапозон номеров обработчиков прерываний.


Термин "аппаратный" здесь представляется не слишком хорошим. Например, всякие там #PF тоже генерируются аппаратно, а не программно. Так что, ИМХО, эти прерывания надо называть внешними, поскольку их источники логически находятся снаружи процессора.

С точки зрения процессора, есть только два таких внешних источника: один для линии запроса немаскируемого прерывания NMI и другой для линии обычного внешнего прерывания IRQ. Вот на IRQ-то и заведён выход контроллера прерываний, а все внешние устройства выдают свои запросы прерываний (тоже именуемые IRQ, только с номерами: IRQ0, IRQ3 и т.д.) именно контроллеру прерываний. Последний обрабатывает поступившие запросы, выбирает самый приоритетный из числа незамаскированных и, если его приоритет превосходит приоритет текущего обрабатываемого прерывания, выдаёт процессору сигнал IRQ. Процессор, если прерывания не запрещены, выдаёт контроллеру прерываний сигнал подтверждения прерывания, и контроллер прерываний в ответ выдаёт номер вектора прерывания. Отображение номеров запросов прерываний на номера векторов задаётся программно при инициализации контроллера прерываний. Разработчики БИОСа сделали так, что прерывания IRQ0-IRQ7 отображаются на некоторые из зарезервированных векторов (не помню, на какие именно), но нормальные ОС изменяют это отображение, перепрограммируя контроллер прерываний.

Замечу, что описанная выше схема является в общих чертах верной, но достаточно условной. Кроме того, она соответствует однопроцессорной системе, каковыми были все классические ПК. Однако с появлением многопроцессорных (а позже -- многоядерных, которые логически ничем принципиально от многопроцессорных не отличаются, лишь процессоры там выполнены не в виде отдельных микросхем, а как единая микросхема) систем обработка прерываний претерпела определённые изменения. В частности, традиционный контроллер прерываний PIC сохраняется лишь для совместимости со старыми системами, а новые, поддерживающие многопроцессорность, должны использовать APIC (определённая возможность использовать PIC при этом сохраняется, но вряд ли имеет смысл в большинстве случаев).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 22:51 

Зарегистрирован: 19 май 2011, 14:54
Сообщения: 73
Цитата:
Термин "аппаратный" здесь представляется не слишком хорошим. Например, всякие там #PF тоже генерируются аппаратно, а не программно. Так что, ИМХО, эти прерывания надо называть внешними, поскольку их источники логически находятся снаружи процессора.


SII спасибо за комментарии. Исчерпывающе. Intel в документации разделяет прерывания и исключения таким образом: внешние прерывания (они же аппаратные), исключения генерируемые процессором типа #PF, #GP и т.д. и программные прерывания. http://dev64.wordpress.com/2012/04/16/interrupts-handling-in-kernel/.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 23:44 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Я в курсе, хотя тонкости терминологии постепенно забываются, если не работаешь вплотную с этим. Просто противоположностью программным прерываниям (INTам) логично считать аппаратные -- а это получается более широкая категория, чем исключительно внешние, поскольку сюда надо отнести и исключения, возникающие из-за действий программы (например, обращение по запрещённому адресу), но не вызываемые программно явным образом, в отличие от INTов. Посему, собственно, и написал то пояснение :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB