OSDev

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

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




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: APIC
СообщениеДобавлено: 29 апр 2012, 09:56 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Этот контроллер заменяет PIC, добавляя к нему 8 векторов, его регистры в оперативной памяти по постоянному адресу, сперцификуции открыты и с его помощью можно запускать процессоры. Что мы знаем про него?
Вот пример его включения на простеньком загрузчике, и настройка векторов, переход в защищёнку и установка интервала для таймера и вывод колличества векторов. К примеру не смог добавить включение мыши ps/2.
Начинаю читать спецификации и хотел сапросить по его функционалу, недавно узнал, что через его регистры можно перезагрузить и выключить комп. Что можно полезного с его помощью сделать, можно попробовать забить пример функционалом по этой теме. Также определиться с теми прерываниями, которые он использует, в том числе и вызов ошибок, что с ним нужно делать.
Напишите, что вы с его помощью делаете?
В примере кстати нет ни строчки для работы с PIC.


Вложения:
2.rar [2.91 КБ]
Скачиваний: 352
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 10:46 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
Не путайте APIC и ACPI. Совершенно разные вещи. APIC - Advanced Programmable Interrupt Controller - архитектура прерываний, в которой каждый процессор имеет Local APIC, а система - IO APIC.

LAPIC - не замена PIC. Это контроллер прерываний на стороне процессора. Он может работать в паре с IO APIC-ами, которые используется на всех многопроцессорных и большей части современных однопроцессорных, и обычной парой PIC-ов. В первом случае прерывания передаются по системной шине или шине APIC, во втором - на LINT0. У IO APIC-а три достоинства перед PIC-ами: у него больше векторов (24), он поддерживает распределение прерываний по процессорам и доступ к нему быстрее.

Если брать систему без IOAPIC-а, но с LAPIC-ом (это пень про и старше), то прерывания там распределены следующим образом: 15 обычных ISA-шных прерываний идут на обычную пару ведущий-ведомый PIC-ов, выход ведущего идет на вход LINT0 единственного процессора, который настроен в режиме ExtINT и принимает прерывания по обычному протоколу INT - INTA. На LINT1 идет NMI, и вход настроен в режиме NMI.

Если брать систему с IO APIC-ом (одним или более), то ситуация становится интереснее. Во-первых, система может работать в двух режимах: старом, на паре PIC-ов, и родном. Во втором случае прерывания на PIC-ах должны быть замаскированы, LINT0 отключен, а прерывания системы распределены по имеющимся в ней IO APIC-ам. Каждый IO APIC имеет таблицу перенаправления, в которой задается, какой процессор получает прерывание с каким номером (учтите, не IRQ, а именно вектор - номер в IDT!) получает прерывание. Так же для прерывания можно задать режим срабатывания - уровень или перепад, и полярность.

Но одна из самых интересных и полезных в многопроцессорной системе фич LAPIC - это возможность посылать межпроцессорные прерывания (IPI). Один процессор может послать произвольное прерывание другому процессору или их группе. Основное назначение этой фичи - это TLB Shootdown - сброс нужных элементов TLB после изменения таблицы страниц одним из процессоров. Запуск процессоров - INIT IPI и SIPI - лишь один из вариантов IPI, и не самый главный.

Ну, еще у LAPIC-а есть некоторые побочные источники прерываний, вроде таймера, но они достаточно примитивны.

А теперь более сложная часть. Вся эта архитектура - число IO APIC-ов, их адреса, число процессоров и их идентификаторы, распределение ISA-шных прерываний по входам IO APIC-ов - специфична для конкретной машины. Чтобы предоставить ОС информацию о том, как именно устроены прерывания на конкретной машине, есть две таблицы - таблицы от Multiprocessor Specification и таблица ACPI MADT. MPS устарела и не всегда есть на новых машинах, ACPI же есть везде, кроме сааамых древних машин, информация там аналогична MPS и разбирать ее не сложнее. Если этой таблицы нет, а она обычно есть только с IO APIC-ом, то вы можете использовать систему только в устаревшем режиме - с LAPIC-ом и PIC-ами. Ядра можно обнаружить самостоятельно, но распределять прерывания придется через IPI, что медленно и дорого.

У себя я использую только MADT и требую от системы поддержку IO APIC-а.

