Введение

Система, которая передает данные между компонентами внутри компьютера – шины в компьютерном оборудовании.

В компьютерной архитектуре шина (исторически также называемая магистралью данных) в большинстве традиционных компьютерных архитектур, процессор и основная память, как правило, тесно связаны, при этом внутренняя шина, соединяющая их, известна как системная шина. В системах, включающих кэш, процессоры используют высокопроизводительные системные шины, работающие со скоростью, превышающей скорость памяти, для связи с памятью. Внутренняя шина (также известная как внутренняя шина данных, шина памяти или системная шина) соединяет внутренние компоненты компьютера с материнской платой. Локальные шины соединяют процессор и память с шиной расширения, которая, в свою очередь, соединяет компьютер с периферийными устройствами. Шины, такие как порты SATA в современных компьютерах, поддерживают несколько периферийных устройств, позволяя подключать несколько жестких дисков без карты расширения. В системах, имеющих архитектуру, аналогичную мультикомпьютерам, но использующих шины вместо сетей для обмена данными, системная шина известна как front-side bus (шина передней стороны). В таких системах шина расширения может не иметь общей архитектуры с центральными процессорами, а вместо этого поддерживать множество различных процессоров, как в случае с PCI. Хотя термин "периферийная шина" иногда используется для обозначения всех шин, кроме системной, термин "шина расширения" также используется для описания третьей категории шин, отличной от периферийной, которая включает в себя шинные системы, такие как PCI. Ранние компьютерные шины представляли собой параллельные электрические провода с множеством аппаратных соединений, но сейчас этот термин используется для любой физической структуры, обеспечивающей ту же логическую функцию, что и параллельная электрическая шина. Современные компьютерные шины могут использовать как параллельные, так и последовательные соединения, и могут быть организованы в многоточечную (электрически параллельную) или последовательную (цепочку) топологию, либо соединены через коммутируемые концентраторы. Многие современные процессоры также имеют второй набор контактов, аналогичных тем, что используются для связи с памятью, но способных работать с разными скоростями и протоколами, чтобы периферийные устройства не замедляли общую производительность системы. Процессоры также могут иметь интеллектуальные контроллеры для непосредственной записи данных в память, что известно как прямой доступ к памяти (DMA). Были разработаны и низкопроизводительные шины, такие как универсальная последовательная шина (USB). Учитывая технологические изменения, классические термины "системная", "шина расширения" и "периферийная" больше не имеют прежнего значения. Другие распространенные системы категоризации основаны на основной роли шины – соединении устройств внутри или снаружи системы. Однако многие современные шины могут использоваться как для внутренних, так и для внешних подключений. SATA и eSATA – пример системы, которая ранее описывалась как внутренняя, в то время как некоторые автомобильные приложения используют преимущественно внешнюю IEEE 1394 в манере, более похожей на системную шину. Другие примеры, такие как InfiniBand и I²C, изначально разрабатывались для использования как внутри, так и снаружи системы.

Адресная шина

Адресная шина — это шина, используемая для указания физического адреса. Когда процессору или устройству с поддержкой DMA требуется чтение или запись в ячейку памяти, он указывает эту ячейку памяти в адресной шине (значение для чтения или записи передается по шине данных). Ширина адресной шины определяет объем памяти, к которой может получить доступ система. Например, система с 32-битной адресной шиной может адресовать 2³² (4 294 967 296) ячеек памяти. Если каждая ячейка памяти содержит один байт, то адресуемое пространство памяти составляет 4 ГБ.

Мультиплексирование адресов

Ранние процессоры использовали отдельный провод для каждого бита ширины адресной шины. Например, 16-битная адресная шина состояла из 16 физических проводов. По мере увеличения ширины и длины шин, такой подход становился дорогостоящим с точки зрения количества выводов микросхем и дорожек на плате. Начиная с DRAM Mostek 4096, широкое распространение получило мультиплексирование адресов, реализованное с помощью мультиплексоров. В схеме мультиплексирования адреса передается двумя равными частями поочередно в разные циклы шины. Это сокращает вдвое количество сигналов адресной шины, необходимых для подключения к памяти. Например, 32-битную адресную шину можно реализовать, используя 16 линий и отправляя сначала первую половину адреса памяти, а затем сразу же вторую половину. Обычно для указания DRAM, передается ли в данный момент первая или вторая половина адреса памяти, используются два дополнительных сигнала в управляющей шине – импульс выбора строки (RAS) и импульс выбора столбца (CAS).

