Что происходит, когда мы подключаем аппаратную часть к компьютерной системе? - PullRequest
1 голос
/ 26 декабря 2010

Когда мы подключаем аппаратную часть к компьютерной системе, скажем, NIC (сетевая карта) или звуковую карту, что происходит под крышкой, чтобы мы могли использовать эту аппаратную часть?

Я могу вспомнить следующие 2 сценария, поправьте меня, если я ошибаюсь.

  • Если аппаратное обеспечение имеет свои собственные микросхемы памяти, кто-то организует диапазон адресного пространства для сопоставления с этими микросхемами памяти.

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

Я не уверен, что вышеупомянутый кто-то является операционной системой или процессором.

И еще один вопрос: аппаратному обеспечению всегда нужна память для работы?

Прав ли я в этом?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Мир не так легко определить.

Прежде всего посмотрите на оборудование и что оно делает. Возьмем, к примеру, мышь, она пытается доставить изменения координат x и y и состояние кнопки, которые могут составлять всего несколько байт или даже один байт; два бита определяют, что означают остальные 6: обновить x, обновить y, обновить кнопки, такие вещи. И требования к памяти достаточны для хранения этих байтов. Возьмите мышь с последовательным интерфейсом, в последовательном порту уже есть хотя бы один байт памяти, так что вам нужно больше? usb, другая история, просто чтобы говорить usb взад и вперед, требует памяти для сообщений, но эта память может быть в логике usb, так что вам больше не нужна такая маленькая информация.

Сетевые карты и звуковые карты - еще одна категория, более интересная. Для сетей у вас есть пакеты данных, приходящие и уходящие, и вам нужно некоторое буферное пространство, кольцо, fifo и т. Д., Чтобы позволить нескольким пакетам лететь в обоих направлениях для эффективности и задержки прерывания и тому подобное. Вам также нужны регистры, они хранятся в самом оборудовании / логике и не нуждаются в основной памяти. Как в случае со звуковой картой, так и в случае с никелем вы можете либо иметь на плате память с аппаратным обеспечением, либо использовать системную память, к которой у нее может быть полу-прямой доступ (dma и т. Д.). Звуковые карты похожи, но отличаются тем, что пакеты можно считать фиксированными и непрерывными. Как правило, вам необходимо с некоторой скоростью буферизовать буферы на карту или с карты, 44100 кГц 16 бит на семпл стерео - это 44100 * 2 * 2 = 176400 байт в секунду, например, драйвер / программное обеспечение готовит следующие 8192 байта с В то время, когда аппаратное обеспечение воспроизводит буфер понга, программное обеспечение заполняет буфер пинга, когда аппаратное обеспечение истощает буфер понга, оно указывает это программному обеспечению, начинает опустошать буфер пинга, и программное обеспечение заполняет буфер пинга.

Все интересные вещи, кроме как добраться до сути. С ник или звуковой картой вы можете иметь всего два регистра, регистр адреса / команды и регистр данных. Довольно болезненно, но часто использовалось в старые времена в ограниченных системах, но все еще использовалось. Или вы можете перейти к другой крайности и захотеть, чтобы вся память на устройстве была отображена в адресное пространство системной памяти, а также чтобы каждый регистр имел свой уникальный адрес. С аудио вам не нужен произвольный доступ к памяти, так что вам это не нужно, графика, которую вы делаете, никудышные карты, которые вы могли бы поспорить, оставляете ли вы пакет на пустом месте или делаете копию в системной памяти, где вы можете иметь много больший программный буфер / кольцо освобождает аппаратные средства ограниченный буфер / кольцо. Если по ник, то вы бы хотели произвольный доступ, если нет, то вы не.

Для систем isa / pci / pcie и т. Д. В системах x86 аппаратное обеспечение обычно отображается непосредственно в пространство памяти процессоров.Таким образом, для 32-разрядных систем вы можете адресовать до 4 ГБ, хорошо, даже если у вас есть 4 ГБ памяти, часть этой памяти вы не можете получить, потому что видеокарты, аппаратные регистры, PCI и т. Д. Занимают часть этого адресного пространства (регистры или память илиоба, независимо от того, какое оборудование было предназначено для использования).Как бы неприятно это ни казалось на сегодняшний день, именно поэтому возникла разница между вводом-выводом с отображением ввода / вывода и вводом / выводом с отображением в памяти в системах x86, если хотите, это еще один бит адреса.Вы можете хранить все свои регистры в пространстве ввода-вывода, не теряя места в памяти, и отображать память в красивые аккуратно выровненные фрагменты, требуя замены меньшего количества оперативной памяти на аппаратное обеспечение.В любом случае, у Isa были в основном специфичные для поставщика способы отображения в пространство памяти, доступное для шины isa, перемычек, интересных схем обнаружения с программируемыми адресными декодерами и т. д. PCI и его преемники придумали нечто более стандартное.Когда компьютер загружается (в общем, говорит о машинах x86), BIOS выходит на шину pcie и смотрит, кто там, общаясь с конфигурационным пространством, отображаемым на карту в известном месте.Используя известный протокол, карты указывают желаемый объем памяти, который им требуется, BIOS затем выделяет из плоской области памяти куски памяти процессора для каждого устройства и сообщает устройству, какой адрес и сколько он был выделен.Конечно, операционная система может переопределить или переопределить это, но обычно BIOS делает это обнаружение для системы, и операционная система просто считывает конфигурационное пространство на каждом устройстве, которое включает в себя идентификатор поставщика и идентификатор устройства, а затем знает, как игде поговорить с устройством.Я считаю, что для этого пространства памяти аппаратное обеспечение содержит память / регистры.Что касается общей системной памяти для dma to / from, я полагаю, что операционная система и драйверы устройств должны предоставить механизм для выделения этой системной памяти, а затем сообщить аппаратному устройству, какой адрес dma to / from.

