OSDev

для всех
Текущее время: 15 дек 2017, 05:32

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




Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 29 ноя 2010, 12:23 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1315
Откуда: Зеленоград
А дальше что? Стабильность нужна, а не постоянные переезды туда-сюда, не говоря о том, что свой сайт (в т.ч. и вика) требует администрирования (не только всё установить и настроить в самом начале, но потом ещё и поддерживать, устанавливать обновления и т.д. и т.п.), а на это ни у кого нет ни времени, ни желания. Ну а реклама... Гадость, конечно, но лично мне она не шибко мешает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 09 мар 2011, 22:57 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Тут занесло меня на вики прочитал про контроллер прерываний.
Цитата:
Неприятной особенностью контроллеров 8259 является возможность потери прерывания. Такое может произойти, если запросом прерывания считается не положительный перепад, а поддерживаемый на линии IRQ высокий уровень сигнала (подробнее об этом говорится в подразделе «Фиксация запросов прерываний и разделение линий IRQ»). Если контроллер прерывания выдал процессору сигнал INTR и в этот момент сигнал запроса на линии IRQ был сброшен, контроллер не будет знать, какой вектор выдать процессору в ответ на сигнал INTA. Отменить начавшуюся процедуру прерывания невозможно, поэтому контроллер выдаёт вектор, соответствующий линии IRQ7, однако 7-й бит в регистре ISR не устанавливает.

Не совсем понятной является ситуация с потерей прерывания ведомого контроллера. Судя по описанию южного моста Intel ICH10, ведомый контроллер успевает снять свой сигнал INTR до момента, когда ему необходимо будет выдать вектор, что приводит к неожиданной для ведущего контроллера пропаже сигнала IRQ2. Последний отреагирует на такое событие описанным выше образом и выдаст вектор прерывания для IRQ7, не устанавливая седьмой разряд ISR.

Откуда сей бред взялся?

Цитата:
Если контроллер прерывания выдал процессору сигнал INTR и в этот момент сигнал запроса на линии IRQ был сброшен, контроллер не будет знать, какой вектор выдать процессору в ответ на сигнал INTA.

Фиксация прерывания происходит до посылки INTR. И сбрасывается по EOI или AEOI.

Цитата:
Судя по описанию южного моста Intel ICH10, ведомый контроллер успевает снять свой сигнал INTR до момента, когда ему необходимо будет выдать вектор, что приводит к неожиданной для ведущего контроллера пропаже сигнала IRQ2.

Странно такое слышать INTR всегда импульсным был. И определялся по переднему фронту. Поэтому IRQ2 и настраивается на срабатывание по фронту.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 09 мар 2011, 23:29 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Всё гораздо проще. Вот из доков Intel на мой любимый PIIX4.

In both the edge and level triggered modes, the IRQ inputs must remain active until after the falling edge of
the first INTA#. If the IRQ input goes inactive before this time, a default IRQ7 occurs when the CPU
acknowledges the interrupt. This can be a useful safeguard for detecting interrupts caused by spurious noise
glitches on the IRQ inputs. To implement this feature, the IRQ7 routine is used for “clean up” simply executing
a return instruction, thus ignoring the interrupt. If IRQ7 is needed for other purposes, a default IRQ7 can still
be detected by reading the ISR. A normal IRQ7 interrupt sets the corresponding ISR bit; a default IRQ7 does
not set this bit. However, If a default IRQ7 routine occurs during a normal IRQ7 routine, the ISR remains set.
In this case, it is necessary to keep track of whether or not the IRQ7 routine was previously entered. If another
IRQ7 occurs, it is a default.

В обоих режимах тригера: "фронта" и "уровеня" входы IRQ должны оставаться активными пока не будет обратный фронт от первого INTA. Если вход IRQ переходит в неактивное состояние, то происходит прерывание по умолчанию IRQ7, во время одобрение прерывания. Это может быть полезной гарантией для того, чтобы обнаружить перерывания, вызванные шумом, искажениями на входах IRQ. Чтобы реализовать эту опцию, обработчик IRQ7 используется для, "очистки" просто напросто выполняет инструкцию
инструкция по возвращению, таким образом игнорируя перерывания. Обычный, неподдельный, не ошибочный IRQ7 также возможно распознать при помощи чтения ISR.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 10 мар 2011, 00:03 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
А да да и в доке на сам 8259A PROGRAMMABLE INTERRUPT CONTROLLER (8259A/8259A-2)
От 1988 года тоже самое говорится.

