Добавлен: 29.10.2018
Просмотров: 48132
Скачиваний: 190
5.1. Основы аппаратного обеспечения ввода-вывода
381
5.1.1. Устройства ввода-вывода
Устройства ввода-вывода можно условно разделить на две категории: блочные устрой-
ства
и символьные устройства. К блочным относятся такие устройства, которые хранят
информацию в блоках фиксированной длины, у каждого из которых есть собственный
адрес. Обычно размеры блоков варьируются от 512 до 65 536 байт. Вся передача дан-
ных ведется пакетами из одного или нескольких целых (последовательных) блоков.
Важным свойством блочного устройства является то, что оно способно читать или
записывать каждый блок независимо от всех других блоков. Среди наиболее рас-
пространенных блочных устройств жесткие диски, приводы Blu-ray-дисков и флеш-
накопители USB.
Если приглядеться, то граница между устройствами с адресуемыми блоками и устрой-
ствами, не обладающими таким свойством, не имеет четкого определения. Каждый
согласен, что диск является устройством с адресуемыми блоками, поскольку, где бы
в данный момент ни находился блок головок, всегда есть возможность переместиться
к другому цилиндру, а затем дождаться, пока нужный блок не подойдет под головку.
Теперь рассмотрим устаревающий накопитель на магнитной ленте, иногда все еще
используемый для создания резервной копии диска (по причине дешивизны ленты).
Ленты содержат последовательность блоков. Если накопитель получает команду счи-
тать блок N, он всегда может перемотать ленту назад и запустить рабочий ход вперед
до тех пор, пока не доберется до блока N. Эта операция аналогична операции позицио-
нирования головок на нужную дорожку на диске, за исключением того, что на нее
затрачивается гораздо больше времени. Также накопитель может иметь, а может и не
иметь возможность переписать один блок в середине ленты. Даже если имеется воз-
можность использовать накопители на магнитной ленте в качестве блочных устройств
произвольного доступа, считать их таковыми будет некоторым преувеличением: как
правило, они в этом качестве не используются.
Другой тип устройств ввода-вывода — символьные устройства. Они выдают или вос-
принимают поток символов, не относящийся ни к какой блочной структуре. Они не
являются адресуемыми и не имеют никакой операции позиционирования. В качестве
символьных устройств могут рассматриваться принтеры, сетевые интерфейсы, мыши
(в качестве устройства-указателя), крысы (для лабораторных исследований по психо-
логии) и множество других устройств, не похожих на дисковые устройства.
Эта классификационная схема далека от совершенства. Некоторые устройства под
нее не подпадают. Часы, к примеру, не являются блочно адресуемыми. Они также не
генерируют и не воспринимают символьные строки. Все, чем они занимаются, — вы-
зывают прерывания через четко определенные интервалы времени. Экраны, имеющие
отображение в памяти, также не вписываются в эту модель. По этой же причине под
нее не подпадают и сенсорные экраны. Тем не менее модель блочных и символьных
устройств является достаточно общей для того, чтобы использовать ее в качестве
основы для придания части программного обеспечения операционной системы неза-
висимости от устройства ввода-вывода. Файловая система, к примеру, работает только
с абстрактными блочными устройствами, а зависимую от конкретного устройства часть
оставляет на долю программного обеспечения низкого уровня.
Устройства ввода-вывода охватывают огромный диапазон скоростей, создающих не-
малые трудности для программного обеспечения, которому приходится обеспечивать
хорошую производительность на скоростях передачи данных, различающихся на не-
382
Глава 5. Ввод и вывод информации
сколько порядков. В табл. 5.1 приведены скорости передачи данных некоторых наи-
более распространенных устройств. Для многих из этих устройств наблюдается тен-
денция к росту скорости обмена данными при появлении со временем новых моделей.
Таблица 5.1. Скорости передачи данных некоторых наиболее распространенных
устройств
Устройство
Скорость обмена данными
Клавиатура
10 байт/с
Мышь
100 байт/с
Модем 56 К
7 Кбайт/с
Сканер с разрешением 300 dpi
1 Мбайт/с
Цифровая камера
3,5 Мбайт/с
Blu-ray-диск 4x
18 Мбайт/с
Беспроводная сеть стандарта 802.11n
37,5 Мбайт/с
USB 2.0
60 Мбайт/с
FireWire 800
100 Мбайт/с
Сеть стандарта Gigabit Ethernet
125 Мбайт/с
Диск SATA 3
600 Мбайт/с
USB 3.0
625 Мбайт/с
Диск SCSI Ultra 5
640 Мбайт/с
Одна дорожка шины PCIe 3.0
985 Мбайт/с
Шина Thunderbolt 2
2,5 Гбайт/с
Сеть SONET OC-768
5 Гбайт/с
5.1.2. Контроллеры устройств
Устройства ввода-вывода зачастую состоят из механической и электронной составля-
ющих. Зачастую эти две составляющие удается разделить, чтобы получить модульную
конструкцию и придать устройству более общий вид. Электронный компонент на-
зывается контроллером устройства, или адаптером. На персональных компьютерах
он часто присутствует в виде микросхемы на системной плате или печатной платы,
вставляемой в слот расширения (PCIe). Механический компонент представлен самим
устройством. Именно такой порядок показан на рис. 1.6.
На плате контроллера обычно имеется разъем, к которому может быть подключен кабель,
ведущий непосредственно к самому устройству. Многие контроллеры способны управ-
лять двумя, четырьмя или даже восемью одинаковыми устройствами. Если интерфейс
между контроллером и устройством подпадает под какой-нибудь стандарт, будь то один
из официальных стандартов ANSI, IEEE или ISO или же один из ставших де-факто
стандартов, то компании могут производить контроллеры или устройства, соответству-
ющие этому интерфейсу. К примеру, многие компании производят дисковые приводы,
соответствующие интерфейсу SATA, SCSI, USB, Thunderbolt или FireWire (IEEE 1394).
Интерфейс между контроллером и устройством зачастую относится к интерфейсу
очень низкого уровня. Например, какой-нибудь жесткий диск может быть отформа-
5.1. Основы аппаратного обеспечения ввода-вывода
383
тирован на 2 000 000 секторов на дорожку с размером сектора 512 байт. Но на самом
деле с привода поступает последовательный поток битов, начинающийся с заголовка
сектора
(преамбулы), затем следуют 4096 бит, имеющиеся в секторе, и в завершение
следует контрольная сумма, также называемая кодом коррекции ошибок (Errorr
Correcting Code (ECC)). Заголовок сектора записывается на диск во время форматиро-
вания и содержит номера цилиндра и сектора, размер сектора и тому подобные данные,
а также информацию о синхронизации.
Задача контроллера состоит в преобразовании последовательного потока битов в блок
байтов и коррекции ошибок в случае необходимости. Блок байтов обычно проходит
первоначальную побитовую сборку в буфере, входящем в состав контроллера. После
проверки контрольной суммы блока и объявления его не содержащим ошибок он может
быть скопирован в оперативную память.
Контроллер монитора на базе жидкокристаллического дисплея также работает как
побитовое последовательное устройство на таком же низком уровне. Он считывает
байты, содержащие символы, которые должны быть отображены из памяти, и ге-
нерирует сигналы, используемые для изменения поляризации подсветки соответ-
ствующих пикселов для записи их на экране. Если бы контроллер дисплея этим не
занимался, то программисту операционной системы пришлось бы явным образом
программировать электрические поля всех пикселов. При наличии контроллера
операционная система инициализирует его с помощью нескольких параметров, среди
которых количество символов или пикселов в строке и количество строк на экране,
а заботу об управлении электрическими полями возлагает на контроллер. В самое
ближайшее время жидкокристаллические экраны полностью заменят старые мо-
ниторы на основе электронно-лучевой трубки (ЭЛТ). Электронно-лучевая трубка
испускает электронный луч на флюоресцентный экран. С помощью магнитных по-
лей система способна икривлять луч и рисовать пикселы на экране. По сравнению
с жидкокристаллическими экранами электронно-лучевые мониторы очень громозд-
кие, потребляющие много энергии и хрупкие. Более того, разрешение современных
жидкокристаллических дисплеев (с технологией Retina) настолько высоко, что
человеческий глаз не в состоянии различить отдельные пикселы. Сегодня трудно
представить, что в прошлом ноутбуки поставлялись с небольшими ЭЛТ-экранами,
из-за которых они имели глубину 20 см и вполне подходящий для физических тре-
нировок вес, составлявший 12 кг.
5.1.3. Ввод-вывод, отображаемый на пространство памяти
У каждого контроллера для связи с центральным процессором имеется несколько
регистров. Путем записи в эти регистры операционная система может давать устрой-
ству команды на предоставление данных, принятие данных, включение, выключение
или выполнение каких-нибудь других действий. Считывая данные из этих регистров,
операционная система может узнать о текущем состоянии устройства, о том, готово ли
оно принять новую команду, и т. д.
В дополнение к регистрам управления у многих устройств имеется буфер данных, из
которого операционная система может считывать данные и в который она может их за-
писывать. Например, наиболее распространенный способ отображения компьютерами
пикселов на экране предусматривает наличие видеопамяти, которая по сути является
буфером данных, куда программы или операционная система могут вести запись.
384
Глава 5. Ввод и вывод информации
Но тут возникает вопрос: как центральный процессор обменивается данными с реги-
страми управления и буферами данных устройств? Есть два альтернативных варианта.
В первом из них каждому регистру управления назначается номер порта ввода-вывода,
являющийся 8- или 16-разрядным целым числом
1
. Набор всех портов ввода-вывода
формирует пространство портов ввода-вывода, которое защищено от доступа со сто-
роны обычных пользовательских программ (доступ к нему имеет только операционная
система). Используя специальные команды ввода-вывода, например
IN REG,PORT
центральный процессор может считать данные из регистра управления PORT и со-
хранить полученный результат в своем регистре REG. Аналогично этому, используя
команду
OUT PORT,REG
центральный процессор может записать содержимое своего регистра REG в регистр
управления PORT. Многие компьютеры первых поколений, включая практически все
универсальные компьютеры, такие как IBM 360 и все его преемники, работали именно
таким образом.
На рис. 5.1, а показано, что при использовании этой схемы для оперативной памяти
и для ввода-вывода используются совершенно разные адресные пространства. При
такой конструкции команды
IN R0,4
и
MOV R0,4
полностью отличаются друг от друга. Первая команда читает содержимое порта вво-
да-вывода 4 и помещает его в регистр R0, а вторая команда читает содержимое слова
памяти 4 и помещает его в тот же регистр R0. Таким образом, четверки в этих примерах
ссылаются на различные не связанные друг с другом адресные пространства.
Рис. 5.1. а — отдельные пространства ввода-вывода и памяти; б — ввод-вывод, отображаемый
на пространство памяти; в — гибридный вариант
1
Теоретически разрядность числа, обозначающего номер порта ввода-вывода, может быть
и иной, что определяется архитектурой конкретной ЭВМ. — Примеч. ред.
5.1. Основы аппаратного обеспечения ввода-вывода
385
Второй вариант, появившийся на машинах PDP-11, предусматривает отображение всех
регистров управления на пространство памяти (рис. 5.1, б). Каждому регистру управ-
ления выделен уникальный адрес в памяти, который не распределяется в оперативной
памяти. Эта система называется отображаемым на адресное пространство памяти
вводом-выводом
. В большинстве систем выделяемые адреса находятся в верхней части
адресного пространства или возле нее. На рис. 5.1, в показан также гибридный вариант,
в котором имеются буферы данных ввода-вывода, отображаемые на пространство па-
мяти, и отдельные порты ввода-вывода для регистров управления. Такая архитектура
используется в семействе машин x86, у которых по аналогии с IBM PC адресное про-
странство оперативной памяти от 640 K до 1 M – 1 зарезервировано для буферов данных
различных устройств вдобавок к портам ввода-вывода, имеющим номера от 0 до 64 K – 1.
Как же работают все эти схемы? Как только центральному процессору необходимо
считать слово либо из памяти, либо из порта ввода-вывода, он выставляет нужный ему
адрес на адресных линиях шины, а затем выставляет сигнал READ на линии управления
шины. Для сообщения о том, какое именно пространство ему нужно, ввода-вывода или
памяти, используется другая сигнальная линия. Если нужно пространство памяти, то
на запрос отвечает память, если же нужно пространство ввода-вывода, то на запрос
отвечает устройство ввода-вывода. Если имеется только пространство памяти (как на
рис. 5.1, б), то каждый модуль памяти и каждое устройство ввода-вывода сравнивают
адрес, выставленный на адресной линии с диапазоном обслуживаемых ими адресов.
Если адрес попадает в его диапазон, то этот модуль или это устройство отвечает на
запрос. Поскольку адресов, выделенных одновременно и памяти, и устройству ввода-
вывода, не существует, то никаких недоразумений и конфликтов не возникает.
Эти две схемы обращения к контроллерам имеют свои достоинства и недостатки. Нач-
нем с достоинств ввода-вывода, отображаемого на пространство памяти. Во-первых,
если для операций чтения и записи в регистры управления устройств требуются специ-
альные команды ввода-вывода, для доступа к этим командам требуется ассемблерный
код, поскольку в С или С++ не существует способов непосредственного выполнения
команд IN и OUT, только с применением вставок на ассемблере или с использовани-
ем написанных на ассемблере подпрограмм, что влечет дополнительные накладные
расходы. При использовании же ввода-вывода, отображаемого на память, регистры
управления внешними устройствами могут рассматриваться как обычные переменные
в памяти, что позволяет написать драйвер соответствующего устройства полностью на
языке C. Когда не используется ввод-вывод, отображаемый на пространство памяти,
возникает необходимость использования кода на ассемблере.
Во-вторых, при использовании ввода-вывода, отображаемого на пространство памяти,
отпадает необходимость в специальном механизме защиты от осуществления ввода-
вывода со стороны пользовательских процессов. Операционной системе нужно лишь
воздержаться от помещения той части адресного пространства, в которой содержатся
регистры управления, в какие-либо виртуальные адресные пространства пользовате-
лей. Еще лучше, если у каждого устройства его регистры управления будут находиться
на отдельной странице адресного пространства — тогда операционная система может
предоставить одному пользователю в отличие от других пользователей возможность
управления определенными устройствами, просто включив нужные страницы в его
таблицу страниц. Такая схема может позволить различным драйверам устройств разме-
щаться в разных адресных пространствах памяти, не только сокращая при этом размер
пространства ядра, но и оберегая один драйвер от помех со стороны других драйверов.