Шины

Описанные в предыдущем разделе порты передачи данных соединяют друг с другом два устройства. Однако часто оказывается целесообразно подключить к одному порту передачи данных несколько устройств, причем необязательно однотипных. Каждая передаваемая по такому порту порция данных обязана сопровождаться указанием, какому из подключенных устройств она предназначена — адресом или селектором устройства. Такие многоточечные порты называются шинами (bus) (рис. 9.14). Как и двухточечные порты передачи данных, шины бывают синхронные и асинхронные, а также последовательные и параллельные. При описании шин термины "синхронный" и "асинхронный" используют в ином значении, чем при описании портов. Асинхронными называют шины, в которых ведомое устройство не выставляет (или не обязано выставлять) сигнал завершения операции, а синхронными, соответственно, шины, где ведомый обязан это делать.

Рис. 9.14. Шина

Подключение N устройств двухточечными портами требует, чтобы центральный процессор имел N приемопередатчиков, использование же многоточечного порта позволяет обойтись одним. В частности, за счет этого Удается уменьшить количество выводов микросхемы процессора или периферийного контроллера. Кроме того, при удачном размещении устройств Можно получить значительный выигрыш в общей длине проводов и, таким образом, например, уменьшить количество проводников на печатной плате. Во многих случаях это приводит к столь значительному снижению общей стоимости системы, что оказывается целесообразным смириться с усложнением протокола передачи данных и другими недостатками, присущими шинной архитектуре.
Основной недостаток шин состоит в том, что в каждый момент времени только одно устройство на шине может передавать данные. Если у двухточечных портов часто оказывается целесообразным реализовать полподуплексный обмен данными при помощи двух комплектов линий (один прием, другой на передачу, как в описанном выше RS232), то в случае шинной топологии это невозможно. Поэтому шины бывают только полудуплексные или симплексные.
Невозможность параллельно осуществлять обмен с двумя устройствами может привести к падению производительности по сравнению с собственным портом обмена данными у каждого устройства. Если устройства не занимают пропускную способность каналов передачи полностью, проигрыш оказывается не так уж велик. Благодаря этому шины широко используются даже в ситуациях, когда только одно устройство имеет возможность инициировать обмены данными.
Если передачу данных могут инициировать несколько устройств (как, например, в случае системной шины с несколькими процессорами и/или контроллерами ПДП), шинная топология оказывается наиболее естественным выбором. Такая конфигурация требует решения еще одной проблемы: обеспечения арбитража доступа к шине со стороны возможных инициаторов обмена — задатчиков шины (рис. 9.15). Методы арбитража отличаются большим разнообразием.

Рис. 9.15. Шина с несколькими задатчиками

Разрешение коллизий в I2С
Синхронная последовательная шина I2С (Inter-Integrated Circuit — [протокол соединения] между интегральными схемами) широко применяется для соединения цифровых микросхем во встраиваемых приложениях [Paret-Fenger 1997]. Шина состоит из двух линий, строба и данных (рис. 9.16). Предполагается, что все подключенные к шине устройства имеют общие шины питания и нуля. Хотя бы одно из устройств шины должно быть ведущим (master).

Рис. 9.16. Временная диаграмма шины I2С

