Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
XII. Организация ввода-вывода.doc
Скачиваний:
31
Добавлен:
27.03.2015
Размер:
100.86 Кб
Скачать

XII. Принципы организации в компьютерах

ВВОДА/ВЫВОДА ИНФОРМАЦИИ.

1. Общие положения

Напомним, что в самом общем виде компьютер можно представить в виде трех основных функциональных частей.

  • Центральный процессор ЦП.

  • Основная электронная память ОП.

  • Периферийные устройства ПУ.

Совокупность ЦП и ОЗУ часто называют ядром компьютера.

Центральный процессор осуществляет реализацию операций обработки и пересылки информации, предусмотренные системой команд компьютера, а также общее управление компьютером в целом.

Основная электронная память предназначена для оперативного хранения информации в компьютере: ядра операционной системы, основных утилит, задач прикладного программного обеспечения, а также для долговременного хранения BIOS, тестовых процедур и некоторых таблиц и констант.

Периферийные устройства представляют собой совокупность устройств, предназначенных для хранения, ввода и вывода больших объемов информации, формируемые или используемые внешними по отношению к ядру компьютера объектами.

Связь между этими основными устройствами компьютера, обеспечивающая их эффективное взаимодействие и, в конечном счете, нормальную работу компьютера в целом, осуществляется с помощью, так называемых интерфейсных устройств.

Под интерфейсом (Interface) понимается совокупность аппаратных и программных средств, обеспечивающих эффективную связь между двумя или несколькими блокам или устройствами, и объединяющую их в некоторую систему.

Строго говоря, любой, достаточно сложный, интерфейс стандартизируется и, в целом, должен рассматриваться на трех уровнях.

  • Механический интерфейс (провода, элементы связи, типы соединений, разъемы, номера контактов и т. п.).

  • Электрический интерфейс (схемы соединений, типы сигналов, их длительность, полярности, периоды повторения, амплитудные значения и т. п.).

  • Программный интерфейс (протоколы взаимодействия, процедуры драйверов и т.д.).

В этом разделе мы кратко коснемся только общих принципов организации интерфейса с устройствами ввода/вывода информации в компьютер, на простейшем уровне блок-схем соединений и общих понятий протоколов взаимодействий.

В процессе работы компьютера, между процессором, основной электронной памятью и периферийными устройствами происходит непрерывный обмен информацией. При этом основной поток осуществляется между ЦП и ОП, а также между ОП и ПУ. Последний может происходить как через ЦП, так и непосредственно.

Связь ЦП с ОП регулярна, стандартна и в большой степени унифицирована. Это объясняется тем, что модули памяти выпускаются в виде нескольких основных типов, обладающих близкими скоростями, и требующих для своей работы достаточно простых сигналов управления. Кроме того, информация, передаваемая в основную память, никуда далее не отсылается, модули памяти сохраняют свое содержимое, и у центрального процессора нет необходимости выбирать данные из памяти или записывать их туда в моменты времени, которые определяла бы память, а не сам процессор.

Связь же ЦП или ОП с ПУ весьма нестандартна и, как правило, достаточно сложна. Информация, передаваемая в порт ввода/вывода, в нем не задерживается и обычно сразу же передается какому-нибудь устройству, подсоединенному к этому порту. Последовательно считывая информацию из одного и того же порта, вы чаще всего будете получать совершенно новые данные, и даже последовательность переданных и считанных байт может не сохраняться.

Кроме того, большие проблемы, при обмене информации между ЦП и ПУ, возникают и по следующим причинам.

- Большое разнообразие периферийных устройств. Это могут быть внешние магнитные и оптические запоминающие устройства, клавиатура, АЦП, ЦАП, кодировщики, дисплеи, фотосчитыватели, графопостроители, объекты контроля технологических процессов, объекты научного и производственного эксперимента и т.п.

- Огромный диапазон скоростей обмена информацией. Скорости обмена информацией могут изменяться от минут, в случае, например, температурных первичных преобразователей с АЦП в системах контроля; секунд и миллисекунд, в случае использования в качестве ПУ телетайпов и фотосчитывателей; и до микросекунд, при обмене информацией с магнитными дисками. А при обслуживании компьютером целого ряда физических экспериментов, например, в ядерной физике, время ввода данных может измеряться уже наносекундами. И, при этом, сам обмен информацией может быть как синхронный, так и асинхронный.

- Большое разнообразие типов и уровней сигналов обмена. Кроме того, эта информация может быть представлена в самом различном виде, (символьная кодированная информация, графические данные, аналоговые электрические сигналы и т.д.)