Реализация

Доступ к отдельному байту часто требует чтения или записи всей ширины шины (слова) за один раз. В таких случаях младшие биты адресной шины могут даже не реализовываться – вместо этого управляющее устройство должно само выделить нужный байт из переданного слова целиком. Это, например, характерно для локальной шины VESA, которой не хватает двух младших битов, что ограничивает её выровненными 32-битными передачами. В прошлом существовали также компьютеры, способные адресовать только слова – так называемые "словесные машины".

Автобус памяти

Автобус памяти — это шина, соединяющая основную память с контроллером памяти в компьютерных системах. Изначально использовались универсальные шины, такие как VMEbus и шина S 100, но для снижения задержки современные шины памяти разрабатываются для прямого подключения к микросхемам DRAM и, следовательно, создаются организациями по стандартизации микросхем, такими как JEDEC. Примерами служат различные поколения SDRAM и последовательные шины типа "точка-точка", такие как SLDRAM и RDRAM. Исключением является модуль DIMM с полной буферизацией, который, несмотря на тщательную разработку для минимизации влияния, подвергался критике за повышенную латентность.

Подробности реализации

Автобусы могут быть параллельными, передающими слова данных параллельно по нескольким проводам, или последовательными, передающими данные в виде последовательности битов. Добавление дополнительных цепей питания и управления, дифференциальных драйверов и соединений данных в обоих направлениях обычно означает, что большинство последовательных шин имеют больше проводников, чем минимум в один, используемый в 1 Wire и UNI/O. С увеличением скорости передачи данных все сложнее обходить проблемы временных искажений, энергопотребления, электромагнитных помех и перекрестных наводок в параллельных шинах. Одним из частичных решений этой проблемы является удвоение скорости передачи данных по шине. Часто последовательная шина может работать на более высоких общих скоростях передачи данных, чем параллельная, несмотря на меньшее количество электрических соединений, поскольку последовательная шина по своей природе не подвержена временным искажениям или перекрестным наводкам. USB, FireWire и Serial ATA являются примерами этого. Подключения типа "многокапельного соединения" плохо работают для быстрых последовательных шин, поэтому большинство современных последовательных шин используют схемы "цепочки" или "узла". Сетевые соединения, такие как Ethernet, обычно не рассматриваются как шины, хотя разница в основном концептуальная, а не практическая. Характерной чертой шины является то, что она обеспечивает питание подключенного оборудования. Это подчеркивает происхождение архитектуры шины от шин распределения или коммутации питания. Это исключает из категории шин схемы, такие как последовательный RS 232, параллельный Centronics, интерфейсы IEEE 1284 и Ethernet, поскольку этим устройствам также требуется отдельное питание. Устройства Universal Serial Bus могут использовать питание, предоставляемое шиной, но часто используют отдельный источник питания. Этот момент иллюстрируется на примере телефонной системы с подключенным модемом, где соединение RJ11 и соответствующая модулированная схема сигнализации не считаются шиной и аналогичны подключению Ethernet. Схема соединения телефонной линии не рассматривается как шина в отношении сигналов, но центральная станция использует шины с перекрестными коммутаторами для соединений между телефонами. Однако это различие – что шина обеспечивает питание – не применимо ко многим авиационным системам, где соединения данных, такие как ARINC 429, ARINC 629, MIL STD 1553B (STANAG 3838) и EFABus (STANAG 3910), обычно называют "шинами данных" или иногда "датабасами". Такие авиационные шины данных обычно характеризуются наличием нескольких устройств или сменных элементов/блоков (LRI/LRU), подключенных к общей, совместно используемой среде. Они могут быть, как в случае с ARINC 429, односторонними, то есть иметь один источник LRI/LRU, или, как в случае с ARINC 629, MIL STD 1553B и STANAG 3910, двусторонними, позволяя всем подключенным LRI/LRU выступать в разное время (в полудуплексном режиме) в качестве передатчиков и приемников данных.