Ведущее устройство генерирует стробовый сигнал и инициирует все передачи данных по шине. Частота строба может составлять 100 или 400 кГц или 1 МГц. Все передачи начинаются с того, что ведущий передает адрес целевого устройства. В зависимости от конфигурации адрес может состоять из семи или десяти бит. Восьмой или, соответственно, одиннадцатый бит адреса содержит указание на тип запроса: чтение или запись. Услышав свой адрес, ведомое устройство генерирует на линии стробового сигнала импульс подтверждения.
Импульса подтверждения может не последовать не только при отсутствии устройства с таким адресом, но и, например, если соответствующее устройство не готово принять или передать данные.
Если подтверждение все-таки последовало, начинается передача данных. Данные состоят из восьми бит. Если запрос был на чтение, данные передает ведомое устройство, если на запись — ведущее.
Спецификации I2С допускают конфигурацию с несколькими ведущими. Чтобы избежать конфликтов, ведущее устройство генерирует стробовый сигнал только во время инициируемых им передач данных, в остальное же время тихо слушает линию и может, при запросе другого ведущего, стать ведомым.
Из-за того, что сигнал распространяется по шине с конечной скоростью, да и внутренняя логика ведущих устройств срабатывает не мгновенно, возможна ситуация, когда два ведущих с небольшим интервалом попытаются захватить шину. Эта ситуация называется коллизией (collision — дословно, столкновение). Протоколы арбитража большинства других шин считают коллизией любую попытку двух устройств одновременно вести передачу. I2С предлагает более слабое определение коллизии — в соответствии со спецификациями этой шины, коллизия происходит, только когда ведущие пытаются выставить на шине данных разные значения. Таким образом, если два (или даже больше!) ведущих отправят один и тот же запрос одному и тому же ведомому, это не будет считаться коллизией!
Механизм арбитража, используемый I2С, отличается крайней простотой.Ведущий, пытающийся выставить на линии данных 1 в то время, как другой ведущий пытается выставить там же 0, считается проигравшим арбитраж. Он должен остановить передачу и дождаться, пока победитель завершит обмен и освободит шину.
Важно подчеркнуть, что протокол арбитража не может просто объявить обоим устройствам, что дескать, случилась коллизия — если оба устройства прeкратят передачу и, не предприняв более ничего, сделают вторую попытку, мы получим живую блокировку! Странное, на первый взгляд, определение коллизии принятое в I2С, дает победителю арбитража возможность продолжить передачу после обнаружения коллизии, исключая, таким образом, для него возможность повторной коллизии после повторной попытки передачи, и, соответственно, исключая опасность живой блокировки.
Видно, что спецификации I2С допускают ситуацию, когда два устройства пытаются установить на шине разные напряжения. Чтобы избежать при этом больших токов, стандарт устанавливает несколько необычный способ подключения устройств к шине (рис, 9.17). Устройство, пытающееся выставить 1, должно просто отключить свои выходные каскады — тогда через резистор Rp (для питания 5 В его сопротивление должно быть не менее 1,7 кОм) конденсатор Сb будет заряжен до напряжения питания. Только при попытке выставить ноль устройство должно пропускать через себя ток.

Рис. 9.17. Схема приемопередатчиков I2С

Необходимость обнаружения коллизий и арбитража накладывает ограничения на физический размер шины: сигналы распространяются по шине с конечной скоростью, а любые два конфликтующих устройства должны узнать коллизии за время, меньшее чем минимальный цикл передачи данных (цикл шины). Описанная выше шина 12С предназначена для низкоскоростной связи в пределах одной печатной платы, поэтому для нее эта проблема не актуальна, однако для локальных сетей, протяженность которых составляет сотни метров или даже километры, и для системных шин компьютеров с большим количеством процессоров и банков памяти это превращается в серьезную проблему. Кроме того, большое количество коллизий само по себе снижает производительность системы.
Один из основных путей решения этой проблемы упоминался в разд. Многопроцессорные архитектуры: замена шины центральным коммутатором, либо более или менее сложной сетью коммутаторов. Устройства соединяются с ближайшим коммутатором полнодуплексными двухточечными каналами, такие же каналы используются для соединения коммутаторов друг с другом, а все коллизии возникают и разрешаются только внутри коммутаторов.
Внутренняя шина коммутатора, как правило, имеет большую пропускную способность, чем внешние соединения — у многих практически используемых коммутаторов несколько внутренних шин, поэтому разрешение коллизии внутри коммутатора часто состоит в отправке данных другим путем (рис. 9.18).

Рис. 9.18. Коммутатор с несколькими внутренними шинами

Таким образом, коммутируемая магистраль позволяет уменьшить производительности, порождаемые коллизиями, и повысить реальную пропускную способность магистрали. Однако коммутируемая магистраль значительно повышает общую стоимость системы и далеко не всегда оправдана этой точки зрения.
Применяются также гибридные топологии, когда все или некоторые устройства подключаются к коммутатору полудуплексным портом или коротки участком шины — при этом возможны локальные коллизии, но их гораздо меньше, чем при единой шине. Гибридная топология позволяет использовать устройства с одними и теми же приемопередатчиками как в обычной шинной, так и в коммутируемой топологии (рис. 9.19). В частности, именно такую гибридную топологию имеют описанные в разд. Многопроцессорные архитектуры многопроцессорные системы IBM NUMA-Q и SGI Origin — процессоры и память подключаются к локальной шине процессорного модуля, а сами модули соединяются коммутируемой сетью.
Гибридная топология также позволяет снизить стоимость системы по сравнению с полностью коммутируемой сетью — коммутаторы можно устанавливать только в тех участках шины, где расстояния или большое количество коллизий становятся проблемой. В таких сетях часто используются двухпортовые коммутаторы, называемые мостами (bridge). Так же называются и адаптеры, используемые для соединения двух шин с разными протоколами.