- Сложность структуры сигналов обмена. Обмен информацией с ПУ может осуществляться параллельными словами или байтами (параллельный интерфейс), как, например, в целом ряде случаев обмена информацией с системами управления производственными процессами или научного эксперимента. Последовательными кодами, например, при обмене информацией с жесткими (HDD) или гибкими (FDD) магнитными дисками, с клавиатурой, мышью или другими устройствами, подключаемыми через шины USB, Fire Wire. А то и параллельно-последовательными кодами, как бывает в случае обмена информацией с накопителями на магнитной ленте (Streamer).

Поэтому организация каждого ПУ и его связь с компьютером может порождать уникальную проблему.

В современных компьютерах используются три основных принципа организации ввода/вывода информации между ядром компьютера и ПУ.

  • Программно-управляемый ввод/вывод с активным ожиданием.

  • Ввод/вывод с управлением по прерываниям.

  • Ввод/вывод с прямым доступом к памяти.

  1. Программно-управляемый ввод/вывод с активным ожиданием.

Программно-управляемый ввод/вывод с активным ожиданием является самым простым и исторически самым первым методом ввода и вывода информации от внешних устройств.

При программно-управляемом вводе/выводе с активным ожиданием ввод и вывод информации в компьютере осуществляется по специальным командам ввода (IN) и вывода (OUT) c адресацией специальных регистров в периферийных устройствах. Прямая адресация с помощью этих команд позволяет адресовать не более 256 объектов, в связи с тем, что при прямой адресации под адрес выделен 1 байт кода команды. При необходимости увеличения адресного пространства периферийных устройств прибегают к косвенной адресации через регистр DX. В этом случае, адресное пространство ввода/вывода расширяется до 65536 адресов. Отметим, что одно периферийное устройство, как правило, использует несколько портов (адресов) ввода/вывода. А иногда их количество может достигать нескольких десятков. Поэтому дополнительно вводится понятие базового адреса данного периферийного устройства, который является младшим адресом группы портов, принадлежащих этому периферийному устройству (обычно адресу порта регистра данных). Это облегчает процесс программирования, поскольку адреса других портов этого устройства осуществляется путем задания смещения (целое число) относительно базового адреса.

Заметим, что в ряде компьютеров (например, в компьютерах «Macintosh», использующих микропроцессоры фирмы Motorola), не предусматривается отдельного адресного пространства периферийных устройств и, следовательно, их система команд не имеет специальных команд ввода/вывода. Обращение же к регистрам ПУ осуществляется обычными командами пересылки MOV. Таким образом, адреса этих регистров являются частью общего адресного пространства компьютера. Этот способ часто называют «распространением адресов ввода/вывода на память». Он делает адресацию устройств ввода/вывода более гибкой, поскольку позволяет использовать все возможные разновидности адресации: базовой, индексной, базово-индексной и базово-индексной со смещением. Однако, с другой стороны, такие команды обращения к внешним устройствам будут сложнее, и выполняться дольше, чем команды IN и OUT, при которых адреса ПУ образуют отдельное адресное пространство

Рассмотрим пример обращения к двум типам периферийных устройств, клавиатуре и дисплею, как простейшим устройствами с которыми связывается процессор в процессе своего функционирования (см. рис XIII.1). Вначале рассмотрим работу регистров клавиатуры.

Как только клавиатура, после нажатия пользователем клавиши, сформирует и занесет очередной код символа в свой буферный регистр данных, аппаратно (автоматически) заносится единица в бит регистра состояния клавиатуры, оповещающий о наличии символа в ее регистре данных.

Рис. XIII.1 Регистры устройств ввода/вывода простейшего терминала.

При выполнении команды IN, процессор обращается к адресуемому в команде регистру состояния и считывает этот бит наличия символа. Если этот бит равен 0, процессор зацикливается, и непрерывно опрашивает регистр состояния клавиатуры до тех пор, пока там не появится 1. После появления 1 в этом бите, процессор считывает байт символа с регистра данных клавиатуры, одновременно сбрасывая бит наличия символа в регистре состояния в 0.

Вывод информации на дисплей осуществляется аналогичным образом. Чтобы вывести символ на экран, программное обеспечение при появлении команды OUT, сначала считывает содержимое регистра состояния дисплея, чтобы узнать, установлен ли бит готовности в 1. Если он не установлен, программное обеспечение осуществляет цикл считывания снова и снова до тех пор, пока данный бит не примет значение 1. Это означает, что дисплей готов принять сигнал. Как только дисплей придет в состояние готовности, программное обеспечение заносит символ в буферный регистр данных дисплея, который переносит символ на экран и дает сигнал устройству сбросить бит готовности в регистре состояния в нулевое состояние. Когда символ уже отображен на экране, а устройство управления дисплея готово к обработке следующего символа, бит готовности снова устанавливается в состояние 1.

