- •Глава 24. Общие вопросы организации ввода-вывода
- •24.1. Характеристики внешних устройств
- •24.2. Типы интерфейсов ввода-вывода
- •24.3. Конструктивная реализация внешних устройств
- •24.4. Адресация периферийных устройств
- •24.5. Функции контроллера пу и информационная модель взаимодействия
- •24.6. Типичные действия операции контроллера пу при выполнении операции
- •24.8. Буферизация данных в устройствах
- •24.9. Контрольные вопросы
24.5. Функции контроллера пу и информационная модель взаимодействия
Контроллеры ПУ выполняют следующие функции:
связь с процессором через контроллер внешнего интерфейса;
связь через контроллер внутреннего интерфейса с собственно ПУ;
временная буферизация команд и данных;
обнаружение ошибок и сбоев;
управление работой внешнего устройства.
При выполнении любой операции ввода-вывода (а выполняются операции ввода-вывода под управлением специальных программ операционной системы, так называемых драйверов) драйвер периферийного устройства взаимодействует с периферийным устройством через его контроллер. Драйвер «видит» не само периферийное устройство, которым он должен управлять, а контроллер, который должен обеспечить выполнение всех команд, полученных от драйвера ПУ. При этом сам контроллер ПУ для своего драйвера является специфичным ПУ.
Между процессором и контроллером ПУ в процессе выполнения операции ввода-вывода, между контроллером ПУ и собственно внешним устройством, которым он управляет, передаются следующие типы информации:
команды – управляющая информация от инициатора обмена (процессора, который в данном случае всегда является ведущей стороной) к контроллеру ПУ (ведомой стороне);
ответы контроллера ПУ процессору о выполнении полученных от него команд, в том числе и информация о состоянии контроллера ПУ;
данные, передаваемые процессором;
данные, передаваемые контроллером ПУ;
экстренные сообщения контроллера ПУ для процессора для немедленной реакции последнего на непредвиденные события, которые произошли в контроллере ПУ в процессе выполнения операции ввода-вывода и требующие вмешательства процессора.
В ходе выполнения программы на любом отрезке времени процессор может взаимодействовать с одним или несколькими периферийными устройствами, причем последовательность обращений диктуется только драйвером ПУ. Для компьютера эта последовательность является совершенно случайной. Внутренние ресурсы, такие, как оперативная память и коммуникационная подсистема, при этом используются совместно множеством отдельных процессов, в число которых входят и процессы ввода-вывода.
Например, процесс передачи данных от внешнего устройства в процессор может включать такую последовательность операций.
1. Процессор передает контроллеру ПУ приказ проверить состояние подключенного к нему устройства.
2. Контроллер ПУ возвращает процессору информацию о текущем состоянии устройства.
3. Если устройство находится в рабочем состоянии и готово передавать данные, процессор дает контроллеру ПУ команду начать передачу данных.
4. Контроллер ПУ считывает с внешнего устройства порцию данных.
5. Данные передаются от контроллера ПУ в процессор.
24.6. Типичные действия операции контроллера пу при выполнении операции
Расшифровка команд. Контроллер ПУ получает от процессора команды, как правило, в виде сообщений через контроллер внешнего интерфейса, к которому он подключен. Например, набор команд для контроллера НМД включает следующие команды:
чтение последовательности кластеров;
запись последовательности кластеров;
поиск заданной дорожки и ряд других.
Команды могут сопровождаются аргументами.
Передача данных. Данные передаются между процессором и контроллером по линиям данных интерфейса.
Передача информации о текущем состоянии. Поскольку периферийные устройства работают значительно медленнее, чем внутренние компоненты компьютера, очень важно всегда знать, каково текущее состояние устройства. Например, если процессор требует от контроллера ПУ передать ему данные из устройства (операция ЧТЕНИЕ) вполне вероятно, что последнее еще не готово передать новую порцию данных, поскольку занято выполнением предыдущей команды. В таком случае необходимо известить процессор о сложившейся ситуации, направив ему информацию о том, что в текущий момент устройство занято и не может выполнить новую команду. Общепринято различать два состояния внешнего устройства: устройство занято и устройство готово к выполнению новой команды.
Распознавание адреса. Каждое внешнее устройство характеризуется уникальным набором адресов из адресного пространства оперативной памяти. Следовательно, от контроллера ПУ (точнее от периферийной части контроллера внешнего интерфейса, которая является составной частью контроллера ПУ) требуется распознавать уникальные адреса, подключенных к нему внешних устройств.
С другой стороны, контроллер ПУ должен взаимодействовать с периферийным устройством — одним или даже несколькими. Такое взаимодействие включает передачу команд, обмен данными и прием информации о текущем состоянии.
Обнаружение ошибок. И, наконец, последняя из задач, которые возлагаются на контроллер ПУ — обнаружение ошибок и формирование соответствующего сообщения процессору. Один класс ошибок — это сбои в работе механических (электромеханических) и электронных узлов внешнего устройства (например, прекращение подачи бумаги, обнаружение дефектной дорожки на носителе и т.д.). Эти ошибки обнаруживает непосредственно контроллер ПУ. Другой класс — случайные искажения информации, передаваемой в контроллер. Как правило, в современных контроллерах ПУ функцию обнаружения ошибок при передачах информации через внешний интерфейс выполняет контроллер интерфейса. Такие искажения обнаруживаются с помощью специального кодирования пересылаемых данных. Одним из распространенных простых способов обнаружения ошибок при передачах информации параллельными интерфейсами является использование дополнительного разряда четности на каждый пересылаемый байт данных или на каждый пересылаемый символ. Этот дополнительный разряд формируется на передающем конце таким образом, чтобы общее количество единиц в информационном байте и контрольном коде было четным (контроль по четности) или нечетным (контроль по нечетности). Получив информационный байт и сопровождающий его контрольный разряд, контроллер интерфейса формирует контрольные разряды и сравнивает их с полученными контрольными разрядами. При несовпадении фиксируется наличие ошибки при передаче информации по внешнему интерфейсу. При передачах информации современными высокоскоростными последовательными интерфейсами используются более сложные способы формирования контрольной информации, например, циклические коды, которые позволяют обнаруживать значительно большее число ошибок в передаваемой информации. Принцип обнаружения ошибок такой же, как и в случае параллельных интерфейсов, а именно:
на передающем конце формируется контрольная информация посредством использования циклических кодов. Эта контрольная информация передается вместе с пакетом полезной информации.
получив пакет информации, периферийный контроллер внешнего интерфейса формирует свою контрольную информацию по такому же алгоритму, что и центральный контроллер внешнего интерфейса.
сформированная контрольная информация сравнивается с принятой контрольной информацией. При несовпадении сформированной и принятой контрольной информации фиксируется ошибка при передаче информации.
24.7. Структура контроллера ПУ
Контроллеры ПУ разных типов значительно отличаются по сложности и количеству подключаемых к ним внешних устройств. Поэтому здесь рассматривается их структура только в самом общем виде.
В соответствии с информационной моделью обмена каждый контроллер ПУ может иметь:
буфер команд - для приема команд из внешнего интерфейса и временного их хранения;
буфер входных данных - для приема данных из внешнего интерфейса и временного их хранения;
буфер выходных данных – для приема прочитанных из ПУ данных и хранения их на все время до выдачи во внешний интерфейс;
буфер информации о состоянии ПУ – для хранения на все время до выдачи во внешний интерфейс.
Физически все перечисленные выше буфера могут быть реализованы либо в виде отдельных буферов, либо в виде одного физического запоминающего устройства.
С точки зрения программиста между программой драйвера и контроллером ПУ в соответствии с рассмотренной информационной моделью обмена существует 4 логических канала, а именно:
логический канал для передачи команд в контроллер ПУ;
логический канал для передачи данных в контроллер ПУ;
логический канал для приема данных из контроллера ПУ;
логический канал для приема информации из контроллера ПУ.
Физически часть (или даже все) логические каналы могут реализовываться через один физический канал связи.
Для того чтобы различать логические каналы в контроллере ПУ (точнее в периферийном контроллере интерфейса) они должны иметь уникальные идентификаторы. В качестве таких идентификаторов могут используются адреса либо специальные указатели в передаваемой информации. Количество логических каналов (и, соответственно, количество используемых адресов в контроллере интерфейса ПУ) определяется сложностью ПУ (прежде всего количеством выполняемых функций).
Размер буферов в контроллере интерфейса ПУ и организация взаимодействия с ними контроллера интерфейса и контроллера ПУ зависит от типа ПУ, а именно:
от способа организации работы с ПУ. При использовании конвейерного принципа наличие буфера команд обязательно. Емкость буферов (количество, например, команд в нем) может быть различной.
от скорости работы с ПУ;
от размеров передаваемых порций данных за один сеанс обмена. Например, для контроллера НМД размеры буферов данных не могут быть меньше размера одного кластера.
Для хранения идентификаторов (адресов) логических каналов (т.е. соответствующих буферов) в контроллере интерфейса имеется соответствующая память. Эта память может быть реализована в виде регистров.
Информационная структура контроллера ПУ представлена на рис.24.8.
Контроллеры ПУ часто разделяют по тому, насколько они избавляют процессор (а точнее, выполняемую процессором программу) от деталей функционирования подключенного к нему внешнего устройства. Некоторые контроллеры ПУ берут на себя все заботы об управлении отдельными узлами периферийного устройства в процессе выполнения комплексных операций, синхронизации отдельных этапов, перекодировке данных, управлении электромеханическими узлами и т.п. В таком случае процессору остается только передавать команды чтения или записи данных, открытия или закрытия файла.
Более простые контроллеры ПУ дают возможность программе следить за деталями выполнения комплексных операций. В современных компьютерах, как правило, контроллеры ПУ выполняют все функции по управлению ПУ.
Каждый контроллер ПУ является специализированным компьютером.
Рис. 24.8. Информационная структура контроллера ПУ
