OSDev

для всех
Текущее время: 24 июл 2019, 10:30

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




Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 26 апр 2010, 20:11 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Если снять флаг разрешения прерываний из TSS задачи на которую происходит роковое переключение, то все ОК. Никаких эксцессов не происходит.

Кстати, на досуге пробовал заполнять всю IDT под завязку. Все дескрипторы не принадлежащие диапазону исключений (0x20 - 0xFF) указывали на заглушку типа iretd. При этом проблема продолжала жить.

P.S.: Обработчики прерываний вроде как корректные. По крайней мере исключения генерируемые в ядре или в задаче, а также программные прерывания отрабатывают по плану.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 26 апр 2010, 20:21 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Да, и еще, при проведении последних танцев с APIC-ом создалось устойчивое впечатление, что поток исключений превратился в единичное явление. Задача с разрешенными прерываниями с криком double fault терминируется а управление передается на специальный ядерный hlt-цикл, который после этого тихо весит до посинения. Если я правильно понимаю, то при повторении эксцесса с double fault-ом привело бы к Kernel Panic, которая не приминула бы отразиться на экране, но я ее не наблюдаю. :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 26 апр 2010, 20:55 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Еще вопрос: по умолчанию все прерывания на IO APIC-е должны быть замаскированы. Кто тогда может их генерировать, если я их не демасирую?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 26 апр 2010, 23:03 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1382
Это Вам специалиста по АПИКу нужно, а есть ли тут таковые... Я экспериментировал ещё во времена пня-2, и с тех пор не доводилось, так что банально ничего не помню (ну, кроме самых общих вещей, но здесь-то интимные подробности нужны). Но, если Вы определили все 256 обработчиков, а ситуация не поменялась, то дело не во внешнем прерывании.

ZarathustrA писал(а):
Да, и еще, при проведении последних танцев с APIC-ом создалось устойчивое впечатление, что поток исключений превратился в единичное явление. Задача с разрешенными прерываниями с криком double fault терминируется а управление передается на специальный ядерный hlt-цикл, который после этого тихо весит до посинения. Если я правильно понимаю, то при повторении эксцесса с double fault-ом привело бы к Kernel Panic, которая не приминула бы отразиться на экране, но я ее не наблюдаю.


Вот тут лично мне неясно. Ведь процессор ничего сам не делает, и возникновение паники -- дело целиком Ваше, а не проца. Он лишь повторное прерывание может кинуть, а уж что делать в такой ситуации -- решать программе, т.е. Вам. На всякий случай проверьте, как ДФ обрабатывается. Ну и вообще, ИМХО, лучше хотя бы временно (для отладки) в качестве обработчика сего события встроить простейший БСОД, который распечатывал бы регистры и стек: в конце концов, при нормальной работе ДФ не возникает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 27 апр 2010, 20:16 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Вопрос был решен костылем. Костыль представлял из себя проверку в обработчике исключений, который просто игнорирует первый double fault в системе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 28 апр 2010, 02:49 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1382
Но всё же надо разобраться, откуда эти ДФы ползут...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 28 апр 2010, 10:02 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1204
Действительно, такой костыль, тем более на дабл фолте неприемлем. Если вдруг :) все заработает нормально, то будет игнорироваться дабл фолт. Автору нужно отбросить все лишнее и проработать конкретно механизм, в котором происходит ошибка. Вообще странно, что подобная "фундаментальная" ошибка всплывает только сейчас. Но такое иногда происходит, поэтому нужно четко сказать, после каких изменений эта ошибка стала появляться. Тут уже столько было приплетено (APIC, TSS и т.п.), а нужно наоборот от всего этого на время избавиться. APIC нафиК - перепрограммируешь PIC (уводишь базу от векторов 0-x1F, маскируешь все или почти все пины в ISR), используешь дефолтный при загрузке режим PIC/Virtual Wire. TSS нафиК - появление исключения скорее всего связано не с использованием TSS, а с разрешением прерываний в "новой задаче" - если без использования TSS все нормально, тогда уже будешь искать ошибку в TSS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 28 апр 2010, 19:15 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Фишка в том, что по-умолчанию, при запуске системе все прерывания в IO APIC-е замаскированы. Им просто неоткуда появляться. Их не должно быть. Вторая фишка в том, что по-умолчанию, вектора 0х00-0хF зарезервированы процом. Даже если импрувить APIC по-максимуму (обработка ложных прерываний и ошибок APIC-протокола) то проблема все равно остается. Я все больше склоняюсь к выводу, что корнем зла являяется ритуальная машина... упс. Виртуальная машина.

P.S.: Обрубать APIC пробовал - не помогло.
P.P.S.: Проблема точно связана с прерываниями, т.к. если в задаче с разрешенными прерываниями на раннем этапе выставить комманду cli, то она валиться раз - через раз. Тем более, согласитесь, что бесконечному циклу типа 0хEB 0xFE сложно генерить двойное исключение через раз.

P.P.P.S: Подскажите к какой виртуалке можно податачить vmWare-вские vmdk файлы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 28 апр 2010, 22:34 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1382
Кстати говоря, полагаться на "по умолчанию" нельзя ни в коем случае -- эти "умолчания" отнюдь не всегда соблюдаются даже в железе (ошибки разработчиков везде бывают), ну а виртуальные машины кривые все без исключения (правда, сделать нормальную ВМ для столь кривой архитектуры, как ИА-32 -- это действительно сверхсложная задача, а если добавить то, что нет совершенно полной, внятной и безошибочной спецификации даже на процессор -- то тем более). Поэтому надо _всегда_ проводить _полную_ инициализацию всего и вся, что используешь, не надеясь на то, что что-то там установлено заранее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: поток double fault exceptions
СообщениеДобавлено: 29 апр 2010, 10:20 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1087
Откуда: Балаково
А в обработчике прерываний делается команда EOF? Если нет, то поэтому и не приходит больше прерываний, и не возникает больше ошибок.
Ещё должны быть замаскированы прерывания контроллера PIC 8059A. Для этого в порты 0x21 и 0xA1 надо записать 0xFF.


Последний раз редактировалось Himik 29 апр 2010, 10:28, всего редактировалось 1 раз.

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

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


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

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


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

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