Рис. 9.19. Гибридная топология

Во всех перечисленных случаях сохраняется логическая шинная топология: каждый потенциальный задатчик шины может обращаться по адресу к любому другому устройству, поэтому разработчикам программного обеспечения не всегда интересны детали реализации физического подключения устройств.
Шины (как физические, так и логические) находят широчайшее применение в вычислительной технике. В частности, один из важнейших сетевых протоколов канального уровня, Ethernet, начинал свою карьеру как последовательная шина с совмещением синхросигнала и данных, да и современные реализации этого протокола, хотя физически и представляют собой коммутируемую или, все реже и реже гибридную сеть, с логической точки зрения по-прежнему являются шиной.
Связь центральных процессоров с банками ОЗУ и внешними устройствами в подавляющем большинстве современных компьютеров осуществляется параллельными стробируемыми шинами.
В вычислительных системах общего назначения чаще всего используется топология с двумя или более шинами. Процессоры и память связаны системной шиной. К этой шине также присоединены один или несколько адаптеров периферийных шин, к которым и подключаются внешние устройства (рис. 9.20). Основное преимущество такого решения состоит в том, что одни и те же периферийные устройства могут использоваться в вычислительных системах с различными системными шинами. Высокоскоростные устройства, например дисковые адаптеры FC-AL у серверов или графические контроллеры у персональных компьютеров, иногда подсоединяются к системной шине непосредственно.

Рис. 9.20. Системная и периферийные шины

Шина PCI
Шина PC/ (Peripherial Component Interconnect), разработанная фирмой Intel в настоящее время используется в вычислительных системах разного уровня, начиная от персональных компьютеров с архитектурами х86 и PowerMac и заканчивая старшими моделями серверов Sun Fire. В конструктиве PCI исполняется множество различных периферийных устройств— сетевые карты, адаптеры SCS/, графические и звуковые карты, платы видеоввода и видеовывода и лр [PC Guide PCI].
PCI не рассчитана на использование в качестве системной шины. Напротив спецификации шины предполагают ее подключение к процессорам и памяти через специальное устройство, мост системной шины (host-to-PCI bridge) (рис. 9.21). Это позволяет использовать PCI в системах, основанных на различных процессорах, таких, как х86, Power, SPARC.

Рис. 9.21. Мост системной шины

PCI предусматривает как монтаж устройств на материнскую плату системы, так и их исполнение в виде плат расширения. Шина допускает подключение не более 4 устройств. По исходным спецификациям, не более трех из них может подключаться через внешние разъемы, однако это не мешает многим поставщикам оборудования изготавливать платы с четырьмя внешними разъемами без мостов. Предусмотренный стандартом способ обхода указанного ограничения состоит в установке в системе нескольких адаптеров PCI, через собственные мосты системной шины или через PCI-to-PCI bridge. Допустимы также мосты, подключающие другие периферийные шины, например ISA, USB и т. д (рис. 9.22).
Каждое устройство на шине обязано иметь набор конфигурационных регистров, адресуемых географически (по номерам шины и разъема). Эти регистры содержат информацию об изготовителе и модели устройства. Кроме того, устройство может иметь до шести базовых адресных регистров, указывающих на связанные с устройством адресуемые объекты — блоки регистров ввода-вывода и отображенные на адреса ОЗУ буферы (рис. 9.23). Адреса этих объектов определяются динамически во время инициализации системы загрузочным монитором. Как правило, эти адреса также распределяются по географическому принципу.

Рис. 9.22. Мосты PCI-to-PCI и PCI-to-ISA

Устройство может работать в пассивном режиме (передавая данные по запросам процессоров) или через ПДП в режиме задатчика шины. Во втором случае мост системной шины преобразует выставляемые устройством адреса PCI в адреса системной шины. Современные спецификации шины (т. н. PCI64) допускают 32-разрядную адресацию для регистров устройств и 32- или 64-битную адресацию для отображенных в память буферов и при работе по ПДП.

