OSDev
http://osdev.su/

как обходить исключения
http://osdev.su/viewtopic.php?f=6&t=917
Страница 2 из 2

Автор:  scuter [ 04 май 2014, 10:10 ]
Заголовок сообщения:  Re: как обходить исключения

вот как ни задам вопрос, ответа почти ни разу не дождался.

Автор:  Himik [ 04 май 2014, 14:48 ]
Заголовок сообщения:  Re: как обходить исключения

В хорошем вопросе есть половина ответа :)

Автор:  scuter [ 04 май 2014, 23:18 ]
Заголовок сообщения:  Re: как обходить исключения

Himik писал(а):
В хорошем вопросе есть половина ответа :)

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

Зачем нужен форум тогда, просто так поболтать.

Автор:  Himik [ 05 май 2014, 02:20 ]
Заголовок сообщения:  Re: как обходить исключения

Вопрос "обхождения" и "реакции" на исключения является в основном проблемой пользовательских приложений, а не ОС. Некоторые исключения может обрабатывать ОС, а по остальным исключениям ОС может передавать управление в приложения, используя заранее установленные протоколы и механизмы взаимодействия. Пожалуй реализация механизма "сигналов" и будет твоей основной задачей. Я этим ещё не занимался.

Автор:  scuter [ 05 май 2014, 13:34 ]
Заголовок сообщения:  Re: как обходить исключения

Himik писал(а):
Вопрос "обхождения" и "реакции" на исключения является в основном проблемой пользовательских приложений, а не ОС. Некоторые исключения может обрабатывать ОС, а по остальным исключениям ОС может передавать управление в приложения, используя заранее установленные протоколы и механизмы взаимодействия. Пожалуй реализация механизма "сигналов" и будет твоей основной задачей. Я этим ещё не занимался.

мне надо делать отладку базовых кодов OC, и когда приложения сбоят нужно видеть где и в каком месте они сбоят,
а у меня получается что ОС просто вырубается.

Автор:  Mirmik [ 05 май 2014, 14:18 ]
Заголовок сообщения:  Re: как обходить исключения

У меня похожая ситуация.

Реализовал простой вариант.
... На всех не подключенных прерываниях висит обработчик, который выводит номер сработавшего прерывания. При возникновении исключения выводится состояние процессора на момент останова. Можно получить значение programm counter на момент останова.

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

Автор:  Mirmik [ 05 май 2014, 14:37 ]
Заголовок сообщения:  Re: как обходить исключения

Кстати говоря...
Не смог понять, можно ли простыми способами определить номер сработавшего прерывания...

Поэтому, чтобы определять номер прерывания в системе висит 256 обработчиков-затычек, по одному на номер... Можно проще?

Автор:  pavia [ 05 май 2014, 15:58 ]
Заголовок сообщения:  Re: как обходить исключения

Можно. Но Я пока так не делал. Внешних прерываний пока что 24 шт и больше не бывает.
А определить можно, читаешь ISR-регистр из контроллёра прерываний и смотришь на каком бите по счёту единица, такой и номер у вектора прерывание.

Автор:  scuter [ 05 май 2014, 16:43 ]
Заголовок сообщения:  Re: как обходить исключения

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

Вложения:
SCR.png
SCR.png [ 1.6 КБ | Просмотров: 5555 ]

Автор:  pavia [ 05 май 2014, 18:46 ]
Заголовок сообщения:  Re: как обходить исключения

Для того чтобы критическая ошибка не вызывала падения системы система должна быть устойчивой. Один из принципов устойчивости это наличие нескольких независимых модулей, частей. У меня таким модулем является отладчик и Ядро ОС. Они никак не связаны между собой кроме как в месте вызова прерывания.

Стоит также рассказать про управление. Управление строиться иерархически. Т.е управление можно изобразить в виде дерева.
Так вот в низу элементы покрывают небольшую область. А те кто стоит выше включают знания тех кто внизу.
Так вот во время вызова исключение управление должно передаваться тому кто выше так как у него больше знаний для принятия решения.
Так вот ближе к нашим баранам кто выше прерывания? Вначале управление передаётся программе в модуль обработки исключения. Если она не знает что делать, то управление передаётся выше стоящему. Кто выше прикладного приложения? Отладчик. Вот отладчик и делает вывод информации. Он принимает решение либо устранить неисправность. К примеру просто проигнорировать и перейти на следующую инструкцию.
Но что делать если отладчик этого сделать не может? Ответ прост управление должно перейти выше стоящему. А кто выше отладчика? Человек, программист который управляет этим отладчиком. Управление передаётся ему к примеру в виде консоли. Программист может устранить ошибку к примеру сменить не правильный селектор на правильный. Но как правило это просто запуск зарастание сохранённого состояния ядра. Что касается отладки прикладного ПО то это просто уничтожение процесса и передачи управления любому другому.

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