OSDev

для всех
Текущее время: 28 апр 2024, 22:44

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




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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
ZarathustrA, чтобы на 100% убедиться, что Local APIC отсутствует, надо прочитать версию из его регистра версии. И желательно перед прочтением записать в него 0, т.к. этот регистр всё-равно не изменяемый. Если прочитается 0, то LAPICа нет, а если не ноль, то сообщи его здесь, будем думать.
Вообще LAPIC бывает разных конструкций. С процессорами i486 он был внешним (ищи доку на микросхему 82489DX), а c Pentuim стал внутренним. И у них разные номера версий, вот почему важно выяснить версию. Функционал у них тоже разный.


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

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Вообще-то, Local APIC присутствует на каждом интеловском процессоре начиная с Intel Pentium (ядро P54C) (По крайней мере я так думал). В том числе и на моем ноутбучном Pentium M. Поэтому я даже не заморачивался насчет посмотреть его регистры или получить СPUID info, так как за базовый процессор брал именно этот, а не i386. Верил в спецификацию. Но как оказалось вы были правы. Товарищи из Интел решили сэкономить транзисторы (миливатты мощности) и не включили его в Pentium M, хотя спецификация Intel на Pentium подразумевает, что Local APIC является неотъемлемой частью процессора в настоящем и будущем. По крайней мере в графу "Осторожно! Может не присутствовать на будущих процессорах" он не попал.

В общем, проблема исчерпана. Нужно менять ноутбук.


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

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Хотя нет. Есть еще один вопрос. Как в отсутствие Local APIC-а запись в несуществующий регистр TPR может менять содержимое регистров PPR и APR Local APIC-а. И как в отсутствии Local APIC-а может корректно отрабатывать встроенный в него высокочастотный таймер (отсчитывать значения, генерить прерывание по истечению заданного количества тактов)?


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

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
ZarathustrA, ты хочешь сказать, что регистр версии содержит 0, а некоторые функции всё-равно работают? Это вполне допустимая кривизна аппаратной реализации. Довольно часто реально существующие компоненты отключаются путём обнуления ключевого регистра, который является индикатором наличия компонента. Например, многие процессоры Intel и AMD физически содержат больше ядер, чем отображено на логическом уровне.
Я думаю, надо ориентироваться на регистр версии. Он должен быть главным показателем наличия или отсутствия устройства, тоесть в (полно)функциональном он состоянии или нет.


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

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Спасибо за пояснение. Похоже все происходит именно тем образом, каким вы это и объясняете. Я как-то и не думал о частичной аппаратной реализации, хотя этот вариант выглядит очень правдоподобно. Вторым вариантом могут быть особенности реализации VmWare.


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

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
У меня тажа проблема. Выбрасывает двойную ошибку. Может все дело в APIC.

Код:
; Отключаем APIC   
mov     ecx, 0001b
rdmsr
or      ah, 1000b
wrmsr


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


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

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Корнень проблемы в том, что по умолчанию, PIC инициализирован таким образом, что переводит IRQ0 в INT8. В итоге я решил это следующим образом: В загрузчике просто стал маскировать все прерывания на PIC-е. И все. А вот когда ядро уже загрузится, поднимутся драйвера, в том числе и драйвер PIC-a, то тогда и будет программироваться/перепрограммироваться PIC.

P.S.:насколько я понял проблема является актуальной только для процессоров без APIC-а. На процессорах с APIC-ом решается она еще проще. Выставляется нужное значение в TPR (например 0х2F), и сам проц в не зависимости от желания контроллера прерываний на мамке, начинает игнорировать все прерывания у которых вектор меньше 0x30. То бишь PIC и IO APIC могут надрываться сколько хотят пытаясь отправить тебе сообщение о прерывании. Но до тех пор пока они не начнут отправлять прерывания с корректными векторами, твое ядро не будет даже подозревать об их существовании.


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

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


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

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


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

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