If no interrupt request is present at step 4 of either
sequence (i.e., the request was too short in duration)
the 8259A will issue an interrupt level 7. Both the
vectoring bytes and the CAS lines will look like an
interrupt level 7 was requested.
When the 8259A PIC receives an interrupt, INT becomes
active and an interrupt acknowledge cycle is
started. If a higher priority interrupt occurs between
the two INTA pulses, the INT line goes inactive immediately
after the second INTA pulse. After an unspecified
amount of time the INT line is activated
again to signify the higher priority interrupt waiting
for service. This inactive time is not specified and
can vary between parts. The designer should be
aware of this consideration when designing a system
which uses the 8259A. It is recommended that
proper asynchronous design techniques be followed.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 10 мар 2011, 09:41 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1315
Откуда: Зеленоград
pavia писал(а):
Откуда сей бред взялся?


И в чём именно бред?

Цитата:
Фиксация прерывания происходит до посылки INTR. И сбрасывается по EOI или AEOI.


Что значит "фиксация прерывания"? Если фиксация _запроса_ прерывания, то она производится только для запросов, распознаваемых по фронту, а запросы по уровню не фиксируются, почему и могут быть потеряны. Если же имеется в виду фиксация факта передачи запроса прерывания на обработку процессору (установкой соответствующего бита в ISR), то она производится в во время передачи запроса процессору, а в этот момент собственно запрос может быть потерян (если он распознавался по уровню и соответствующая линия IRQ вдруг стала неактивной), что, собственно, и создаёт проблемы.

Цитата:
Странно такое слышать INTR всегда импульсным был. И определялся по переднему фронту. Поэтому IRQ2 и настраивается на срабатывание по фронту.


Я ж написал -- "не совсем понятно". Разбираться у меня особого желания с этим не было, а из документации на ICH10 не всё было очевидно.

Кстати говоря, ссылаться на документацию на сам 8259 рискованно: реализация PIC в чипсетах далеко не соответствует оригинальной (хотя б потому, что половина функций и режимов не реализована вообще, поскольку на ПК она использоваться не может). Так что надо разбираться именно с документацией на достаточно современные южные мосты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 10 мар 2011, 19:11 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Цитата:
Что значит "фиксация прерывания"? Если фиксация _запроса_ прерывания, то она производится только для запросов, распознаваемых по фронту, а запросы по уровню не фиксируются, почему и могут быть потеряны.

Вы не правы.
Цитирую ICH10

Цитата:
One or more of the Interrupt Request lines (IRQ) are raised high in edge mode, or
seen high in level mode, setting the corresponding IRR bit
.

Написано что фиксируется.
Поэтому вы не правы.


Цитата:
(установкой соответствующего бита в ISR), то она производится в во время передачи запроса процессору,
Снова ошибка. ISR устанавливается не во время передачи запросу процессору, а во время ответа процессора.

Цитата:
Upon receiving the first internally generated INTA# pulse, the highest priority ISR
bit is set and the corresponding IRR bit is reset.


Цитата:
то она производится в во время передачи запроса процессору, а в этот момент собственно запрос может быть потерян (если он распознавался по уровню и соответствующая линия IRQ вдруг стала неактивной), что, собственно, и создаёт проблемы.
Это домыслы.

Цитата:
In both the edge and level triggered modes, the IRQ inputs must remain active until
after the falling edge of the first internal INTA#. If the IRQ input goes inactive before
this time, a default IRQ7 vector is returned.


Интел сами пишут что прерывание должны быть активны.


Все проще. Вектор 7 служи для обнаружения дребизка в контактах. Если будет кратковременное срабатывание прерывания. То оно будет выглядит как будто оно потерялось. На самом деле это признак шума в проводах.


Цитата:
Кстати говоря, ссылаться на документацию на сам 8259 рискованно: реализация PIC в чипсетах далеко не соответствует оригинальной (хотя б потому, что половина функций и режимов не реализована вообще, поскольку на ПК она использоваться не может). Так что надо разбираться именно с документацией на достаточно современные южные мосты.

Да ладно какие там не реализованы? Там только нет 8085/8088. А во вторых ломать проще чем строить. Кто в здравом уме будет переписывать отлаженный код? Так и инженерам интел проще было скопировать готовый PIC8259 в тот-же мост. Вот и все дела. Убрать лишнее.

Им даже полярность было проще поменять чем расширение для PIC делать.
Так что ссылаться на старые источники можно. Я бы сказал нужность. Да коэффициент доверия со временем падает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 11 мар 2011, 08:01 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1315
Откуда: Зеленоград
pavia писал(а):
Цитата:
Что значит "фиксация прерывания"? Если фиксация _запроса_ прерывания, то она производится только для запросов, распознаваемых по фронту, а запросы по уровню не фиксируются, почему и могут быть потеряны.

