OSDev

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

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




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

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Читая документацию Intel, не могу понять, казалось бы, простую вещь.

Есть прерывание (исключение) Interrupt 16 — x87 FPU Floating-Point Error (#MF).
Есть прерывание 10h, которое использует BIOS.

В чём разница, если у них один и тот же номер? Какой механизм позволяет различать прерывание и исключение. Вот цитата из документации:

Цитата:
The allowable range for vector numbers is 0 to 255. Vector numbers in the range 0
through 31 are reserved
by the Intel 64 and IA-32 architectures for architecture defined
exceptions and interrupts.


Каким образом и зачем BIOS забирает зарезервированные номера прерываний? Если переходить в защищённый режим, сохраняется ли прерывание 10h за функцией BIOS?

Или я не о том думаю, смешивая разные понятия?


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Вы не о том думаете. Сервис BIOS не работает в защищенном режиме. Первые 32 вектора (0-31) используются для обработки NMI и исключений (часть векторов зарезервирована). Маскируемые аппаратные прерывания перенаправляются на вектора 32+. В этом же диапазоне размещаются и обработчики программных прерываний защищенного режима (если они вообще используются).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2013, 17:25 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Не очень понял.

В реальном режиме у нас есть исключение #16? Если есть, то куда оно перенаправляется, когда его место занимает функция BIOS 10h? И как оно вызывается тогда, если оно аппаратное и как бы "зашито" под этим номером?

Когда включается защищенный режим, то как исключение #16 заменяет собой функции BIOS 10h? Это происходит аппаратно или нужно делать вручную? Я знаю, что при переходе в защищенный режим нужно определять свою таблицу прерываний, но если этого не сделать, куда будет смотреть вектор 10h? На не работающие уже функции BIOS?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2013, 17:39 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Вы путаете источник и обработчик прерывания.
БИОС - обработчик. В защищенном режиме он не работает и можно вешать свой обработчик.
ФПУ - источник. Он не работает в реальном режиме. Единственный споспоб получить 0x10 в реальном режиме - инструкция INT.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2013, 17:46 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Так уже более понятно, спасибо.

А есть у кого-то возможность показать конкретное место в документации Intel или AMD, где написано, какие из младших прерываний в реальном режиме задействованы аппаратурой, а какие (типа #16) - нет?


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

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Интел с самого начала объявила, что первые 32 номера прерываний зарезервированы для нужд процессора. Однако разработчики БИОСа в ИБМ на это забили большой и железный и реализовали с теми же номерами целую кучу сервисов. А теперь эта глупость тянется для совместимости.

В документации на процессоры перечислены все реально используемые исключения. Читайте разделы, посвящённые исключениям (самому смотреть и тыкать носом лениво).


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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
По моим наблюдениям, в реальном режиме используются только исключения с 0 по 7.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2013, 18:48 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
SII писал(а):
Интел с самого начала объявила, что первые 32 номера прерываний зарезервированы для нужд процессора. Однако разработчики БИОСа в ИБМ на это забили большой и железный и реализовали с теми же номерами целую кучу сервисов. А теперь эта глупость тянется для совместимости.

Это печально. А я думал, что чего-то не понимаю в этом великом замысле.

Цитата:
В документации на процессоры перечислены все реально используемые исключения. Читайте разделы, посвящённые исключениям (самому смотреть и тыкать носом лениво).

В том-то и дело, что читал. Взял, например, Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals. Раздел 6.4. Там, во-первых, таблица всех исключений и прерываний без указаний того, что в реальном режиме, а что в защищенном. А во-вторых, написано
Цитата:
Vectors 0 through 8, 10 through 14, and 16 through 19 are the predefined
interrupts and exceptions, and vectors 32 through 255 are the user-defined interrupts,
called maskable interrupts.

Что никак не объясняет то, что я хочу узнать: какие прерывания на самом деле могут быть вызваны аппаратурой в реальном режиме, а какие не могут.

Читал и главу 20 про 8086 emulation в Intel® 64 and IA-32 Architectures Software Developer’s Manual, там вообще ни слова. Также открывал техническую документацию по процессорам. Конечно, там ничего не нашёл.

Я могу всё перечитать, но на это уйдет несколько недель. Поэтому спрашиваю, кто сейчас помнит, где всё написано. Не обязательно специально искать, просто может у кого-то под рукой как раз.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2013, 19:21 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
Каким образом и зачем BIOS забирает зарезервированные номера прерываний? Если переходить в защищённый режим, сохраняется ли прерывание 10h за функцией BIOS?

Или я не о том думаю, смешивая разные понятия?

Вначале был процессор 8086. Для него был BIOS. И он честно взяли и использовали прерывание Int 10h
Потом intel выпустила i286 процессор. И добавила исключения и зарезервированных исключений.

Для совместимости разделили так в реальном режиме свои прерывания в защищенном свои. Всё бы было хорошё, но некоторые моменты не доработали в реальном режиме могут просочится исключения 14 и ещё парочка (переполнение стека, и ..). Непомню номера а документациб лень смотреть

Цитата:
В чём разница, если у них один и тот же номер? Какой механизм позволяет различать прерывание и исключение. Вот цитата из документации:

Тебе заботиться не надо. В защищенном режиме прерывания биоса не работают так что смело вешаешь свои обработчики исключений.
В реальном это уже проблемы БИОСа как отличить первое от второго. Но в документации на интел есть пара советов как это сделать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 фев 2013, 19:25 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
В документации на процессоры перечислены все реально используемые исключения. Читайте разделы, посвящённые исключениям (самому смотреть и тыкать носом лениво).

В документации описаны исключения и прерывания только на защищенный режим. Для реального режима табличек не приводится. Так что по большей части это недокументированная информация. Хотя кое какие сведения в документации всё же приведены. Плюс по реальному режиму надо читать документацию на 8086


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

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


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

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


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

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