Любое обращение к памяти происходит через кэш.
Кэш никогда не обменивается байтами или словами. Обращаясь к байту, кэш считывает целый блок (например, 128 бит в случае 128-разрядной шины).
Интерфейс – это правила перехода границы (т.е. правила, по которым граница может быть пересечена).
Типы интерфейсов:
- Физический интерфейс – правила, описывающие механические характеристики подключения ВУ.
- Электрический интерфейс – определяет величины напряжений, токов и нагрузок, которые должны выполняться при подключении.
- Логический интерфейс – определяет последовательность во времени сигналов (оперирует логическими понятиями 0 и 1, а не вольтами).
- Программный интерфейс – описывает как интерпретировать значения регистров в процессе управления устройством.
Системная шина нужна для объединения узлов ВС.
Связь между каждыми двумя узлами может быть специализированна для этих двух узлов.
Добавление еще одного узла приводит к нехилому увеличению числа связей.
Жертвуем оптимальностью, так, что сложность связей не зависит от сложности системы. Появляется шинный интерфейс.
Оптимальность этого интерфейса будет логарифмически падать с ростом числа устройств и различием между ними.
Интерфейс «общая шина» (UNIBUS)
Реализовано в PDP-11 (DEC).
Максимально универсальна.
Этот интерфейс предполагает, что все устройства примерно одинаковы. Вывод идет со скоростью «самого медленного солдата» - все определяется самым медленным устройством.
Шина ISA
ISA (IndustryStandardArchitecture) – применяется с первых моделей PC.
ISA-8 (8 бит данных и 20 бит адреса) и ISA-16 (16 бит данных и 24 бит адреса).
Частота системной шины – до 8 МГц.
Существует расширение до 32 бит – EISA (совместима, для режима EISA используются специальные управляющие сигналы) – 32 бит адрес и данные, частота до 33 МГц.
Шина PCI
PCI (PeripheralComponentInterconnect) – локальная шина, являющаяся мостом между шиной процессора и шиной ввода/вывода ISA/EISA.
Разрядность данных – 32/64 бит. Разрядность адреса – 32 бит. Частота – 33/66 МГц.
Шина является синхронной.
На ее базе существуют расширения (например AGP).
Шина VLB
VLB (VESALocalBus) – использует шину процессора для подключения периферии (графический адаптер, контроллеры дисков и т.д.).
32-битная шина (32/64 – данные, 32 – адрес), частота колеблется от 33 до 50 МГц.
Шина MassBus
MassBus – высокоскоростная синхронная блочная шина.
Использовалась на VAX-11 (DEC).
В многошинных интерфейсах некоторые узлы выведены из-под управления общей шины.
Инициатор – ЦП. Взаимодействие происходит с одним устройством.
Любое устройство – дешифратор адреса (ДША). Обладает диапазоном адресов.
Вводится специальный таймаут для проверки существования адреса.
Среагировать на изменение сигнала можно в лучшем случае на следующем такте, т.к. триггеры переключаются не мгновенно.
К ней могут подключаться только те устройства, которые соответствуют ее временным характеристикам.
Цикл шины делится на фазы фиксированного времени.
Фаза адреса (ФА): длина – не менее 2-х тактов, чтобы приемники смогли «засечь» адрес.
Фаза ожидания (ФО): пока ВУ не выдает данные на шину. ФО имеет стандартный фиксированный размер.
Все ВУ должны успевать за ФО дешифровать адреса, выбрать данные и т.д. Иначе они не смогут работать с этой шиной.
Фаза данных – на шину выставляются данные.
Но все устройства имеют разное быстродействие. Для этого заводится сигнал waitstate (WS). Он устанавливается до фазы данных – в середине ФО. ЦП, получив сигнал WS (медленное устройство), продлевает ФО еще на один такт.
Есть также сигнал HighSpeed (например, для ОП) – от ФО отнимается один такт.
IO/Mem – определяет, это порт ввода-вывода или адрес памяти.
Из-за высокой частоты передачи возникают некоторые эффекты, из-за которых могут потеряться данные.
Применяется код Хэмминга:
Завершающие три бита формируются по восьми.
2 бита – diagnostics, 1 бит – modify
Если испорчен один бит, код Хэмминга поможет его восстановить, если два – устранить ошибку.
Контроль паритета [выявит] только одну ошибку. Биты дополняются еще одним – четность/нечетность.
Если к устройству пришел неверный адрес, оно выставляет на шину сигнал ошибки. На высокочастотных шинах появляются:
- Фаза ожидания ошибки адреса
- Фаза ожидания данных
Т.к. ошибки появляются [редко], в эти фазы все просто чего-то ждут, обмена по шине нет.
Эффективность шины очень мала:
1) Большую часть времени на шине ничего не происходит.
2) Даже во время активности шины не все провода используются одновременно.
Надо совместить разные фазы шины разных ЦП, так, чтобы ЦП друг другу не мешали и использовали шину параллельно.
Предыдущий ЦП освободил шину – следующий ее занимает. Такие шины называются транзакционными.
В настоящее время в […] системах, т.к. алгоритмы анализа очень сложны (ко всему прочему, фазы могут быть разной длины).
Используется арбитр шин – устройство, которое управляет разделением шины между разными ЦП.
П просит АШ выдать ему шину. Если несколько запросов, АШ по какому-то алгоритму выделяет шину конкретному ЦП.
ЦП тогда начинает анализировать сигнал Busy.
Когда мы общаемся с ВУ, должны на шину выставить адрес.
В некоторых системах:
Старшие разряды шины служат для адресации регистров ВУ.
Когда мы даем команду «писать в регистр», данные оседают в кэш. Если после этого будет дана команда «читать кэш», прочитаны данные будут прочитаны из кэша! Что неверно!
КЭШ предназначен для устройств, обладающих только свойством хранения (например, ОП). А любое ВУ обладает еще какой-нибудь функцией (при этом совсем не обязательно ему обладать функцией хранения). Например, видеопамять – хранение и отображение.
Кэш не может отличить память ВУ от ОП. От нас потребуется соответствующее управление. Надо обращение к регистрам делать отличным от обращения к ОП.
- Шина адресов
- Шина ВУстройств
То есть, делаем логическую шину, отличную от адресной.
В Intel ввели специальные инструкции – in и out. ЦП четко различает (по коду) команда работы с памятью и с портами. Обращения к ВУ не кэшируются.
Есть еще одна проблема: в случае большой памяти ВУ.
По байтам брать нельзя, т.к. на каждый байт нужно прерывание, а это накладно (на весь пакет нужно одно прерывание).
1-е решение: сигнал кэшу сбросить всю свою память перед выполнением обмена с памятью. Но сбросятся все таблицы страниц! В ЦП УПА управляет адресацией с помощью таблицы страничных преобразований.
2-е решение: для каждой страницы 2 бита: «запрет кэширования» и «кэширование только при чтении»
КВУ знает протокол СШ и подключается к ней. С другой стороны он подключается к ВУ, т.е. должен знать интерфейс ВУ.
Управляющими объектами (ВУ-ва) являются регистры и память. ВУ отображает их на виртуальное АП.
Если устройство быстрое и большие объемы передаваемых данных – используется резидентная память (существует два механизма – прямой доступ к памяти и отображение памяти).
Если медленное устройство и малые объемы передачи данных – используются регистры ВУ.
Как же КВУ интерпретирует адрес, выставленный на шину?..
Используются регистры:
К такому регистру (например, к RD) можно обращаться по одному адресу, но физически это два разных регистра. В один – отправляются данные, а из другого получаются.
КВУ дешевы и достаточно универсальны.
Недостаток: они реализованы в виде фиксированной логики. Логику работы изменить нельзя!
Если нужно подключать программируемые устройства, контроллеры не годятся, нужно применять механизм сопроцессора.
Сопроцессор не обладает полной вычислительной самостоятельностью. Он не может самостоятельно обмениваться данными по шине, принимать решения об обмене.
Сопроцессор имеет собственную систему команд, ему требуется помощь ЦП для организации работы.
1) Сопроцессор должен отличать циклы шины ЦП от своих циклов шины.
2) ЦП также должен отличать циклы шины сопроцессора от своих.
Escape-признак – это префикс команды.
Если команда, встречаемая ЦП имеет такой префикс, ЦП ее пропускает. Сопроцессор выполняет команды, следующие за признаком Escape.
Недостаток: нельзя изолировать поток команд сопроцессора от потока команд ЦП (в поток команд ЦП входят команды сопроцессора).