P.S. Как были организованы многопроцессорные системы до появления APIC-а я не знаю и не хочу знать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 12:26 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Я до сих пор использую PIC, он поддерживается в новых ПК, но если используеш APIC, то из аппоратного прерывания выходиш так
mov dword [APIC_EOI_REG_DEF], 0
у PIC было
mov al, 20h
out 020h, al
out 0a0h, al
Ваириант должен быть один, и в таблицу IDT добавляеш 8 векторов.
Если включил APIC
mov ecx, IA32_APIC_BASE
rdmsr
bts eax, 11
wrmsr
вот этими четырьмя строчками и добавил восемь векторов в таблицу и забыл про PIC, что измениться тогда?
Если вы используете MADT, то у вас выход из прерывания тоже mov dword [APIC_EOI_REG_DEF], 0?
Как вы используете дополнительные 8 векторов?
Какие приемущества вам даёт этот режим?
86я опять выделиласи многообразию вариантов и режимов мать её.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 12:44 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
  1. EOI через LAPIC надо посылать только в ответ на IPI и прерывания от IO APIC. Если вы используете LAPIC вместе с PIC (по причине отсутствия IO APIC-а), то вам надо отправлять EOI по старому.
  2. Это не только (вернее, не столько) включение LAPIC-а. Еще нужно разрешить его в регистре Spurious interrupt, сделать обработчики ложного прерывания и ошибки в IDT и прописать их вектора в регистры LAPIC-а. И еще у меня 222 (красивое число выбрано не специально) вектора прерываний.
  3. MADT - только таблица, перечисляющая, что в системе есть. Сама по себе на обработку не влияет она.
  4. Преимущества я описал в первом посте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 12:59 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Я собственно привёл пример взятый из книжки и переделанный на загрузчик. Там работают прерывания от клавы и таймера(причём хорошо), EOI там
mov dword [APIC_EOI_REG_DEF], 0, так было в книге. В книге написано, что проверку можно не делать, сразу включать, т.к. её нету только в очень древних ПК.
Реч о нём и о том, что меняется в сравнении с работой через PIC(хотел в этом разобраться).
Таблица MADT это полезная вещ, её как я понял нужно искать и проверять на её существование.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 13:04 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
Да откройте по LAPIC-у главу 10 3 тома мануала на IA-32e, это самый точный источник. MADT - таблица ACPI, а значит вам надо как минимум найти RSDP (раздел 5.2.5.1 спецификации версии 4а), разобрать ее, по указателю из RSDP найти XSDT или RSDT (5.2.8, 5.2.7), разобрать их, среди всех таблиц в них найти MADT и разобрать ее (раздел 5.2.12). Описание IO APIC-а можно взять или из даташита на его первую, выделенную реализацию - i82093AA, или найти в даташите на любой новый чипсет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 17:35 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Цитата:
Да откройте по LAPIC-у главу 10 3 тома мануала на IA-32e.

Не могу найти, скажите точное название файла.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 17:49 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1196
:lol: Прикольная шутка!

В натуре, нафига руководства читать, если код и так работает :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 18:06 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 290
Мануал на IA-32e: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
Мануал на ACPI: http://acpi.info/

И то, и другое - по первому запросу в гугле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: 29 апр 2012, 18:28 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
phantom-84 писал(а):
:lol: Прикольная шутка!

В натуре, нафига руководства читать, если код и так работает :)


Ну если бы работало, что нужно мне, то не читал бы. Читать руководство собрался сейчас, о чём писал в первом сообщении.
То, что работает описанно в книге, только что прочитал про это ещё раз и понял почему не получилось подключить мыш, возможно из за того что прерывания от клавы и таймера настраивались и для мыши тоже нужно. Для клавы был указан вектор в таблице.
Напомню, что в примере не используется PIC, не настраивается и нет его, хотя в прошлых главах книги он полностью разобран, но это у меня уже работает и об этом я уже всё знал. По этому и вопрос, без PIC остальные вектора использовать можно? PIC настраивают, говорят что первый аппоратный вектор например 20h, дальше идут все по порядку, а без этой настройки? В примере настроили клаву так.
mov еах, 1 cpuid
and ebx, OFFOOOOOOh ; high byte = Local APIC ID
mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOAPICID mov dword [IOAPIC_IOWIN_REG_DEF], 2000000h
mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOREDTBLl_hi
mov dword [IOAPIC_IOWIN_REG_DEF], ebx
mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOREDTBLl_low
mov dword [IOAPIC_IOWIN_REG_DEF], 21h


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

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


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

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


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

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