Использование нескольких шин для ввода-вывода
Соединение элементов в компьютере по принципу «каждый с каждым» практически неосуществимо из-за его сложности, поэтому уже на первых компьютерах использовались шины. Шина – не только набор проводников, по которым могут передаваться нули и единицы, главная характеристика – разрядность.
Как правило, шина состоит из трех частей:
1) Одна ее часть предназначена для передачи данных – это шина данных.
2) Другая часть – для передачи адресов (адреса имеют не только ячейки памяти, но и практически все элементы компьютера).
3) Шина управления, выполняющая сервисные функции, помогающие управлять элементами компьютера. Следующая характеристика шины – скорость передачи данных (килобайт/мегабайт в секунду), чем выше разрядность – тем больше скорость. Помимо самих проводников в шину входят обслуживающие ее микросхемы, называемые мостами. Основная функция мостов – управление шиной по ее протоколу. Любая шина, которая управляется мостом, пробегает по времени определенное количество состояний, которые повторяются в цикле. В каждый данный момент шина может находиться только в определенном состоянии: принимать данные, ждать, передавать данные и т.д.
В современных ПК имеются несколько шин:
1) Системная шина: чаще всего самая быстрая; имеет наибольшее число разрядов; соединяет две главные части ПК – процессор и память. Т.О. в ядро системы входит три компонента, без которых она не может существовать: процессор, шина (системная) и память.
2) Одна или несколько локальных шин, выполняющих вспомогательные функции. К таким шинам могут присоединяться внешние устройства. В задачу мостов входят также задачи передачи данных с одной шины на другую. Это происходит потому, что шины могут работать на разных частотах и др. 3) Сервисная шина, которая соединяет некоторые элементы или компоненты компьютера, такие как системные часы и т.д. Идея использования шины состоит в том, что все, кому надо общаться между собой в системе, подключаются к шине (они – абоненты). В каждый данный момент шина может соединять только 2 устройства, остальные устройства в такие моменты должны от нее отключаться. Пусть совместная переменная Loc управляет доступом к разделяемой памяти. Если значение переменной Loc равно нулю, любой процесс может изменить его на единицу и обратиться к разделяемой памяти, а затем изменить его обратно на ноль, пользуясь обычной командой MOV. Первая команда копирует старое значение Loc в регистр, потом устанавливает ее значение, равное единице, а затем сравнивает старое значение с нулем. Если оно не нулевое, значит блокировка ранее уже была установлена и проверка начинается сначала. Рано или поздно значение окажется равным нулю. Это означает, что процесс, находящийся в критической области вышел из нее и подпрограмма возвращается установить блокировку.
В конструкции современных ПК используется быстрая шина, напрямую соединяющая процессор и память
Быстрая шина предназначена для увеличения скорости обмена данными между процессором и памятью. Она является системной, чему в архитектуре общей шины сильно мешали медленные устройства ввод-вывод.
Сложность применения быстрой шины на машинах с отображением регистров ввод-вывод на память состоит в том, что у устройств ввод-вывод нет способа увидеть адреса памяти, выставляемые процессором на эту шину, следовательно они не могут реагировать на такие адреса, поэтому чтобы отображение регистров ввод-вывод могло работать по этой схеме, необходимы специальные меры.
Способы решения проблемы:
1 Способ
Сначала все обращения к памяти посылаются процессором по системной (быстрой) шине (чтобы не снижать производительности). Если память не отвечает – процессор пытается сделать это еще раз, но по медленно (универсальной) шине, к которой подключены устройства ввод-вывод. Такое решение работает, но требует увеличение сложности аппаратуры.
28 ПРЯМОЙ ДОСТУП К ПАМЯТИ. Direct Memory Access (DMA)
Центральный процессор может запрашивать данные от контроллера ввода-вывода по одному байту, но подобная система обмена данными крайне нежелательна, т.к. расходует огромное кол-во процессорного времени, поэтому на практике уже давно используется другая схема – ДМА. ОС может использовать этот метод лишь при наличии соответствующего оборудования – контроллера ДМА.
ДМА-контроллер может получать доступ к системной шине, независимо от ЦП. Он содержит несколько регистров, доступных ЦП для чтения и записи. К ним относятся: регистр адреса памяти, счетчик байтов и один или несколько управляющих регистров. Эти регистры задают какой порт ввода вывода должен быть использован, направление переноса (чтение из устройств ввода-вывода или запись), единицу переноса (осуществлять перенос побайтно или пословно), а также число байтов, которые следует перенести за одну операцию. Т.о. ЦП может запрограммировать контроллер на перенос данных из уст-в ввод-выводода в память и обратно так, как это удобно ОС.
Рассмотрим как происходит перенос с диска в оперативную память:
Сначала контроллер считывает с диска блок (один или несколько секторов) последовательно, байт за байтом, пока весь блок не окажется во внутреннем буфере контроллера. Этот контроллер проверяет контрольную сумму, чтобы убедиться, что при чтении не произошло ошибки. После этого контроллер диска инициирует прерывание. Когда ОС начинает работу, она может прочитать блок диска побайтно или пословно в цикле сохраняя считанное слово или байт в оперативной памяти.
При использовании ДМА происходит следующее: сначала процессор программирует ДМА-контроллер (этап 1), устанавливая его регистры и указывая таким образом какие данные и куда следует переместить. Затем процессор дает команду дисковому контроллеру прочитать данные во внутренний буфер и проверить контрольную сумму. Когда данные проверены и получены контроллером диска, ДМА контроллер начинает перенос данных, посылая по шине на контроллер диска запрос чтения (шаг 2). Этот запрос выглядит как обычный запрос чтения, так что контроллер диска не знает, пришел он от ЦП или ДМА. Адрес памяти уже находится на адресной шине, так что контроллер диска знает, куда следует переслать слово из своего внутреннего буфера.
Запись в память (шаг 3) является еще одним стандартным циклом шины.
Когда запись закончена, контроллер диска также по шине посылает сигнал подтверждения контроллеру ДМА (шаг 4). Затем контроллер ДМА увеличивает используемый адрес памяти и уменьшает значение счетчика байт. После этого шаги 2-4 повторяются, пока значение счетчика не станет равно 0.
По завершению цикла копирования ДМА контроллер инициирует прерывание процессора (шаг 5).
Все это время, до 5-го шага, процессор и контроллер ДМА занимались своим делом (ЦП выполнял программу, ДМА читал).
Самые простые ДМА контроллеры за один раз выполняют одну операцию переноса данных, как это было описано выше. Более сложные контроллеры могут выполнять за один раз несколько подобных операций. У них несколько каналов, каждый из которых управляется своим набором внутренних регистров. Такой контроллер может осуществлять перенос данных «одновременно». Обслуживать несколько устройств ввод-выводода. Многие шины могут работать в двух режимах: пословном и поблочном.
Пословный режим
В таком режиме процедура выглядит так, как описано выше, но контроллер выставляет запрос на перенос первого слова и получает его, так что если ЦП нужна шина, ему придется подождать. Этот механизм называется захватом цикла, потому что контроллер периодически забирает случайный цикл у ЦП слегка его притормаживая.
Поблочный режим
В этом режиме контроллер ДМА велит устройству занять шину, сделать серию пересылок и отпустить ее. Такой способ называется пакетным режимом, он более эффективен, чем захват цикла, поскольку занятие шины требует времени, а в пакетном режиме эта процедура выполняется всего один раз для передачи блока данных.