Шина SCSI
Среди других практически важных применений шин необходимо упомянуть стандарт SCS/ (Small Computer System Interface — системный интерфейс малых компьютеров), наиболее известный как интерфейс для подключения жестких дисков, но используемый для подключения широкого спектра высокоскоростных устройств (табл. 9.3), в том числе и не являющихся устройствами памяти, например, сканеров [Гук 2000].

Рис. 9.23. Конфигурационные и рабочие регистры устройства PCI

Современные спецификации SCSI по структуре аналогичны спецификациям сетевых протоколов и состоят из трех уровней: команд, протокола и соединений. Уровень команд определяет формат и семантику команд и ответов на них, т. е. приблизительно соответствует тому, что в сетевых протоколах называется прикладным уровнем. Уровень протокола определяет способ передачи команд и ответов и соответствует канальному уровню сетевых протоколов. И, наконец, уровень соединений определяет физическую реализацию линий передачи данных (способ кодирования данных, допустимые токи и напряжения, конструкцию разъемов и т. д.), т. е. соответствует физическому уровню [www.t10.org architecture, Friedhelm/Shmidt 1997]. Сетевой (в данном случае описывающий способ адресации устройств) и транспортный уровни в спецификациях SCSI также присутствуют, хотя и в рудиментарном виде.

Таблица 9.3. Типы устройств SCSI, возвращаемые командой INQUIRY, цит. по [www.t10.org commands]

Код Описание
00h Устройство прямого доступа (например, магнитный диск)
01h Устройство последовательного доступа (например, магнитная лента)
02h Печатающее устройство
03h Процессорное устройство
04h Устройство однократной записи (например, некоторые оптические диски)
05h CD-ROM
06h Сканер
07h Оптическое запоминающее устройство (например, некоторые оптические диски)
08h Устройство с автоматической заменой носителя (например, jukebox)
09h Коммуникационное устройство
0Ah-0Bh Определено ASC IT8
0Ch Контроллер массива запоминающих устройств (например, RAID)
0Dh Устройство enclosure services (мост к шине другого типа)
0Eh-1Eh Зарезервировано
1Fh Неизвестный или неопределенный тип устройства

На физическом уровне SCSI представляет собой параллельную шину с 8-ю или 16-ю (так называемая Wide SCSI) линиями передачи данных. Современные реализации стандарта обеспечивают скорости передачи данных до 160 Мбит/с. Стандартом SCSI III предусмотрены также реализации в виде последовательной шины IEEE 1394 или волоконно-оптических колец FC-AL (Fiber Channel Arbitrated Loop — волоконно-оптический канал [в виде] арбитрируемого кольца). Fiber Channel допускает объединение нескольких колец коммутаторами, подключение до 127 устройств, общую длину сети, измеряемую несколькими сотнями метров и скорости передачи до 1Гбит/с.
Обмен данными по шине происходит не байтами и даже не словами, а кадрами, которые могут содержать команды, информацию о состоянии устройства (sense data) или собственно данные. Формат кадров и способ разрешения коллизий зависит от используемого типа соединений — в этом смысле разделение уровня соединений и уровня протокола не реализовано в полной мере. Каждый кадр содержит адреса отправителя и получателя. Каждое устройство имеет собственный адрес, называемый SCSI target ID. У старых версий протокола этот адрес был 3-битным, допуская адресацию восьми устройств, у современной версии (Ultra-SCSI или SCSI III) адрес 4- или 5-битный. Адаптер, через который шина SCSI подключается к системной или периферийной шине компьютера — НВА (Host Bus Adapter— адаптер системной шины) — также считается устройством и обычно имеет ID, равный, в зависимости от разрядности адреса, 7, 15 или 127.
Устройство, имеющее один target ID, может содержать несколько логически устройств, идентифицируемых номерами логических устройств (LUN — Logjc Unit Number). Спецификации протокола предусматривают два байта для код рования LUN, но реальное число логических устройств, поддерживаемых практике, обычно невелико.
Устройства SCSI делятся на два типа: инициаторы (initiator) и целевые ройства (target). Инициатор посылает команды, а целевое устройство их полняет. Спецификация допускает, что в разных актах обмена данными инициатор может становиться целевым устройством и наоборот, но в пределах одной операции эти роли заданы однозначно. Как правило, НВА может выступать только в роли инициатора, а периферийные устройства — только в роли целевых.
Блоки команд — CDB (Command Descriptor Block — блок описания команды) — невелики по размеру и могут содержать 6, 8, 10, 12 или 16 байт. Различие в длине обусловлено размером используемых в команде адресов: 6-байтовая команда использует 21-битный адрес блока на устройстве и 8-битное поле для длины требуемого блока данных, 8-байтовая — 32-разрядный адрес и 16-битное поле длины, а более длинные команды— 32-разрядные адрес и длину. 16-байтовая форма команды содержит, кроме 32-разрядных адреса и длины, также и 32-битное поле параметра. Кроме того, команда обязательно содержит код операции и поле управления. Под код операции отводится байт. Старшие три бита этого байта кодируют формат SCB. Некоторые команды используют только один формат SCB, другие допускают применение различных форматов (обычно с адресами и полем длины различной разрядности). Кроме перечисленных в табл. 9.4, различные типы устройств имеют собственные команды.
Блоки данных, в отличие от команд, имеют практически неограниченную длину. Многие команды интерпретируют поле длины CDB как указанное в блоках. При размере блока 512 байт это позволяет передать за одну операцию до 2 Тбайт (1 Тбайт=1024 Гбайт) данных. На практике, пакет данных, передаваемых за одну операцию шины, ограничен размерами буферов устройств, поэтому запросы на передачу больших объемов данных обрабатываются в несколькр приемов. Команда может либо принимать, либо передавать данные. В качестве данных могут передаваться либо блоки параметров и ответов, либо собственно данные. Существование команд, способных и передавать, и принимать данные, явно запрещено спецификациями, поэтому в CDB предусмотрена только одна группа полей описания буфера. Впрочем, операция может исполняться в виде последовательности команд и поэтому может предусматривать двусторонний обмен данными.
Большинство команд требует от устройства более или менее длительных подготовительных операций (перемещения головки, перемотки ленты), поэтому передача данных не может следовать немедленно за командой. По этой причине большинство современных устройств поддерживает очереди команд. Чтобы связать команду с пришедшим на нее ответом, команды могут снабжаться тегом задачи. Устройство способно параллельно исполнять несколько задач, а в рамках одной задачи может быть исполнена последовательность команд.

