Буферизация данных

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

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

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

■ очередной сектор целиком заносится в буфер;

■ схемы контроля сообщают об отсутствии или наличии ошибок;

■ при отсутствии ошибок контроллер диска выдает данные этого сектора на внешний интерфейс и одновременно продолжает считывание следующего сектора в оставшуюся часть буфера.

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

Адаптеры локальных сетей передают данные целыми пакетами, которые должны приниматься и посылаться с определенной скоростью (10, 100 или 1000 Мбит/с для трех поколений Ethernet). Объем памяти и организация буфера зависят от скорости среды передачи и производительности шины расширения, к которой они подключены.

Двухпортовый буфер поделен пополам с чередованием работы каждой половины (Ping-Pong Buffer). При приеме пакета из сети сначала заполняется первая половина, затем – вторая.

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

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

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

Буфер с организацией обслуживания FIFO (First In – First Out, первым вошел – первым вышел) часто применяют для потоковых устройств. Буфер ставится между процессором и устройством и обладает небольшой емкостью памяти. С одной стороны он наполняется, с противоположной – опустошается. Извлекать данные из буфера можно после того, как он хотя бы частично заполнен. Попытка извлечения данных из пустого буфера является ошибкой опустошения (Underflow), попытка помещения данных в заполненный буфер – ошибкой переполнения (Overflow). Логика буфера следит за степенью наполненности буфера и сообщает процессору о критических ситуациях с помощью прерываний.

У двунаправленных устройств, как правило, имеется два FIFO- буфера. Буферы FIFO применяются в контроллерах накопителей, в СОМ-портах, LPT-портах и ряде других потоковых узлов компьютера.

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

 
< Пред   СОДЕРЖАНИЕ     След >