- •Системные ресурсы эвм
- •Программно-аппаратные ресурсы пк
- •Внутренние ресурсы системы
- •Распределение памяти
- •Стандартная память — Conventional Memory (640 к)
- •Верхняя память — uma
- •Пространство ввода-вывода
- •Взаимодействие программ с периферийными устройствами
- •4.1. Методы передачи данных
- •4.2. Синхронизация программ и устройств
- •4.3. Буферизация данных в устройствах
- •4.4. Распределение системных ресурсов
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-портах.