Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Периферийные устройства ПК / Тема 3 (Системные ресурсы ЭВМ).doc
Скачиваний:
41
Добавлен:
02.05.2014
Размер:
278.02 Кб
Скачать

4.2. Синхронизация программ и устройств

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

Возможно и комплексное решение — полинг (polling) — опрос готовности ряда устройств по периодическим прерываниям, например от системного таймера. Устройство, для которого обнаружена готовность, обслуживается, не готовое — пропускается до следующего прерывания. При этом процессор не выполняет многочисленных и возможно бесполезных циклов опроса готовности, а можетзаниматься другими задачами. Так, например, работает утилита фоновой печати PRINT. Она не использует аппаратное прерывание от LPT-порта (хотя могла бы), а работает по таймеру.

4.3. Буферизация данных в устройствах

По ха­рактеру обмена устройства можно разделить на три основных типа.

  • Блочные устройства, например, дисковые накопители. Обмен с ними воз­можен только блоками фиксированного размера — секторами. При обменес физическим диском (например, через контроллер НГМД) нельзя оста­навливаться посреди передачи блока.

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

  • Регистро-ориентированные устройства, которые, как правило, не являют­ся источниками или приемниками большого объема данных. Программам обычно требуется знать текущее состояние данных устройств или (и) фор­мировать текущие управляющие воздействия. Пример регистро-ориентированного устройства — джойстик: программа в определенные моменты опрашивает текущее состояние кнопок и координатных датчиков. Регистро-ориентированными, как правило, являются различные устройства со­пряжения с технологическим оборудованием, компьютеризированные из­мерительные комплексы и т. п.

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

Для развязки поточных данных применяют различные способы буферизации данных внутри устройств или их контроллеров. Буфер представляет собой набор внутренних ячеек памя­ти с определенными правилами доступа как со стороны устройства, так и со сто­роны компьютерного «центра».

Для блочных устройств обычно применяют буфер, минимальный размер ко­торого равен размеру блока. Так, первые устройства IDE/ATAимели буфер512 байт — на один сектор диска. Буфер поначалу был однопортовым: при чте­нии с диска встроенный контроллер сначала заполнял буфер данными сектора, и только после этого данные из буфера могли быть считаны в память компьютеpa. Позже размер буфера увеличили до объема нескольких секторов и стали при­менять двухпортовый буфер, который допускает практически одновременное об­ращение с двух сторон (портов) — со стороны устройства (обмен с носителем) и со стороны интерфейса (обмен по шине АТА). Более хитрый контроллер может использовать кольцевой буфер, продолжая считывание секто­ров с носителя в освободившееся (считанное по внешнему интерфейсу) начало буфера.

Адаптеры локальных сетей тяготеют к блочным устройствам — они передают данные целыми пакетами, которые должны приниматься и посылаться с опреде­ленной скоростью (10, 100 или 1000 Мбит/с для трех поколений Ethernet). Для них объем и организация буфера зависят от скорости среды передачи и произво­дительности интерфейса (шины расширения), к которой они подключены. Максимальный размер пакета (кадра) для Ethernet — около 1,5 Кбайт. Сетевые карты Ethernet на 10 Мбит дли шин ISA/EISA имели буфер по крайней мере на один кадр, а полнодуплексные — на два. Значительно более эффективными были карты с большим объемом буфера (так, карты ЗС509В были гораздо «шустрее», чем ЗС509). Для 100-мегабитных (Fast Ethernet) карт PCI с прямым управлением шиной ока­залось возможным использование всего пары 64-байтных буферов (по одному на прием и передачу, для полного дуплекса). Каждый буфер поделен пополам и половинки чередуются (ping-pong buffer): при приеме пакета из сети сначала заполняется первая половина, затем вторая. Как только первая половина запол­нится, карта запрашивает управление шиной и, как только его получает, выгружает (сама) данные из этой половинки в память. Как только заполнится вторая половина, карта переключится на заполнение первой (уже свободной) и даст следующий запрос на управление для выгрузки второй половины. Однако для карт Gigabit Ethernet этот вариант уже не проходит, и на них устанавливают буферы на полный кадр.

Для потоковых устройств часто применяют буфер с дисциплиной обслужива­ния FIFO (FirstIn—FirstOut, первым вошел — первым вышел). Размер такого буфера, как правило, 16 байт. Он сключается между источником и приемником: с одной стороны он наполняется, с другой в тоже время – опустошается. Такие буферы применяются вCOMиLPT-портах.