Вы не правы.
Цитирую ICH10

Цитата:
One or more of the Interrupt Request lines (IRQ) are raised high in edge mode, or
seen high in level mode, setting the corresponding IRR bit
.

Написано что фиксируется.
Поэтому вы не правы.


Что произойдёт, если в режиме запроса уровнем линия IRQ сначала будет активной, а потом перестанет таковой быть? Соответствующий бит IRR останется установленным или тоже упадёт в 0? Вот сначала разберитесь с этим вопросом, а потом заявляйте, что я не прав.

Цитата:
Цитата:
(установкой соответствующего бита в ISR), то она производится в во время передачи запроса процессору,
Снова ошибка. ISR устанавливается не во время передачи запросу процессору, а во время ответа процессора.

Цитата:
Upon receiving the first internally generated INTA# pulse, the highest priority ISR
bit is set and the corresponding IRR bit is reset.


Формально -- ошибка, фактически -- нет, поскольку передача запроса процессору идёт совместно с получением от него ответа. Но выразился неправильно, так что спорить не буду.

Цитата:
Цитата:
то она производится в во время передачи запроса процессору, а в этот момент собственно запрос может быть потерян (если он распознавался по уровню и соответствующая линия IRQ вдруг стала неактивной), что, собственно, и создаёт проблемы.
Это домыслы.

Цитата:
In both the edge and level triggered modes, the IRQ inputs must remain active until
after the falling edge of the first internal INTA#. If the IRQ input goes inactive before
this time, a default IRQ7 vector is returned.


Интел сами пишут что прерывание должны быть активны.


Это не домыслы, а суровая правда жизни. Линии запросов _должны_ оставаться активными, чтобы такой ситуации не возникало, однако реальная жизнь тем и отличается от теории, что там регулярно происходят "неправильные" вещи. Так что приходится учитывать, что сигнал запроса _может_ пропасть в самый неподходящий момент -- и тогда PIC сделает то, что написано -- а именно сгенерирует прерывание по вектору для IRQ7. Соответственно, обработчик этого прерывания должен проверять, что послужило его источником, иначе будут проблемы.

Цитата:
Все проще. Вектор 7 служи для обнаружения дребизка в контактах. Если будет кратковременное срабатывание прерывания. То оно будет выглядит как будто оно потерялось. На самом деле это признак шума в проводах.


Не знаю, что такое "дребизк", а дребезг бывает только контактов, но никак не в контактах -- но это всё придирки. А IRQ7 вообще-то служит не для обнаружения помех, которые могут возникать в линиях запросов прерываний, хотя "по совместительству" вынужден выполнять и эту работу.

Цитата:
Цитата:
Кстати говоря, ссылаться на документацию на сам 8259 рискованно: реализация PIC в чипсетах далеко не соответствует оригинальной (хотя б потому, что половина функций и режимов не реализована вообще, поскольку на ПК она использоваться не может). Так что надо разбираться именно с документацией на достаточно современные южные мосты.

Да ладно какие там не реализованы? Там только нет 8085/8088. А во вторых ломать проще чем строить. Кто в здравом уме будет переписывать отлаженный код? Так и инженерам интел проще было скопировать готовый PIC8259 в тот-же мост. Вот и все дела. Убрать лишнее.


Убрана там не только поддержка 8080 (а отнюдь не 8088), но не в этом дело. Никто готовый кусок оригинального 8259 не брал, его проще было переделать -- хотя бы потому, что сейчас электронные схемы описывают на специальных языках (VHDL, Verilog, ещё что-то), а не делают на схемном уровне, как это было во времена создания 8259. Другое дело, что при переносе из чипсета в чипсет никто это переделывать не будет.

Цитата:
Им даже полярность было проще поменять чем расширение для PIC делать.
Так что ссылаться на старые источники можно. Я бы сказал нужность. Да коэффициент доверия со временем падает.


Можно, но осторожно. А полного доверия у меня ни к каким источникам нет, поскольку регулярно попадаются если не прямые ошибки, то, по крайней мере, неточности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 11 мар 2011, 10:28 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Все забывал написать. Насколько помню PCI держит прерывание пока его не сбросят. Поэтому потери из-за того что оно нежданно сбросилось быть не должно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 11 мар 2011, 11:15 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1315
Откуда: Зеленоград
Не должно, но может -- хотя бы из-за неисправности. Поэтому предусматривать возможность потери прерываний необходимо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Wiki разработчиков OS
СообщениеДобавлено: 15 мар 2011, 19:21 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Добавил очередной перевод.
Прошу помощи в викификации и правки.
http://ru.osdev.wikia.com/wiki/IAM:Глава_5


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

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


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

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


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

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