Я знаю, что доступ к портам в адресных пространствах ввода-вывода требует определенных инструкций ввода/вывода, и они не являются частью физической памяти (ОЗУ), но я не понял. Где I/O адресное пространство фактически расположено (физически)? (какой-то ОЗУ в) контроллер ввода/вывода? Зарезервированная сторона физической памяти?Расположение адресного пространства ввода-вывода с отображением портов
ответ
На ранних процессорах X86 (а также на 8080, Z80 и т. Д.) Адресное пространство ввода/вывода было на той же шине данных и адресов, что и память, но было доступно путем активации выделенного вывода IO-запроса на CPU
так электрический I/O был в parallell с ОЗУ
дней Thses процессор говорит на HDMI и PCIe непосредственно столько пространства ввода/вывода либо внутренний для процессора (например, интерфейс VGA I/O) или доступ к более последовательной шине PCIe PCIe также используется для ввода/вывода с отображением памяти, поэтому в этом отношении IO по-прежнему осуществляется через те же электрические интерфейсы, что и IO с отображением памяти. но не по тем же штыри IO, которые используются для оперативной памяти больше,
списка адресов ввода/вывода можно найти в Ralf Браун x86/MSDOS Список прерываний:
http://www.pobox.com/~ralf
http://www.pobox.com/~ralf/files.html
ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/
inter61d.zip: «PORTS.A», «PORTS.B», «PORTS.C»
все три ссылки кажутся мертвыми – zx485
http://www.cs.cmu.edu/~ralf/files.html –
Во-первых, вы должны понимать, что устройство может быть запрограммировано для ответа на любой адрес, даже если этот адрес не является частью физической памяти. Это делается путем программирования их декодеров памяти. Короче говоря, память устройств ввода/вывода находится на устройстве. Пространство ввода/вывода, предоставляемое устройству, обычно отображает память, которая находится на устройстве, то есть каждое устройство ввода/вывода предоставляет свою собственную память.
Ну, в старые времена были определенные «хорошо известные» адреса, например, 0x3f8, 0x2f8 для COM (последовательных) портов, 0xCF8-0xCFC для конфигурационного пространства PCI. Эти адреса не используют физическую память, для подтверждения этого используется отдельный сигнал ввода-вывода. Эти декодеры памяти устройств были запрограммированы на заводе, чтобы отвечать на эти адреса только при подтверждении вывода ввода-вывода.
Но это устарело. Даже в более поздние дни PCI большинство устройств первоначально были сконфигурированы через пространство ввода-вывода, но затем их декодеры памяти были запрограммированы на ответ на адрес памяти, отображаемый в виртуальном пространстве над физической памятью. Когда запрограммированы декодеры памяти, предоставляется не только базовый адрес, но и размер этого адресного пространства, чтобы избежать столкновений между устройствами. Память находится на устройстве, а не в ОЗУ или чипсете хост-компьютера.
Для PCI-Express, я считаю, что теперь в таблице acpi используется таблица с отображением памяти, а инструкции ввода/вывода по существу устарели. Серийные порты обычно не включаются в современное оборудование. И даже если бы они были, это было бы реализовано на PCI или PCIe устройстве.
Я также должен добавить, что большинство устройств PCI также укажут количество адресного пространства, которое они хотели бы иметь, поэтому, когда программные средства декодеров памяти, они могут учитывать этот запрос. – user1725779
Физическое оборудование будет повсеместно. например инструкции ввода/вывода самого процессора, фактические провода ввода/вывода в различных шинах и микросхемах (северный мост, южный мост) и т. д. ... везде, где физически поддерживается аппаратное обеспечение портов. –
Этот вопрос не имеет смысла. Порты ввода-вывода на x86 вообще не существуют в памяти. У них нет адресов памяти. – duskwuff
duskwuff Я понимаю, что у них нет адресов памяти. Вот почему я спрашиваю, где они находятся? решает ли устройство доступа к устройству доступа к ЦП? являются ли регистры отображаемыми где-то? если отображается, где они отображаются? Я пытаюсь понять детали низкого уровня, когда выполняются инструкции IO/OUT? –