Канальные процессоры и прямой доступ к
памяти
Одно из решений состоит в том, чтобы завести отдельный процессор и поручить
ему всю работу по опросу. Процессор, занимающийся только организацией
ввода-вывода, называют периферийным или канальным
(channel).
Понятно, впрочем, что это повышает стоимость системы и не решает проблемы
радикально — теперь вместо флагов, непосредственно сигнализирующих о внешних
событиях, центральный процессор вынужден опрашивать флаги, выставляемые
канальным процессором. В зависимости от характера событий и требуемой
обработки это решение может оказаться и совсем неприемлемым, например,
если на каждое событие требуется немедленная реакция именно центрального
процессора.
В противном случае, если немедленно после события требуется лишь простая
обработка, а сложные вычисления можно отложить на потом, канальный процессор
можно упростить и сделать существенно дешевле центрального.
Так, при работе с контроллерами дисков, лент и других устройств массовой
памяти возникает задача копирования отдельных байтов (или, в зависимости
от разрядности шины контроллера, полуслов или слов) из контроллера в память
и обратно. Передача одного блока (512 байт у большинства современных контроллеров)
состоит из 128 операций передачи слова, идущих друг за другом с небольшими
интервалами. Темп передачи данных определяется скоростью вращения диска
или движения ленты. Этот темп обычно ниже скорости системной шины, поэтому
передача данных должна включать в себя опрос признака готовности контроллера
принять или предоставить следующее слово. Интервал между словами обычно
измеряется несколькими циклами шины. Нередко бывает и так, что частоты
шины и контроллера не кратны, поэтому последовательные слова надо передавать
через различное число циклов.
Дополнительная сложность состоит в том, что, не предоставив вовремя следующее
слово для записи, мы испортим весь процесс — эта проблема особенно серьезна
на устройствах однократной записи, например прожигателях компакт-дисков.
Аналогично, не успев прочитать очередное слово, мы потеряем его и вынуждены
будем отматывать ленту назад пли ждать следующего оборота диска.
Видно, что это именно та ситуация, которую мы ранее описывали как показание
к использованию режима опроса: поток следующих друг за другом с небольшим
интервалом событий, каждое из которых нельзя потерять, а нужно обязательно
обработать.
Обработка события, которая нужна, чтобы избежать такой неприятности, крайне
проста, так что устройство, способное с ней справиться, не обязано даже
быть полностью программируемым процессором.
При передаче надо всего лишь убедиться, что блок данных не кончился, взять
следующее слово из памяти, дождаться готовности устройства, скопировать
слово и вернуться к началу алгоритма. Если блок данных кончился или контроллер
выдал ошибку, необходимо сообщить об этом центральному процессору.
Для реализации этого алгоритма достаточно трех регистров (указателя в
памяти, значения текущего слова и счетчика переданных слов). Реализующее
этот алгоритм устройство называют контроллером прямого доступа к памяти
(Direct Memory Access controller, DMA controller)
(рис. 6.1). Такие контроллеры часто рассчитаны на одновременную
работу с несколькими устройствами — имеют несколько каналов — и, соответственно,
больше регистров. Описание реальной микросхемы контроллера ПДП можно найтив
[Паппас/Марри 1993].
Обычно контроллеры ПДП не считают процессорами, однако без большой натяжки
можно сказать, что это все-таки канальный процессор, хотя и очень примитивный.
Контроллеры ПДП, рассчитанные на совместную работу с процессором, обладающим
виртуальной памятью, часто имеют некий аналог диспетчера памяти ЦП, для
того, чтобы позволить операционной системе предоставлять указатель для
ПДП в виртуальном адресном пространстве, или, во всяком случае, упростить
работу по преобразованию виртуального адреса в физический.
Различают два типа реализаций ПДП:
- мастер шины (bus master) (в
старой русскоязычной литературе встречалось также словосочетание
задатчик шины), когда устройство имеет свой собственный контроллер
ПДП,
- централизованный контроллер, устанавливаемый на системной
плате и способный работать с несколькими различными устройствами.
Рис. 6.1. Структура контроллера ПДП
В качестве альтернативы ПДП можно предложить снабжение устройства буфером,
который работает с частотой системной шины. Центральный процессор передает
данные в буфер, и лишь когда заканчивает передачу, инициирует операцию
устройства. Логика работы самого устройства с этим буфером, впрочем, ничем
не отличается от ПДП, с той лишь разницей, что используется не общесистемная,
а встроенная память. На практике, оба подхода часто используются совместно:
ПДП позволяет минимизировать загрузку центрального процессора, а буфер
— избежать потери данных, если системная шина занята другим устройством.
Типичный современный дисковый контроллер имеет и средства ПДП, и внутренний
буфер. У кэширующих (имеющих кэш-память) и RAID-контроллеров объем буфера
может измеряться многими мегабайтами. Кроме того, современные жесткие
диски также имеют собственные буферы.
Периферийные процессоры находят широкое применение в современных вычислительных
системах. Так, типичный современный персональный компьютер, кроме центрального
процессора, обычно имеет и специализированный видеопроцессор, так называемый
графический ускоритель. У кэширующих дисковых контроллеров и аппаратных
реализаций RAID (см. разд. Дисковые
массивы) обычно также есть собственный процессор, в данном случае,
как правило, используются полностью программируемые процессоры. Лазерные
и струйные печатающие устройства имеют процессор, который интерпретирует
команды языка управления принтером (PCL или Postscript), есть процессоры
модемах и во многих других периферийных устройствах. Впрочем, нередко
встречаются и попытки обратить процесс децентрализации вычислений -так
называемые "софтовые" или Win-модемы (называемые так потому,
что программное обеспечение, способное работать с таким модемом, часто
поставляется только под Windows), многие бытовые принтеры и т. д.
В отличие от перечисленных устройств, классический полностью программируемый
канальный процессор подключен непосредственно к системной шине и может
оперировать несколькими устройствами, в зависимости от загруженной в него
канальной программы. Канатьные процессоры долгое время считались отличительной
особенностью больших ЭВМ. В мини-и микрокомпьютерах использование специализированных
канальных процессоров, более сложных, чем контроллер ПДП, считалось неприемлемым
по стоимостным показателям. Удивительно, что даже современное радикальное
удешевление оборудования не изменило положения: предложение консорциума
I2O (Intelligent Input/Output) снабжать компьютеры на основе
процессоров х86 канальным процессором Intel 960, с энтузиазмом поддержанное
практически всеми поставщиками операционных систем, почему-то не было
столь же горячо поддержано потребителями.
Потребители мини- и микросистем, нуждающиеся в высокой производительности,
предпочитают использовать в качестве дополнительных процессоров устройства
с той же архитектурой, что и центральный процессор. Это называется симметричной
многопроцессорностью (SMP), и позволяет перераспределять между
процессорами не только обработку событий, но и собственно вычислительную
деятельность. Понятно, что обрабатывать все события по принципу опроса
в такой архитектуре — бессмысленная, а зачастую и нетерпимая расточительность.
К счастью, еще с 60-х годов, практически все процессоры как центральные,
так и канальные, используют стратегию работы с событиями, во многих отношениях
гораздо более совершенную, чем опрос. |