Способ x86у биоса, обрабатывающего ужасные детали, и имеющего адресное пространство системной памяти и адресное пространство pci, являющееся тем же адресным пространством, есть свои плюсы и минусы.Плюсом является то, что аппаратное обеспечение может легко перемещаться в / из системной памяти, поскольку ему не нужно знать, как добраться из адресного пространства pcie в системное адресное пространство.Отрицательным является случай 32-битной системы, где pcie обычно потребляет до 1 ГБ адресного пространства, а купленный вами драм для этой дыры недоступен.Переход с 32-разрядного на 64-разрядный процесс является медленным и болезненным, биозы и микросхемы pcie по-прежнему ограничиваются нижним 4 ГБ и ограничиваются 1 ГБ для всех устройств pcie, даже если чипсет имеет 64-разрядный режим, и это с 64-разрядным режимом.битовые процессоры и более 4 ГБ оперативной памяти.MMU допускает фрагментированную память, так что это не проблема.Медленно чипсеты и биозы догоняют, но это требует времени.

USB.это последовательные протоколы в основном ведущий / ведомый.Как и последовательный порт, но больше, быстрее и сложнее, и, как и последовательный порт, как у основного, так и у ведомого оборудования должен быть ОЗУ для хранения сообщений, очень похоже на ник.Как теоретически, вы можете основываться на регистрах и извлекать память последовательно или отображать ее в системной памяти, иметь произвольный доступ к ней и т. Д. Подумайте об этом так, интерфейс USB может работать на компьютере.интерфейс, даже если он находится на материнской плате.Ряд устройств являются устройствами pcie на материнской плате, даже если они не являются настоящим разъемом pcie с картой.И они попадают в раздел о том, как вы можете создать свой интерфейс или у кого какая память где.

Некоторые устройства, такие как видеокарты, имеют много встроенной памяти, более чем практично, или, по крайней мере, болезненно, когда все это может быть отображено в пространство памяти pcie одновременно. И они хотели бы использовать расположение типа скользящего окна. Скажите видеокарте, что вы хотите посмотреть адрес 0x0000 в адресном пространстве видеокарты, но ваше окно может быть только 0x1000 байт (например) в пространстве system / pcie. Если вы хотите просмотреть адреса от 0x1000 до 0x1FFF в области видеопамяти, вы записываете регистр для перемещения окна, тогда это же пространство памяти pcie обращается к другой памяти на видеокарте.

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

Дизайн оборудования так же разнообразен, как и дизайн программного обеспечения. возьмите 100 инженеров-программистов и дайте им спецификацию, и вы можете получить до 100 различных решений. То же самое с оборудованием, дайте им спецификацию, и вы можете получить 100 различных конструкций pcie. Существуют некоторые стандарты для ограничения этого и / или клонирования, когда вы хотите сделать карту, совместимую со звуковым бластером, вы не меняете интерфейс, но, учитывая, что программное обеспечение свободы имеет аппаратное обеспечение, оно может изменяться в зависимости от количества типов ПК. устройства (звук, контроллеры жестких дисков, видео, USB, сети и т. д.) вы получите столько разных сочетаний регистров и адресуемой памяти.

извините за длинный ответ, надеюсь, это поможет. Я бы покопался в источниках linux и / или bsd для драйверов устройств, а также в справочных руководствах для программистов, если бы вы могли получить к ним доступ, и посмотреть, как различные конструкции оборудования используют регистр и пространство памяти, и посмотреть, какие конструкции болезненны для программистов и какие конструкции элегантны и хорошо сделаны.

1 голос
/ 26 декабря 2010

Ответ зависит от того, какой интерфейс у оборудования - через USB или PCI-Express? (и могут быть и другие способы подключения - наиболее распространенными являются USB и PCI-Express)

  • с USB
    Хост узнает о вновь прибывшем устройстве, читая дескрипторы и загружая соответствующий драйвер устройства. Устройство представило бы свой идентификатор, который используется для Plug n Play. Устройство также назначает адрес хостом. После запуска драйвера устройства оно настраивает устройство и готовит его к передаче данных. Передача данных осуществляется с использованием IRP, методика передачи и способ загрузки IRP зависят от того, является ли передача изохронной, объемной или другой.

Итак, чтобы ответить на ваш второй вопрос - да, аппаратному обеспечению требуется немного памяти для работы. Драйвер и драйвер хост-контроллера USB совместно устанавливают память на хосте для устройства USB - драйвер устройства USB затем соответственно связывает / управляет устройством.

  • С PCI-Express

Похоже - извините, у меня нет опыта работы с PCI-Express.

...