Как адресное пространство ввода / вывода отображается на устройства? - PullRequest
8 голосов
/ 10 февраля 2012

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

Я понимаю, что основная память (ОЗУ) и для ввода / вывода, управляемого портом, имеет свое собственное адресное пространство, которое используют такие инструкции, как IN, OUT.

Если бы кто-то написал программу на ассемблере в реальном режиме, мог бы ли разработчик иметь необходимую документацию, показывающую, какие диапазоны адресов для определенных слотов материнской платы находятся в каком диапазоне адресов? Скажем, слот PCIe - это адрес X, принтер Y.

Являются ли адреса стандартным диапазоном адресов в зависимости от типа шины?

Что я могу прочитать, чтобы лучше это понять? Надеюсь, кто-то может помочь. Спасибо.

~ редактировать

Обращаясь к системам ПК.

Ответы [ 2 ]

13 голосов
/ 10 февраля 2012

На компьютере x86 биос обычно управляет распределением плоского / физического адресного пространства, и все использует некоторое место в этом пространстве.Таким образом, BIOS будет «перечислять» устройства pcie, выходя на каждый слот pcie, чтобы увидеть, есть ли кто-нибудь там.Существуют стандартные регистры конфигурации, которые должны иметь устройства pcie, некоторые из которых указывают, сколько адресного пространства и какого типа (на основе ввода / вывода или отображения памяти).Биос пытается сделать всех счастливыми и дать им то, что они хотят.Windows или Linux не будут переназначать эти устройства или адреса, они берут то, что им дает биос.не каждая система pcie работает таким образом, но, к сожалению, именно так работает компьютер.

Так что, если вы хотите разобраться с гайками и болтами, возьмите эту книгу http://www.mindshare.com/shop/?c=b&section=0A6B150A Я думаю, что есть ссылка для скачивания дляесли вы используете google «архитектура системы pci»

, если вы запускаете linux, найдите источники для lspci, есть несколько библиотек и примеров, которые вы можете разорвать и создать свои собственные, чтобы проверить, какие устройства в вашей системе икаков их базовый адрес и диапазон памяти.Скорее всего, вы захотите просто сделать то, что делают другие операционные системы, и прочитать хост-контроллеры pcie, чтобы увидеть, что было выделено, и предоставить эту информацию программному обеспечению, работающему в этой системе.Вы можете загрузиться один раз, и принтер получит адрес 0xE0000000, а в следующий раз - 0xDB000000, предоставить механизм вашей среде для предоставления этих адресов или абстрагировать их по некоторому фиксированному адресу в адресном пространстве вашей среды, и ваш код будет управлять преобразованием в физический адрес./ реальный адрес для устройства.

Я предполагаю, что используя термин реальный режим, вы говорите о какой-то разновидности системы x86, и это, вероятно, ПК какой-то разновидности.Может быть, Mac.Не уверен, как именно Mac это делает, не знаю достаточно об их перечислении.аппаратное обеспечение, скорее всего, все еще представляет собой процессор Intel с северным и южным мостами, за которым следует несколько мостов pcie или других чипов intel pcie, которые в конечном итоге заканчиваются несколькими устройствами pcie, либо припаянными к плате (видеочипам и т. д.), либо слотам pcie.для подключаемых карт.Если вы запускаете linux и используете lspci и просматриваете номера поставщиков и запчастей, вы можете найти большинство руководств / таблиц для устройств intel (ID поставщика 8086) на веб-сайте intels и использовать lspci и его родственные программы для проверки управления.и регистры состояния в этих контроллерах pcie, опять же, если вы хотите глубже вникнуть в это, я не уверен, каков ваш настоящий интерес.

Адреса не являются ни стандартными, ни фиксированными, каждый bios частично настраивается для этой модели материнской платы, диапазон адресов для пространства pcie обычно составляет один гигабайт или меньше всего процессорного пространства, но это окно меняется сперейти на 64-битную и потребность в большем количестве места (медленное движение).расположение этого окна pcie зависит от аппаратного обеспечения (см. таблицы данных, которые я упомянул для этих различных устройств Intel, или через или nvidia, или кто угодно, если это система amd), если BIOS настроен для работы в 32-битном режиме в этом окне pcieдля всех устройств pcie может быть где-то между 2 гигабайтами, но, конечно, ниже отметки 4 гигабайта, но это не означает, что все эти системы используют отметку 3 гигабайта.для 64-битных я думаю, что они, как правило, также находятся ближе к вершине, но от материнской платы к материнской плате это меняется.Затем, когда дело доходит до перечисления шины, она зависит как от материнской платы, так и от конкретного компьютера, некоторые устройства прикрепляются к материнской плате болтами / припаяны и каждый раз перечисляются в одном и том же порядке, но карты, которые вы подключаете к слотам, должны реагироватьхост и иногда перечисляются в зависимости от того, кто ответит первым, вы можете загрузить 20 раз и увидеть ту же схему, загрузиться еще раз, и две карты могут поменяться местами, потому что порядок их перечисления изменился.Поэтому, даже если кажется, что ваша видеокарта всегда находится в одном и том же месте, не кодируйте этот номер где-либо жестко, всегда сканируйте шину или таблицы pcie или делайте библиотечные вызовы, чтобы выяснить, где это находится.он, вероятно, не будет двигаться после того, как вы найдете что-то, пока вы не перезагрузите компьютер и не попробуете снова, чтобы вам не приходилось повторно сканировать, чтобы найти, где что-то находится каждый раз, когда вы хотите получить к нему доступ.

да, если вы обновляете или понижаете версию своего BIOS, биос - это просто программное обеспечение, иногда изменения в биосе связаны с перечислением pcie (не редкость, говорят, что популярная видеокарта плохо работает на материнской плате, которую они устанавливают).мод в программное обеспечение BIOS, чтобы изменить сброс или что-то еще, чтобы дать этой карте больше шансов на работу), и это может изменить перечисление для всей системы.

0 голосов
/ 18 июня 2013

Если написать реальную программу на ассемблере

ISR - это то, что вы можете после (Программа обработки прерываний).
;

Это список адресов обработчиков прерываний, хранящихся в первом сегменте памяти. (сегмент 0000). Каждый номер прерывания имеет 4-байтовый адрес обработчика, сегмент и смещение, чтобы которая будет разветвляться при вызове этого прерывания.

Адрес может быть найден путем умножения номера прерывания на 4, то есть смещения, при котором сохраняется адрес обработчика.

Местоположение ISR может быть определено как 0000: ax * 4, прерывания DOS имеют общий номер 21h. Так что просто загрузите топор этим (или al)

Здесь есть список прерываний DOS ... он довольно большой ...

http://www.ctyme.com/intr/int-21.htm

...