Мультиплексирование шины

Самая простая системная шина имеет полностью отдельные линии ввода данных, линии вывода данных и адресные линии. Для снижения стоимости большинство микрокомпьютеров используют двунаправленную шину данных, применяя одни и те же проводники для ввода и вывода в разное время. Некоторые процессоры используют выделенный проводник для каждого бита адресной шины, шины данных и шины управления. Например, 64-контактный STEbus состоит из 8 физических проводников, выделенных для 8-битной шины данных, 20 физических проводников, выделенных для 20-битной адресной шины, 21 физического проводника, выделенного для шины управления, и 15 физических проводников, выделенных для различных шин питания. Мультиплексирование шины требует меньше проводников, что снижает стоимость многих ранних микропроцессоров и микросхем DRAM. Одна из распространенных схем мультиплексирования, мультиплексирование адресов, уже упоминалась. Другая схема мультиплексирования повторно использует линии адресной шины в качестве линий шины данных; они были названы в честь электрических шин питания, или шинных батарей. Почти всегда существовала одна шина для памяти и одна или несколько отдельных шин для периферийных устройств. Доступ к ним осуществлялся по отдельным инструкциям, с совершенно разными временными характеристиками и протоколами. Одним из первых усложнений стало использование прерываний. Ранние компьютерные программы выполняли ввод-вывод, ожидая в цикле готовности периферийного устройства. Это было пустой тратой времени для программ, которым требовалось выполнять другие задачи. Кроме того, если программа пыталась выполнить эти другие задачи, проверка готовности периферии могла занять слишком много времени, что приводило к потере данных. Поэтому инженеры организовали прерывания периферийных устройств для центрального процессора. Прерывания требовалось приоритизировать, поскольку центральный процессор может выполнять код только для одного периферийного устройства за раз, а некоторые устройства более критичны ко времени, чем другие. Высокопроизводительные системы представили концепцию контроллеров каналов, которые по сути являлись небольшими компьютерами, предназначенными для обработки ввода-вывода данной шины. IBM представила их в IBM 709 в 1958 году, и они стали распространенной особенностью их платформ. Другие производители высокопроизводительного оборудования, такие как Control Data Corporation, реализовали аналогичные решения. Как правило, контроллеры каналов старались выполнять все операции шины внутри себя, перемещая данные, когда центральный процессор, как известно, занят другими задачами, если это возможно, и используя прерывания только при необходимости. Это значительно снижало нагрузку на центральный процессор и обеспечивало общую производительность системы. Для обеспечения модульности шины памяти и ввода-вывода могут быть объединены в единую системную шину. В этом случае одна механическая и электрическая система может быть использована для соединения многих компонентов системы или, в некоторых случаях, всех из них. Позже компьютерные программы стали совместно использовать память, общую для нескольких центральных процессоров. Доступ к этой шине памяти также требовал приоритизации. Простой способ приоритизировать прерывания или доступ к шине – это последовательное соединение (цепочка из ромашек). В этом случае сигналы будут естественным образом распространяться по шине в физическом или логическом порядке, устраняя необходимость в сложной системе планирования.

Мини- и микро-

