OSDev
http://osdev.su/

WatchDog
http://osdev.su/viewtopic.php?f=7&t=435
Страница 1 из 2

Автор:  418ImATeapot [ 16 авг 2011, 14:39 ]
Заголовок сообщения:  WatchDog

Сейчас почитал wiki.osdev.org про NMI. Возник вопрос:
В обычноп PC есть WatchDog?
Если есть, то как ему заткнуть рот?

Я ничего о нем не знал и все Хелловорды в PM работали. Может, незнание от ответственности избавляет :-)))?

Автор:  SII [ 16 авг 2011, 15:13 ]
Заголовок сообщения:  Re: WatchDog

Мне как-то не попадались сторожевые таймеры в обычных ПК (всякие промышленные не в счёт). Что касается НМИ, его можно отключить средствами чипсета, но это, естественно, зависит от платформы. Но используется сие прерывание для извещения ЦП о какой-то нехорошей аппаратной ошибке, поэтому в нормальных условиях не возникает, а на ненормальные можно не обращать внимания, если система, так сказать, любительская.

Автор:  phantom-84 [ 16 авг 2011, 16:56 ]
Заголовок сообщения:  Re: WatchDog

По-моему это достаточно универсальный вариант отключения для PC:
Код:
        mov al,8Fh
        out 70h,al
        in al,71h


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

Автор:  418ImATeapot [ 16 авг 2011, 19:07 ]
Заголовок сообщения:  Re: WatchDog

Отключать само NMI наверное не не надо, как еще определить, что компу кирдык. И потом, с APIC, насколько я знаю, удобно использовать NMI.
NMI в принципе тоже Guru Meditation Error (пока не включили APIC).
Главный вопрос был - что раз в пять секунд нигде битик сбрасывать не надо.

Автор:  phantom-84 [ 16 авг 2011, 19:36 ]
Заголовок сообщения:  Re: WatchDog

Отключать надо только на время инициализации, а потом снова включать. Ну или не включать, если не знаешь или не определился с тем, как будешь обрабатывать возникновение NMI.

Автор:  Yoda [ 17 авг 2011, 16:57 ]
Заголовок сообщения:  Re: WatchDog

SII писал(а):
используется сие прерывание для извещения ЦП о какой-то нехорошей аппаратной ошибке, поэтому в нормальных условиях не возникает...

На многих чипсетах NMI используется для извещения ЦП об ошибке чётности при обращении к памяти. Соответственно, возникает только при битой памяти или если данные попортились на очень низком аппаратном уровне. Например, данные рушатся из-за плохого питания.
Как обходиться с таким прерыванием, не совсем понятно.

Автор:  Himik [ 17 авг 2011, 17:10 ]
Заголовок сообщения:  Re: WatchDog

Yoda писал(а):
Как обходиться с таким прерыванием, не совсем понятно.

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

Автор:  SII [ 17 авг 2011, 18:47 ]
Заголовок сообщения:  Re: WatchDog

Скорей, отБСОДить это дело и зависнуть... Более продвинутая обработка имеет смысл лишь под конкретную аппаратуру, когда разработчик системы знает, в каких именно случаях возникает прерывание и какие действия можно предпринять. Например, на "настоящих" серверах (т.е. мощных компутерах со специальными матерями и т.д. и т.п.) может быть установлено много модулей памяти, и при отказе какого-либо из них часто можно продолжать работу, "прибив" лишь пострадавшие задачи (если нет возможности сохранить их работоспособность каким-либо способом). Но это, повторюсь, специфические случаи, и подобное решение для системы "для всего" не подходит.

Автор:  KIV [ 18 авг 2011, 23:37 ]
Заголовок сообщения:  Re: WatchDog

Блокировать NMI имхо смысла нет. Он происходит при критической ошибке (вроде битой памяти). Продолжать работу может быть даже опасно. Либо обрабатывать его должным образом, либо пусть система крешится от того что не задан обработчик NMI, чем от того что рухнет ядро из-за повреждения свои данных или кода, ещё неизвестно что успевшее натворить. А если хочется именно корректно обработать, то зависать/перезагружаться/выводить сообщение об ошибке и делать одно из предыдущих пунктов.

Автор:  pavia [ 21 авг 2011, 10:14 ]
Заголовок сообщения:  Re: WatchDog

Думаю не для кого не секрет, то что я сейчас напишу.

Если посмотреть в документацию IBM PC ps/2 то можно увидеть что сторожевой таймер есть.
Цель у него простая отследить зависание системы. Делает он следующим образом контролирует прерывания если во со времени срабатывания прерывания до момента его сброса прошло большое определенного интервала, то сторожевой таймер генерирует NMI.

Идея хорошая. Но обычно обработчик прерывания должен быть коротким. И как следствие зависнуть он может только в одном случае неисправность железо. Баг и недоработки в коде обработчика не рассматриваю так как в коротком коде и легко найти.

Считаю что даже со сбойным железом компьютер должен работать.
А вот с NMI там дело сложнее. Его источником могут быть разные компоненты и это надо смотреть документацию на конкретную платформу - материнку.
По поводу чётности памяти. Я так понимаю для такой проверки нужно память с "ECC" а в обычных компах такую не ставят.

Ещё ACPI и Power Menager используют NMI под свои нужды. НО тут можно настроить задействовать NMI или нет.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/