Re[3]: Отличное видео про io подсистему компьютера.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.25 17:32
Оценка: 6 (1)
Здравствуйте, elmal, Вы писали:

E>Здравствуйте, netch80, Вы писали:


N>>Ну так потому что невежа-автор не отличает DMA от прерываний — потому и немного.

E>Во первых, порекомендуй видео лучше.

Эээ... почему это я должен рекомендовать _видео_? Это наименее подходящий формат для объяснения подобных вещей. Видео полезно там, где что-то показываешь и иначе слишком долго и занудно рассказывать про «вот тот зелёный элемент который второй слева и на котором написано «хрен», но на самом деле там горчица, что и показано на нём же рисунком в стиле порошка».

Такие вещи подаются текстом. Возможно, с картинками. И вообще, можно начать с книг Таненбаума, Иртегова и прочих, кто писал про это...

E> А во вторых, в каком то виде про прерывания он так или иначе сказал. Только без малейших подробностей, но если копать — там закопаешься, особенно если еще разные архитектуры.


"В каком-то виде" он сказал, да, но совсем не то, что надо было сказать.

E> Основное так или иначе в видео сказано, и где там равенство DMA от прерываний я не очень понимаю, даже близко такого не увидел.


В том, что то, что он сказал про прерывания, если хоть как-то попытаться конструктивно понять, то это применимо именно для DMA. Иначе противопоставления с PIO в принципе быть не может, PIO не противопоставляется прерываниям, а дополняет (как одно из) их до полного механизма.

E> И там много чего не сказано, что хотелось бы знать.


Да. Лучше сказать, что там вообще ни о чём.

E> Например как разные устройства делят адресное пространства,


При правильной настройке они получают разные адреса. Настройкой занимается BIOS или OS в случае PCI (и ISA PnP, было когда-то такое), или производитель карт плюс админы (если могут переключателями менять) в случае ISA. Главное, что таки в современном мире эти адреса у каждого устройства можно менять в широких пределах.

E> как драйвер узнает, что такой то адрес будет использоваться именно такой видеокартой


Зависит от ОС. Но в общем случае его вызывает ОС со словами "гляди, тут, кажется, для тебя устройство" и предоставляет некую ссылку (указатель), по которой можно найти те адреса, которые задала ОС (поменяла после BIOS или нет, уже следующий вопрос).

E> и отображать адреса нужно именно сюда,


Этого не понял.

E> как разрешаются конфликты если поставили 2 видеокарты,


На ISA так нельзя было. На PCI они просто получат разные адреса в процессе первичной настройки, а метод детекта типа устройства в PCI даст, что ОС будет знать, что тут таки видеокарты, и позовёт драйвера соответственно типу.

У каждого устройства на PCI можно получить фиксированные данные — пару id vendor+device (ну ещё есть такие же для поставщика, иногда зовётся не device id, а card id), по ним в базе в самой ОС и ищется драйвер. Как это сделано — зависит от ОС. Например, FreeBSD предпочитает подход, где в данных драйвера вкомпилирован список пар таких id.

E> особенно интересно про видеокарты встроенную в процессор.


Она выглядит точно так же, как видеокарта, только находится в современных процессорах на шине 0, которая не выходит за пределы процессора.

Дальше уже дело BIOS и ОС опознать, какая карта активна — например, спросить каждую, вставлен ли в неё хоть какой-то шнурок от монитора. Но тут я уже деталей не знаю. Возможно, данные ещё и передаются по наследству от BIOS.

E>Да и вообще, как эти шины все работают я не понимаю лично вообще ни черта, начиная с шины ISA, про PCI и говорить не стоит. Когда понимал — тогда было просто — на шину были выведены большинство контактов процессора, а далее уже пошли эти мосты и уже понимания как это все работает через эти мосты нет ни черта!


Про мост достаточно сказать простую вещь: он слушает обращения к нему и если комбинация тип+адрес входит в диапазон настроенного у него, он пробрасывает в подчинённую сторону, иначе игнорирует.

E> Понимания в деталях естественно, включая всякие Plug And Play и т.д. А знать иногда б не помешало, например какого хрена USB устройства периодически отваливаются.


Про USB я уже тут ничего не скажу. Может, драйвер плохо рассчитывает толщины потоков и игнорирует какие-то устройства. Тут надо детали знать.

E> А там ведь лютая жуть идет, мало того что через чипсет, так потом может идти устройства через USB разветвители — уже давно это работает блин как магия для меня.


Да там нет особой магии и жути. Хост имеет пул номеров (от 1 до 127), которые могут назначаться устройствам. Хаб умеет запросы сверху, если знает такое устройство, передать вниз к устройству (или другому хабу), а снизу от устройства — передать наверх. Ну и хаб умеет определять факт подключения устройства и транслировать общение с ним, пока не задан номер. В общем и всё.

Жуть там начинается, когда распределяются полосы трафика. И то, возможно, это я не видел описания, как это делать прямо и ровно.

E> Общий принцип то понятен — прерывания, DMA и таймер, все как раньше, но как именно это все мапится на адресное пространство, что происходит при включении — вообще темный лес.


Ну можешь поспрашивать постепенно. Кто-нибудь ответит, хоть и не сразу.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.