Digital Equipment Corporation (DEC) further reduced the cost of mass-produced minicomputers and mapped peripherals into the memory bus, so that input and output devices appeared as memory locations. This was implemented in the Unibus of the PDP 11 around 1969. Early microcomputer bus systems were essentially a passive backplane connected directly or through buffer amplifiers to the CPU pins. Memory and other devices were added to the bus using the same address and data pins as the CPU itself, connected in parallel. Communication was controlled by the CPU, which read and wrote data from the devices as if they were blocks of memory, using the same instructions, all timed by a central clock controlling the CPU speed. Nevertheless, devices interrupted the CPU by signaling on separate CPU pins. For instance, a disk drive controller would signal the CPU that new data was ready to be read, at which point the CPU would move the data by reading the "memory location" corresponding to the disk drive. Almost all early microcomputers were built in this fashion, starting with the S 100 bus in the Altair 8800 computer system. In some instances, most notably in the IBM PC, although a similar physical architecture could be employed, instructions for accessing peripherals (in and out) and memory (mov and others) were not uniform at all, and still generated distinct CPU signals that could be used to implement a separate I/O bus. These simple bus systems had a serious drawback when used for general-purpose computers. All the equipment on the bus had to operate at the same speed, as it shared a single clock. Increasing the CPU speed became more difficult, because the speed of all the devices had to increase as well. When it was impractical or uneconomical to have all devices as fast as the CPU, the CPU had to either enter a wait state or temporarily operate at a slower clock frequency to communicate with other devices in the computer. While acceptable in embedded systems, this problem was not tolerated for long in general-purpose, user-expandable computers. Such bus systems were also difficult to configure when constructed from common off-the-shelf equipment. Typically, each added expansion card required many jumpers to set memory addresses, I/O addresses, interrupt priorities, and interrupt numbers.

Второе поколение

Автобусные системы второго поколения, такие как NuBus, решали некоторые из этих проблем. Они обычно разделяли компьютер на два "мира": процессор и память – с одной стороны, и различные устройства – с другой. Контроллер шины принимал данные со стороны процессора для передачи на сторону периферийных устройств, тем самым перекладывая бремя протокола связи с самого процессора. Это позволило процессору и памяти развиваться независимо от шины устройств, или просто "шины". Устройства на шине могли взаимодействовать друг с другом без участия процессора. Это привело к значительно лучшей производительности в реальных условиях, но также потребовало большей сложности от плат расширения. Эти шины также часто решали проблемы скорости, увеличивая ширину канала передачи данных – от 8-битных параллельных шин первого поколения до 16 или 32 бит во втором, а также добавляя программную настройку (теперь стандартизированную как Plug n Play) для замены или дополнения перемычек. Однако эти новые системы имели одно общее свойство со своими предшественниками: все устройства на шине должны были обмениваться данными с одинаковой скоростью. Хотя процессор был изолирован и мог увеличивать свою скорость, процессоры и память продолжали ускоряться гораздо быстрее, чем шины, к которым они подключались. В результате скорость шин стала значительно ниже, чем требовалось современным системам, и устройства испытывали недостаток в данных. Ярким примером этой проблемы было то, что видеокарты быстро превосходили даже новые шинные системы, такие как PCI, и компьютеры начали оснащаться AGP исключительно для работы с видеокартой. К 2004 году AGP также устарела для высокопроизводительных видеокарт и других периферийных устройств и была заменена новой шиной PCI Express. Все больше внешних устройств стали использовать собственные шинные системы. Когда жесткие диски только появились, они подключались к компьютеру через плату, вставляемую в шину, поэтому компьютеры и имеют так много слотов на шине. Но в 1980-х и 1990-х годах для решения этой задачи были разработаны новые системы, такие как SCSI и IDE, что привело к тому, что большинство слотов в современных системах остались пустыми. Сегодня в типичном компьютере обычно используется около пяти различных шин для поддержки различных устройств.

Третье поколение

Автобусы "третьего поколения" начали появляться на рынке примерно с 2001 года, включая HyperTransport и InfiniBand. Они отличаются высокой гибкостью физических соединений, что позволяет использовать их как внутрисистемные шины, так и для соединения различных компьютеров. Это может приводить к сложным задачам при обработке различных запросов, поэтому значительная часть работы над этими системами сосредоточена на разработке программного обеспечения, а не аппаратной части. В целом, эти шины третьего поколения больше напоминают сеть, чем традиционную шину, требуют более сложного протокола по сравнению с ранними системами, но при этом позволяют нескольким устройствам одновременно использовать шину. Шины, такие как Wishbone, были разработаны сообществом разработчиков аппаратного обеспечения с открытым исходным кодом для дальнейшего снижения юридических и патентных ограничений в проектировании компьютеров. Compute Express Link (CXL) – это открытый стандарт межсоединения для высокоскоростной связи процессора с устройствами и процессора с памятью, предназначенный для повышения производительности центров обработки данных нового поколения.