Основным недостатком программно-управляемого ввода/вывода с активным ожиданием является то, что процессор проводит большую часть времени в цикле опроса регистров состояния, ожидая готовности периферийного устройства к обмену информацией. Если процессору в это время все равно нечего делать, например, при управлении стиральными машинами, в этом ничего страшного нет (хотя и простейшему микрокомпьютеру часто нужно контролировать несколько параллельных процессов). Но если процессор управляет более сложными процессами, он во время активного ожидания готовности периферийных устройств мог бы эффективно выполнять в фоновом режиме и другие задачи. Поэтому, в большинстве практических случаев требуется использовать какие-то другие методы осуществления обмена информацией с периферийными устройствами.

Разновидностью программно-управляемого ввода/вывода является ввод/вывод с использованием цепочечных команд, или блочный ввод/вывод. Этот способ используется в случаях ввода или вывода цепочек данных, которые часто называют строками символов. Разница в этих названиях заключается только в том, что под строкой понимается обычно строка байт (поскольку каждый символ кодируется одним байтом). В то же время, в понятие цепочки данных включаются как последовательность символов, так и последовательность слов или даже двойных слов. При этом, байты, слова и двойные слова, которые составляют цепочку, называют элементами цепочки.

Рассматриваемый метод ввода/вывода данных основан на том, что любой однородный массив данных может быть представлен в виде цепочки соответствующих элементов. Естественно, что буферный регистр данных периферийного устройства, по своей емкости, должен всегда соответствовать размеру элемента цепочки (т.е. быть 8-ми, 16-ти или 32 разрядным). Командами, которые используются при блочном вводе/выводе, являются соответственно команды INS (IN String): - INSB, INSW, INSD, и команды OUTS (OUT String): - OUTSB, OUTSW, OUTSD, применяемые с соответствующими префиксами повторения REP. В случае необходимости переопределения сегмента источника при выводе, следует использовать полный формат цепочечных команд с операндами, т.е. OUTS DX, r/m.

Особенностями применения этих команд для ввода/вывода данных является то, что перед их исполнением в программе должно быть предусмотрено занесение в соответствующие регистры следующей предварительной информации:

- длина цепочки, (количество байт, слов или двойных слов в массиве данных, подлежащих передаче);

- место ее занесения в память компьютера (или извлечения из памяти), т.е. начальный адрес размещения цепочки;

- направление считывания (или занесения) элементов цепочки в процессе передачи (от элементов с младшими адресами к старшим, или наоборот);

- номер порта, откуда (или куда) передаются данные.

Длина цепочки (число ее элементов) заносится в регистр-счетчик процессора (CX). Номер порта заносится в регистр DX. Направление считывания (или занесения) элементов цепочки в память определяется состоянием флага DF в регистре флагов Flags. При этом, сброс этого флага в 0 командой CLD, определяет передачу начиная от элементов с младшими адресами в сторону увеличения адресов элементов, а установка этого флага в состояние 1 командой STD, определяет передачу в направление от элементов со старшими адресами к младшим.

Начальный адрес размещения массива данных при вводе задается содержимым регистра DI (EDI), при этом он будет передаваться обязательно в сегмент ES. Выводимая цепочка данных, по умолчанию, должна находиться в сегменте DS. Начальный адрес передаваемой цепочки при этом задается содержимым регистра SI (ESI). Однако выводимая цепочка данных может находиться и в другом сегменте, но для этого сегмент выводимой цепочки должен быть переопределен соответствующим префиксом переопределения.

Особенностью работы цепочечных команд является то, что они автоматически выполняют приращение (инкремент) или уменьшение (декремент) содержимого регистров SI (ESI) и DI (EDI) в зависимости от используемой цепочечной команды. При цепочках байт, изменение этих регистров происходит на 1, при цепочках слов – на 2, а при цепочках двойных слов – на 4. Инкремент регистров происходит при флаге DF = 0, а декремент – при флаге DF = 1.

При блочном программно-управляемом вводе/выводе с помощью цепочечных команд скорость передачи информации в пределах одной цепочки получается максимальной из всех возможных.

Однако, зацикливание процессора при опросе битов разрешения в регистрах состояния периферийных устройств, и при методе ввода/вывода данных с помощью организации цепочек, все равно имеет место.

От этого зацикливания можно избавиться путем организации ввода/вывода с помощью системы прерывания.