Буферизация данных в устройствах
Каждое периферийное устройство имеет свою специфику характера обмена данными, определяемую природой его внешней (по отношению к компьютеру) стороны. По характеру обмена устройства можно разделить на три основных типа.
блочные устройства, например, дисковые накопители. Обмен с ними возможен только блоками фиксированного размера — кластерами. При обмене с физическим диском нельзя останавливаться посреди передачи блока.
поточные устройства, примерами которых являются принтеры и сканеры Принтеру посылают поток данных, которые он по мере своих электромеханических способностей выводит в виде изображения на бумагу. Поток можно приостановить в любой момент, а затем продолжить передачу безо всяких побочных эффектов.
регистро-ориентированные устройства, которые, как правило, не являются источниками или приемниками большого объема данных. Программам обычно требуется знать текущее состояние данных устройств или (и) формировать текущие управляющие воздействия. Регистро-ориентированными, как правило, являются различные устройства сопряжения с технологическим оборудованием, компьютеризированные измерительные комплексы, джойстик (программа в определенные моменты опрашивает текущее состояние кнопок и координатных датчиков) и т. п.
Во многих устройствах присутствует смесь этих основных типов, так, даже принтер имеет и регистро-ориентированную часть — кроме приема потока oн передает сигналы текущего состояния (ошибка, конец бумаги).
Весьма важной является задача буферизации данных. Пропускная способность внутренних компонентов современной вычислительной системы — процессора и оперативной памяти — чрезвычайно высока в обоих направлениях (и на прием, и на передачу), а пропускная способность подавляющего большинства внешних устройств на несколько порядков ниже и варьируется в весьма широких пределах. Данные, передаваемые из оперативной памяти на внешнее устройство, поступают с очень высокой скоростью, как правило, в виде пакета. Эти данные целесообразно сохранить во внутреннем буфере контроллера интерфейса и в дальнейшем соответствующими порциями выдать во внешнее устройство. При передаче в обратном направлении данные от внешнего устройства опять-таки целесообразно накопить в буфере контроллера интерфейса, чтобы не «дергать» оперативную память "по мелочам". Когда накоплен значительный объем данных, они все одним пакетом могут быть быстро переданы в оперативную память. Таким образом, для обеспечения минимального времени обладания интерфейсом (а значит и ресурсами оперативной памяти) контроллер соответствующего интерфейса должен работать с использованием буферов.
Буфер представляет собой набор внутренних ячеек оперативной памяти с определенными правилами доступа как со стороны контроллера ПУ, так и со стороны «центра». Размер буфера и дисциплина его обслуживание выбираются, исходя из технических (скорость и объем информации, допустимые задержки) и экономических (цена) соображений.
Для блочных устройств обычно применяют буфер, минимальный размер которого равен размеру блока.
Контроллеры локальных сетей тяготеют к блочным устройствам — они передают данные целыми пакетами, которые должны приниматься и посылаться с определенной скоростью (100М бит/с, 1000М бит/с, 10Г бит/с - для первых трех поколений Ethernet). Для них объем, и организация буфера зависят от скорости среды передачи и производительности интерфейса, к которому они подключены.
Для потоковых устройств часто применяют буфер с дисциплиной обслуживания FIFO (First In — First Out, первым вошел — первым вышел). Размер такого буфера, как правило, невелик (например, 16, 64 байт). Буфер ставится между «центром» и устройством, с одной стороны он наполняется, с другой — опорожняется. Опорожняющая сторона может извлекать данные из буфера, лишь, когда наполняющая сторона их туда положит. Попытка извлечения данных из пустого буфера является ошибкой опустошения (underflow), попытка помещения в заполненный буфер — ошибкой переполнения (overflow). Логика буфера следит за степенью наполнения буфера и сообщает «центру» о критических ситуациях. Когда «центр» (программа, исполняемая процессором) выводит данные через FIFO, логика следит за снижением наполнения буфера ниже порога опустошения и в случае такового сигнализирует (обычно прерыванием) о необходимости вывода следующей порции данных. Логика также препятствует переполнению, отвергая попытки записи лишних данных и немедленно сообщая об ошибке (обычно через соответствующий программно-читаемый бит состояния). При вводе данных через буфер FIFO его логика следит за наличием свободного места в буфере и при превышении порога заполнения также сигнализирует прерыванием. Аналогично, она не позволяет считать данные из пустого буфера и сообщает об этом соответствующим битом. Также логика буфера должна позволять его очищать по инициативе процессора, сообщать о количестве (или хотя бы о наличии) данных в буфере по запросу процессора. Управляемость порогов позволяет программе в зависимости от внешнего темпа обмена данными, возможностей и текущей загруженности компьютера выбрать оптимальный режим обмена, позволяющий и не «суетиться по мелочам», и не допускать переполненный/опустошений буфера. У двунаправленных устройств, как правило, имеется пара FIFO-буферов (для полного дуплекса), для симплексных устройств достаточно одного.
Буферы современных устройств внешней памяти имеют более сложную организацию, обеспечивающую кэширование данных; однако и они используют вышеописанные принципы организации. Однопортовые буферы большого объема, как уже говорилось, могут вносить заметную задержку. Для потоковых применений (например, для воспроизведения мультимедийных файлов) эта задержка обычно не очень существенна и на производительность не влияет. Однако для приложений «петлеобразного» характера, когда буфер оказывается в цепочке запрос-ответ, его задержка может приводить к снижению производительности. Так, например, передача данных по сети обычно представляет собой последовательность кадров данных, на каждый из которых передающая сторона ожидает кадр подтверждения. Если каждый кадр будет «просиживать» в буфере, естественно, производительность снизится. От этой беды спасает метод «скользящего окна», при котором передающая сторона допускает некоторое отставание приема подтверждений.
Контрольные вопросы
1. Назовите основные функции подсистемы ввода-вывода
2. Назовите основные подсистемы периферийного устройства
3. Охарактеризуйте диапазоны изменения пропускной способности периферийных устройств
4. Дайте определение интерфейса ввода-вывода
5. Сколько интерфейсов должно быть в подсистеме ввода-вывода?
6. Какие существуют типы интерфейсов ввода-вывода?
7. Назовите основные принципы параллельной передачи информации
8. Назовите основные принципы последовательной передачи информации
9. В чем состоят различия между радиальными и магистральными каналами связи?
10. Каковы варианты конструктивной реализации периферийного устройства?
11. Адресация периферийных устройств
12. Каковы функции контроллера периферийного устройства?
Дата добавления: 2015-09-29; просмотров: 3027;