# Лекция 19. Шины.

- [Лекция 19. Шины.](#Лекция-19-Шины)
  - [Системы соединений](#Системы-соединений)
    - [Интерфейс](#Интерфейс)
    - [Шина](#Шина)
  - [Терминология](#Терминология)
    - [Обмен информации](#Обмен-информации)
  - [Типы шин](#Типы-шин)
  - [Иерархия шин](#Иерархия-шин)
  - [Арбитраж шин](#Арбитраж-шин)
    - [Алгоритмы арбитража](#Алгоритмы-арбитража)
    - [Схемы арбитража](#Схемы-арбитража)
    - [Протоколы шин](#Протоколы-шин)
  - [Повышение эффективности шин](#Повышение-эффективности-шин)
    - [Увеличение полосы пропускания](#Увеличение-полосы-пропускания)
    - [Стандартизация шин](#Стандартизация-шин)
    - [Последовательный синхронный обмен](#Последовательный-синхронный-обмен)
    - [Последовательный асинхронный обмен](#Последовательный-асинхронный-обмен)
    - [Основные материалы лекции](#Основные-материалы-лекции)

## Системы соединений

**Система** — это объединение нескольких элементов для решения общей задачи.
Система соединений должна обеспечивать обмен информации между:

- процессором и памятью;
- процессором и модулями ввода\вывода;
- памятью и модулями ввода\вывода.

Как же воедино соединить элементы системы?

Нужно использовать несколько шин, каждая из которых соединяется с разными элементами системы. Например, это необходимо потому что ЦП обменивается информацией с памятью в гигабитах в секунду, а с клавиатурой в байтах в секунду, поэтому неразумно помещать их на одну шину.

![../.pic/Lectures/19.%20Bus/fig_01.jpg](../.pic/Lectures/19.%20Bus/fig_01.jpg)

_Рис. 1. Идеальный вариант системы соединений._

### Интерфейс

Интерфейс — это совокупность механических, электрических (аппаратных) и программных средств, с помощью которых компоненты системы объединяются для решения задачи обмена информации.
Существуют три категории интерфейсов:

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

### Шина

**Шина** с это группа сигнальных линий, предназначенных для выполнения определенной функции в программно-управляемом процессе передачи данных.
Чтобы охарактеризовать шину, нужно описать:

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

![../.pic/Lectures/19.%20Bus/fig_02.jpg](../.pic/Lectures/19.%20Bus/fig_02.jpg)

_Рис. 2. Абстрактное представление модели шины._

## Терминология

Операции на шине ("bus") называются транзакциями, существует:

- транзакция чтения (ввода);
- транзакция записи (вывода).

Одна транзакция — цикл шины (может занимать несколько тактовых импульсов).
Когда два устройства обмениваются информацией на шине, одно из них должно инициировать обмен и управлять им.

Устройство, которое инициирует обмен, называется "Bus master" [main] — любое устройство, способное взять на себя владение шиной и управлять пересылкой данных.

"Bus slave" [secondary] (ведомое устройство) — устройство не способное владеть шиной и управлять ей.

В любой момент времени на шине может управлять только одно ведущее устройство. Шиной предусматривается процедура допуска управления только одного из претендентов, это называет **арбитраж**.

### Обмен информации

Существуют три основных обмена информацией:

- Обмен по инициативе процессора.
Микропроцессор формирует запрос для внешнего устройства, затем внешнее устройство сообщает "Подтверждение" на обмен информацией микропроцессору и происходит обмен информацией.

![../.pic/Lectures/19.%20Bus/fig_03.jpg](../.pic/Lectures/19.%20Bus/fig_03.jpg)

_Рис. 3. Пример обмена по инициативе процессора._

- Обмен по инициативе внешнего устройства.
Внешнее устройство формирует запрос для микропроцессора, затем микропроцессор сообщает "Подтверждение" на обмен информацией внешнему устройству и происходит обмен информацией. При этом во время обмена ведущее устройство (микропроцессор) управляет всеми процессами.

![../.pic/Lectures/19.%20Bus/fig_04.jpg](../.pic/Lectures/19.%20Bus/fig_04.jpg)

_Рис. 4. Пример обмена по инициативе внешнего устройства._

- Обмен между внешними устройствами по инициативе одного из них.

![../.pic/Lectures/19.%20Bus/fig_05.jpg](../.pic/Lectures/19.%20Bus/fig_05.jpg)

_Рис. 5. Пример обмена внешними устройствами по инициативе одного из них._

## Типы шин

Шины делятся по целевому назначению:

- шины "процессор-память" (которые специализированы для передачи информацией между процессором и памятью);

![../.pic/Lectures/19.%20Bus/fig_06.jpg](../.pic/Lectures/19.%20Bus/fig_06.jpg)

_Рис. 6. Пример шины "процессор-память"._

- шины ввода-вывода (их особенность заключается в том, что они хорошо стандартизированы и более медленные, потому что ввод-вывод генерирует информацию медленно);
- системные шины (нужны для объединения элементов систем).
  Системная шина условно состоит из трёх шин: шины данных, адреса и управления.
  - Шина адреса — это шина, по которой выставляются адреса устройства, к которому мы хотим обратиться. Ширина шины данных может быть 32, 64, 128 бит (ширина обычно называется "словом").
  - Шина данных — это шина, по которой передаются данные (адреса ячеек памяти, портов ввода\вывода, регистры процессора и так далее. Может быть выбран диапазон адресов "broadcast" и "broadcall") — 36-40 битов.
  - Шина управления (Control Bus) — шина для передачи управляющей информации и информации о состоянии участвующих в транзакции устройств.

![../.pic/Lectures/19.%20Bus/fig_07.jpg](../.pic/Lectures/19.%20Bus/fig_07.jpg)

_Рис. 7. Модель системной шины._

Какие сигналы могут быть внутри шины управления:

1. Сигналы управления транзакциями (среднее значение сигнальных линий: 2-8) делятся на:
   1. указание типа транзакции (чтение\запись);
   2. указание количества байт и номер байт, если пересылается часть слова;
   3. указание типа адреса выданного на шину;
2. информация состояния (статус) — для передачи кодов ошибок и состояний (среднее значение сигнальных линий: 1-4).
3. Линии арбитража — выбор управляющего шиной устройства (среднее значение сигнальных линий: 3-11).
4. Линии прерывания (среднее значение сигнальных линий: 1-2).
5. Последовательные локальные сети (среднее значение сигнальных линий: 1-4).
6. Линии позиционного кода (среднее значение сигнальных линий: 4-5).
7. Тактирование и синхронизация (среднее значение сигнальных линий: 2-6).
8. Линии питания и заземления.

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

![../.pic/Lectures/19.%20Bus/fig_08.jpg](../.pic/Lectures/19.%20Bus/fig_08.jpg)

_Рис. 8. Мультиплексируемая шина адреса/данных._

## Иерархия шин

Существует три основных уровня иерархии шин:

- Одноуровневая иерархия:
В этом уровне иерархии медленные устройства занимают системную шину и она не доступна для центрального процесса и памяти.

![../.pic/Lectures/19.%20Bus/fig_09.jpg](../.pic/Lectures/19.%20Bus/fig_09.jpg)

_Рис. 9. Одноуровневая иерархия._

- Двухуровневая иерархия:
В данном типе есть адаптеры, к которым подключаются шины. На системной шине "висят" высокопроизводительные элементы системы, а через адаптеры сгруппированы и подключены более медленные внешние устройства. Главным минусом является то, что если устройствам модуля ввода\вывода нужно обменяться информацией друг с другом — они будут обмениваться через системную шину, а значит будут её занимать.

![../.pic/Lectures/19.%20Bus/fig_10.jpg](../.pic/Lectures/19.%20Bus/fig_10.jpg)

_Рис. 10. Двухуровневая иерархия._

- Многоуровневая иерархия:
В этом уровне иерархии существует системная шина для объединения высокопроизводительных элементов, к ней подключен адаптер, который в свою очередь ограничивает другую шину с подключёнными к ней другими адаптерами.
В таком случае, если устройствам модуля ввода\вывода нужно обменяться информацией друг с другом — они будут делать это в обход системной шине. Когда им надо будет выйти на системную шину они смогут сделать это на высокой скорости, потому что есть адаптер, который будет выполнять задачу буферизации.

![../.pic/Lectures/19.%20Bus/fig_11.jpg](../.pic/Lectures/19.%20Bus/fig_11.jpg)

_Рис. 11. Многоуровневая иерархия._

## Арбитраж шин

### Алгоритмы арбитража

Каждому потенциальному 'ведущему' присваивается приоритет, для того чтобы дать устройствам возможно обмениваться информацией:

- **Статический приоритет** (за каждым устройством закреплён номер приоритета, чем меньше номер, тем выше приоритет. Проблема заключается в том, что одно устройство может занять шину навсегда и другие устройства не смогут общаться между собой).
- Динамический приоритет (при повторном использовании шины меняется приоритет).
Варианты смен приоритета:
  - **Простая циклическая смена приоритетов** (после каждой итерации разыгрывается приоритет и тот, у кого был самый низкий приоритет становится самым высоким).

  ![../.pic/Lectures/19.%20Bus/fig_12.jpg](../.pic/Lectures/19.%20Bus/fig_12.jpg)

  _Рис. 12. Распределение приоритетов._

  - **Циклическая смена приоритетов с учётом последнего запроса** (Rotating Daisy Chain — RDC):
  Допустим, третье устройство "выигрывает" шину, начинает передавать информацию. После "общения" устройство, которое передавало информацию получает самый низкий приоритет.
  - **Смена приоритетов по случайному закону** (RND):
  Приоритеты меняются по закону псевдослучайной последовательности чисел (Псевдослучайная последовательность чисел - это последовательность, которая кажется статистически случайной, несмотря на то, что была получена в результате полностью детерминированного и повторяемого процесса).
  - **Алгоритм наиболее дальнего использования** (LRU):
  Приоритет устройства, которое дольше всего не использовали, постепенно возрастает после каждого арбитража шины.
  - Можно использовать **фиксированный квант времени**.
  Допустим, у нас есть 10 устройств и каждому из устройств даётся момент времени, когда ему надо определиться хочет ли он общаться или нет. Этот цикл происходит до того момента, пока не найдут готового к общению на шине устройства. Однако скорость реакции на запрос шины будет меньше, чем в других реализациях.
  - На основе очереди (FIFO), когда одно устройство заканчивает общение на шине — сразу же начинает общение устройство, которое стоит следующим в очереди. Но FIFO можно легко "забить". Например, пока обрабатываем один запрос ещё 20 других запросов пришло и буфер "забился".

### Схемы арбитража

Схемы арбитража бывают двух типов:

- Централизованный арбитраж (есть устройство, которое называется "арбитр", все устройства подключаются к нему и спрашивают кто из них получит доступ к общению) делится на две категории:
  - Параллельный;
  - Последовательный.
- Децентрализованный арбитраж ("арбитр" у каждого устройства свой).

**Централизованный параллельный арбитраж**.

В этой схеме у нас присутствуют ведущие устройства, которые могут занимать шину и могут инициировать обмен информацией. Есть центральный арбитр, решающий кто будет общаться на шине. Каждое устройство соединено с арбитром двумя сигналами — это "запрос шины" и "предоставление шины". Все устройства подключены к общей линии "Шина Занята" (ШЗ), с помощью этой линии все устройства могут видеть свободна ли шина или занята. Задача центрального арбитра заключается в определении устройства с максимальным приоритетом и предоставлении шины этому устройству.

![../.pic/Lectures/19.%20Bus/fig_13.jpg](../.pic/Lectures/19.%20Bus/fig_13.jpg)

_Рис. 13. Схема централизованного параллельного арбитража._

**Централизованный последовательный арбитраж**.
В данной реализации приоритеты фиксированы и зависят от того где конкретно подключено устройство. Есть сигнал "Шина Занята" (ШЗ), есть сигнал "запрос шины" и "предоставление шины" от центрального арбитра.

![../.pic/Lectures/19.%20Bus/fig_14.jpg](../.pic/Lectures/19.%20Bus/fig_14.jpg)

_Рис. 14. Схема централизованного последовательного арбитража._

Для примера рассмотрим ситуацию, когда два устройства одновременно запросили общение на шине ("Ведущий n-2" и "Ведущий 0"). Центральный арбитр видит, что шина не занята и даёт сигнал первому устройству.

![../.pic/Lectures/19.%20Bus/fig_15.jpg](../.pic/Lectures/19.%20Bus/fig_15.jpg)

_Рис. 15. Предоставление сигнала на пользование шиной устройству "Ведущий n-1"._

Первое устройство ("Ведущий n-1") получило этот сигнал, но так как ему не нужно общаться на шине — оно передаёт его следующему устройству ("Ведущий n-2")

![../.pic/Lectures/19.%20Bus/fig_16.jpg](../.pic/Lectures/19.%20Bus/fig_16.jpg)

_Рис. 16. Передача сигнала устройству "Ведущий n-2"._

После этого устройство "Ведущий n-2" не распространяет этот сигнал дальше и занимает шину.

![../.pic/Lectures/19.%20Bus/fig_17.jpg](../.pic/Lectures/19.%20Bus/fig_17.jpg)

_Рис. 17. Устройство "Ведущий n-2" заняло шину для общения._

**Децентрализованный арбитраж**.
В данной реализации все устройства связаны друг с другом проводами. Когда какое-то из устройств хочет занять шину — оно видит сигналы от других устройств. Таким образом, перед тем как выставить свой запрос, устройство смотрит нет ли запросов с большим приоритетом. Если есть, то устройство не отправляет свои запросы, так как это не имеет смысла.

![../.pic/Lectures/19.%20Bus/fig_18.jpg](../.pic/Lectures/19.%20Bus/fig_18.jpg)

_Рис. 18. Схема децентрализованного арбитража._

### Протоколы шин

Протоколы шин бывают двух типов:

- синхронные (когда происходит синхроимпульс, тогда происходят и какие-то события на шине);

![../.pic/Lectures/19.%20Bus/fig_19.jpg](../.pic/Lectures/19.%20Bus/fig_19.jpg)

_Рис. 19. Схема синхронного протокола шин._

- асинхронные (как только устройство способно отреагировать — оно сразу же реагирует).

![../.pic/Lectures/19.%20Bus/fig_20.jpg](../.pic/Lectures/19.%20Bus/fig_20.jpg)

_Рис. 20. Схема асинхронного протокола шин._

## Повышение эффективности шин

Методы повышения эффективности шин:

- Пакетный режим пересылки информации (передаётся не одна порция данных, а сразу несколько порций данных по нескольким адресам).

![../.pic/Lectures/19.%20Bus/fig_21.jpg](../.pic/Lectures/19.%20Bus/fig_21.jpg)

_Рис. 21. Схема пакетного режима пересылки информации._

- Конвейеризация транзакций (предназначена для высокоскоростных шин).

![../.pic/Lectures/19.%20Bus/fig_22.jpg](../.pic/Lectures/19.%20Bus/fig_22.jpg)

_Рис. 22. Схема конвейеризации транзакций._

Можно менять данные на выходе А ещё до того момента времени, когда эти данные окончательно воспринялись устройством B, главное выдерживать нужные временные ограничения ("тайминги").

- Протокол с расщеплением транзакций (мы не ждём ответ на конкретную транзакцию, а выдаём его когда у нас есть возможность).

![../.pic/Lectures/19.%20Bus/fig_23.jpg](../.pic/Lectures/19.%20Bus/fig_23.jpg)

_Рис. 23. Схема протокола с расщеплением транзакций._

Ответ на транзакцию приходит с запросом не сразу. То есть мы не ждём ответ на конкретную транзакцию, и выдаём ответ когда есть возможность.
Например, на рисунке 23 для _адреса 1_ у нас была возможность получить ответ сразу, так же и с _адресами 3 и 4_, а вот для _адреса 2_ возможность получить ответ появилась только получения ответов для _адреса 3 и 4_. Таким образом, за счёт протокола с расщеплением транзакций всё будет работать корректно.

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

Например, ведущее устройство захватывает шину и начинает передавать **большое количество информации**. Это устройство передаёт информацию и видит, что другие устройства не отправляют запрос на пользование шиной, тогда ведущее устройство продолжает передавать информацию. То есть когда возникнет запрос, тогда устройство сразу передаёт шину.

### Увеличение полосы пропускания

Для увеличения полосы пропускания существуют следующие способы:

- отказ от мультиплексирования шин адреса и данных;
- увеличение ширины данных;
- повышение тактовой частоты.

### Стандартизация шин

Из стандартизированных шин можно выделить две большие группы:

- Шины "большого" интерфейса (высокопроизводительные шины, связывают память, процессор, модули ввода\вывода)
  - PCI Express
  - Hyper Transport
  - QPI
- Шины "малого" интерфейса (служат для присоединения периферийных устройств к модулям ввода\вывода)
  - USB
  - Bluetooth
  - UART
  - CAN
  - SPI
  - I2C

### Последовательный синхронный обмен

![../.pic/Lectures/19.%20Bus/fig_24.jpg](../.pic/Lectures/19.%20Bus/fig_24.jpg)

_Рис. 24. Схема последовательного синхронного обмена._

Для того чтобы организовать последовательный синхронный обмен информации, нам нужна линия, по которой мы передаём информацию и линия, по которой происходит синхронизация.

Как работает последовательный синхронный обмен:
На схеме есть генератор импульсов (ГН), который генерирует тактовый сигнал (он управляет сдвиговым регистром и передаёт сигналы на приёмник). Передатчик параллельно с этим загружает информацию в сдвиговый регистр, затем информация по одному биту перемещается в другой сдвиговый регистр. После того как вся информация передалась — приёмник просто считывает эту информацию

### Последовательный асинхронный обмен

![../.pic/Lectures/19.%20Bus/fig_25.jpg](../.pic/Lectures/19.%20Bus/fig_25.jpg)

_Рис. 25. Схема последовательного асинхронного обмена._

Отличие от последовательного синхронного обмена заключается в том, что из-за отсутствия тактовых импульсов приёмнику и передатчику необходимо договориться про скорость, на которой будет происходить обмен. На нашей схеме генератор импульсов на приёмнике в 16 раз выше частотой чем на передатчике. Схема управления будет 16 раз считывать каждый бит, то есть если 14 раз была единица и 2 раза ноль, значит была единица.

### Основные материалы лекции

1. [Ссылка](https://www.youtube.com/watch?v=UXmY3LS_xWk&list=PL0def37HEo5KHPjwK7A5bd4RJGg4djPVf&index=23) на видеозапись лекции
2. [Ссылка](https://onedrive.live.com/view.aspx?resid=1FF28DEC684C2C56!81737&cid=1ff28dec684c2c56&authkey=!AIXUSz0MyutL6hs&CT=1698668305325&OR=ItemsView) на лекцию в формате Power Point