Таблица 9.4. Список команд SCSI, поддерживаемых всеми устройствами, цит. по www.t10.org commands]

Имя команды Код Тип Описание
CHANGE DEFIKTTION 40h O Изменить версию протокола, используемого устройством
COMPARE 39h O Сравнить данные
COPY 18h O Копировать данные внутри устройства или
между устройствами
COPY AND VERIFY 3Ah O Копировать данные с проверкой
INQUIRY 12h M Проверить наличие устройства, его тип и поддерживаемые им операции
LOG SELECT 4Ch   Включить сбор статистики
LOG SENSE 4Dh O Считать собранную статистику
MODE SELECT(6) 15h Z Выбор режима работы устройства
MODE SELECT(10) 55h Z  
MODE SENSE(6) 1Ah Z Считывание режима работы
MODE SENSE(10) 5Ah Z  
MOVE MEDIUM ATTACHED A7h Z Для устройств с автоматической сменой носителя
PERSISTENT RESERVE IN 5Eh Z Управление режимом блокировки устройства
PERSISTENT RESERVE
OUT
5Fh Z  
PREVENT ALLOW MEDIUM REMOVAL 1Eh 0 Заблокировать сменный носитель в устройстве
READ BUFFER 3Ch 0 Чтение данных
READ ELEMENTSTATUS ATTACHED B4h Z Для устройств с автоматической сменой носителя
RECEIVE DIAGNOSTIC RESULTS 1Ch O Получить результаты самотестирования устройства
RELEASE (6) 17h Z Разблокировка (освобождение) устройства
RELEASE (10) 57h z  
REPORT LUNS A0h O Считывание списка логических устройств
REQUEST SENSE 03h М Считывание статуса устройства
RESERVE(6) 16h Z Блокировка (захват) устройства
RESERVE(10) 56h Z  
SEND DIAGNOSTIC 1Dh M Запрос самотестирования устройства
TEST UNIT READY 00h M Проверка готовности устройства
WRITE BUFFER 3Bh O Запись данных

Здесь:

  • M — реализация команды обязательна;
  • O— реализация команды возможна (может быть реализована, а может и не быть);
  • Z— реализация и семантика команды зависит от типа устройства.