Принципы организации обмена с внешними устройствами компьютера (программно-управляемый ввод/вывод и DMA).
Принципы организации обмена с внешними устройствами компьютера (программно-управляемый ввод/вывод и DMA).
Внешние устройства подключаются к системному интерфейсу через специальные устройства — контроллеры (адаптеры). Каждый контроллер имеет в своем составе ряд программно-доступных регистров (как минимум имеет хотя бы регистр данных, регистр состояния и регистр управления).
Каждый контроллер имеет свой набор команд. Получив, через свои регистры, команду от выполняющего программу ввода-вывода процессора, контроллер отрабатывает команду автономно, управляя внешним устройством через «малый» интерфейс между устройством и контроллером. Контроллер, отрабатывая принятую от процессора команду, пересылает во внешнее устройство свои команды, данные, и читает из устройства состояния. Кроме того, контроллер может выполнять ряд вспомогательных аппаратных функций, инициируемых аппаратными сигналами, или записью управляющей информации в его программно-доступный регистр (например, «сброс» по сигналу RESET, или включение процесса самодиагностики жесткого диска). Существуют простые контроллеры и более сложные (интеллектуальные) контроллеры, выполняющие более сложные аппаратные функции и команды.
Процессор управляет внешним устройством, выполняя соответствующую программу ввода/вывода, где он с помощью команд IN, OUT (чтение порта, запись в порт) осуществляет доступ к программно-доступным регистрам контроллера. Например, в регистр управления процессор записывает команду, из регистра состояния читает информацию о состоянии устройства и контроллера, в регистр данных записывает выводимые на устройство данные, или читает из регистра данных считываемую с устройства информацию.
Возможны два способа организации программного обмена с внешними устройствами:
1) Обмен с опросом готовности устройства.
Выполняя программу ввода-вывода, процессор, запустив в контроллере операцию, циклически читает регистр состояния контроллера, ожидая появления в соответствующем разряде регистра состояния признака готовности к обмену данными с процессором. При появлении этого признака в регистре состояния, процессор осуществляет обмен через регистр данных, с помощью команды OUT, осуществляет запись в регистр данных (при выводе на устройство), или выполняет чтение информации из регистра данных контроллера с помощью команды IN (при вводе с устройства). После чего запускает в контроллере следующую операцию и т. д.;
2) Обмен по запросам на обслуживание устройства (запросам на маскируемое прерывание).
При выполнении программы ввода-вывода, процессор, запустив на контроллере операцию продолжает выполнять другую полезную программу. Контроллер внешнего устройства, в случае полной готовности к обмену данными с процессором, выдает на соответствующую линию IRQ сигнал запроса на обслуживание (запрос на маскируемое прерывание). Процессор, через выполнение процедуры прерывания по сигналу IRQ, переходит на выполнение программы ввода/вывода для данного устройства. Эта программа осуществляет обмен данными через регистр данных контроллера и запускает в контроллере следующую операцию. Процессор возвращается к выполнению прерванной программы через выполнение команды IRET (возврат из прерывания), которой заканчивается программа ввода/вывода) и т. д.
Любой контроллер, получив от процессора (по командам OUT), через свои программно-доступные регистры команду, отрабатывает команду автономно, управляя внешним устройством через «малый» интерфейс между устройством и контроллером. Контроллер, отрабатывая принятую от процессора команду, пересылает во внешнее устройство команды, данные, и читает из устройства информацию о его состоянии и данные. Кроме того, контроллер может выполнять ряд вспомогательных аппаратных функций инициируемых аппаратными сигналами или записью управляющей информации в его программно-доступный регистр.
Как было сказано выше, возможны два способа организации программного обмена с внешними устройствами: «обмен с опросом готовности устройства» и обмен «по запросам на обслуживание устройства» (запросам на маскируемое прерывание). Различие этих способов программного обмена в способе определения готовности устройства к обмену данными.
Например, при обмене «с опросом готовности устройства» с матричным принтером, выполняя программу ввода-вывода, процессор, запустив в контроллере матричного принтера операцию вывода, циклически читает регистр состояния контроллера и ожидает появления (в соответствующем разряде регистра состояния) признака готовности к обмену данными с процессором. При появлении этого признака в регистре состояния, процессор, с помощью команды OUT, осуществляет запись в регистр данных контроллера принтера очередного байта информации для вывода на принтер, и запускает в контроллере принтера, записью команды в регистр управления, следующую операцию вывода и т. д.
При обмене с принтером «по запросам на обслуживание от устройства» (запросам на маскируемое прерывание), процессор, выполняя программу вывода, запустив в контроллере принтера операцию, не ожидает готовности контролера к обмену данными. Он продолжает выполнять полезную программу. Контроллер принтера, в случае полной готовности к обмену данными с процессором, выдает на соответствующую линию IRQ (например, для принтера — IRQ7) сигнал запроса на обслуживание, который поступает на вход контроллера прерываний (который находится в микросхеме «южного моста»). Контроллер прерываний выдает на вход INTR процессора активный сигнал, а процессор, через выполнение процедуры прерывания по сигналу INTR (в ее выполнении участвуют контроллер прерываний и контроллер шины), переходит на выполнение программы вывода для данного устройства. Эта программа осуществляет запись данных в регистр данных контроллера и запись команды в регистр управления, т. е. запускает в контроллере следующую операцию вывода. Процессор в конце программы обслуживания устройства выбирает и выполняет команду IRET (возврат из прерывания, которой заканчивается программа ввода/вывода), и возвращается к выполнению прерванной ранее программы и т. д.
3) Прямой доступ (DMA — DirectMemoryAccess — прямой доступ к памяти).
Прямой доступ (DMA)- это способ обмена между внешним устройством и динамической памятью, при котором управление операциями обмена по интерфейсу между регистром данных устройства и последовательно расположенными ячейками памяти, осуществляет контроллер прямого доступа к памяти, а микропроцессор в это время находится в отключенном от интерфейса состоянии. Прямой доступ может осуществляться двумя способами: обычным DMA и Busmastering DMA. Существуют несколько разновидностей обмена по прямому доступу. Single word DMA – одиночный режим (в каждом цикле обмена словом, сигнал запроса на обмен сбрасывается сигналом, подтверждающим каждый цикл обмена). Multiword DMA – множественный режим (на сигнал запроса на обмен от устройства выполняется поток циклов обмена сопровождаемых сигналами подтверждения; устройство может из-за неготовности приостановить обмен, сняв свой сигнал запроса, и продолжить обмен, вновь установив запрос). Режим DMA позволяет освободить процессор от рутинной пересылки данных между внешними устройствами и памятью, отдав эту работу контроллеру DMA, процессор в это время может обрабатывать другие данные или другую задачу в многозадачной системе.
4) BIOS, UEFI-BIOS. Важным компонентом системы ввода-вывода компьютеров является BIOS – это Basic Input/Output System — базовая система ввода/вывода, «зашитая» в ПЗУ (отсюда и название ROM BIOS). BOIS представляет собой набор программ которые реализуют функции управления внешними устройствами на физическом уровне (программно-управляемый ввод/вывод и DMA), функции проверки и обслуживания аппаратуры компьютера, и выполняет роль посредника между операционной системой и аппаратурой.
BIOS – практически уже достаточно давно начинает уступать место платформе UEFI (Unified Extensible Firmware Interface), представляющей собой новый тип интерфейса между, оборудованием и операционной системой (OS) компьютера. BIOS, созданная четверть века назад, давно не удовлетворяет требованиям, предъявляемым к современным ПК. Все новые компьютеры используют систему UEFI (но в системе UEFI есть блок совместимости с BIOS, поэтому те программы, которым для работы нужен был BIOS, спокойно могут работать и на компьютерах с UEFI). Этот тип интерфейса между оборудованием и ОС, изначально носивший имя EFI, уже в середине девяностых годов создавался корпорацией Intel для платформы Itanium. Сейчас разработку EFI курирует организация Unified EFI Forum (UEFI).
Перевод компьютеров на интерфейс UEFI позволил значительно сократить время загрузки ПК. Если при использовании BIOS с момента включения питания до появления экрана приветствия ОС проходит в среднем полминуты, то с внедрением UEFI этот показатель сократится до нескольких секунд. UEFI обеспечит поддержку альтернативных средств ввода данных, таких как виртуальные клавиатуры и сенсорные дисплеи. Администраторы получат в своё распоряжение расширенные инструменты удалённого управления и средства диагностики, а пользователи — возможность запускать приложения вроде браузера и медиаплеера, не загружая ОС.
Источник
Способы ввода-вывода
Технология ввода вывода
Лекция 11. Ввод-вывод
Программа, которая общается с контроллером устройства ввода-вывода, отдает ему команды и получает ответы, называется драйвером устройства.
Каждый производитель контроллеров должен поставлять драйверы для поддерживаемых им операционных систем. Для того, чтобы получить возможность использовать драйвер, его нужно установить в операционную систему так, чтобы он мог работать в режиме ядра.
Теоретически драйверы могут работать вне ядра, но такую возможность поддерживают всего несколько существующих систем, так как для этого требуется, чтобы драйвер в пространстве пользователя имел доступ к устройству неким контролируемым способом — очень редко поддерживаемое свойство.
Три способа установки драйвера в ядро.
- Первый способзаключается в том, чтобы заново скомпоновать ядро вместе с новым драйвером и затем перезагрузить систему. Так работает множество систем UNIX.
- Второй способ: создать запись во входящем в операционную систему файле, говорящую о том, что требуется драйвер, и затем перезагрузить систему. Во время начальной загрузки операционная система сама находит нужные драйверы и загружает их. Так работает система Windows.
- Третий способ: операционная система может принимать новые драйверы, не прерывая работы, и оперативно устанавливать их, не нуждаясь при этом в перезагрузке. Этот способ редко используется, но сейчас он становится все более и более распространенным. Такие съемные устройства, как шины USB и IEEE 1394, всегда нуждаются в динамически загружаемых драйверах.
Ввод и вывод данных можно осуществлять тремя различными способами (рис 11.1)
Способ ввода-вывода | Без использования прерываний | С использованием прерываний |
Передача данных из устройства в/в в память с использованием процессора | Программируемый ввод/вывод (режим опроса готовности) | Ввод/вывод, управляемый прерыванием (режим обмена с прерыванием) |
Прямая передача данных из устройства ввода/вывода в память | Прямой доступ к памяти(DMA) |
Рис. 11.1. Способы ввода-вывода
- Управление в/в осуществляет ЦП– программный канал обмена данными между ОП и ВУ
- Управление в/в осуществляет специальное дополнительное оборудование –канал прямого доступа.
- Программируемый ввод-вывод (режим опроса готовности). Синхронное управление.Простейший метод состоит в том, что пользовательская программа выдает системный запрос, который ядро транслирует в вызов процедуры соответствующего драйвеpa. Затем драйвер начинает процесс ввода-вывода. В это время драйвер выполняет очень короткий программный цикл, постоянно опрашивая готовность устройства, с которым он работает (обычно есть некий бит, который указывает на то, что устройство все еще занято). По завершении операции ввода-вывода драйвер помещает данные туда, куда требуется, и возвращается в исходное состояние. Затем операционная система возвращает управление программе, осуществлявшей вызов. Этот метод называется ожиданием готовности или активным ожиданием и имеет один недостаток: процессор должен опрашивать устройство до тех пор, пока оно не завершит свою работу.
В набор используемых команд входят команды ввода-вывода, принадлежащие следующим категориям.
- Управление. Команды этой категории используются для того, чтобы привести внешнее устройство в действие и сообщить ему, что нужно делать. Например, блоку с магнитной лентой можно отдать команду перемотки или перемещения вперед на одну запись.
- Состояние. Используется для проверки состояния контроллера ввода-вывода и соответствующих периферийных устройств.
- Передача. Используется для чтения и/или записи данных в регистры процессора и внешние устройства и из регистров процессора и внешних устройств.
2. Режим обмена с прерываниями (асинхронное управление). При втором способе драйвер запускает устройство и просит его выдать прерывание по окончании ввода-вывода. После этого драйвер возвращает данные, операционная система блокирует программу вызова, если это нужно, и начинает выполнять другие задания. Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание, чтобы сигнализировать о завершении операции.
Процесс ввода-вывода в этом случае состоит из следующих шагов (рис. 11.2):
Рис. 11.2. Ввод-вывод, управляемый прерыванием
шаг 1. Драйвер передает команду контроллеру, записывая информацию в регистры устройства. Затем контроллер запускает устройство
шаг 2. Когда контроллер заканчивает чтение или запись того количества байтов, которое ему было указано передать, он посылает сигнал микросхеме контроллера прерываний, используя определенные провода шины.
шаг 3. Если контроллер прерываний готов к приему прерывания (а этого может и не быть, если он занят прерыванием более высокого приоритета), то он подает сигнал на определенный контакт процессора информируя центральный процессор.
шаг 4.Контроллер прерываний выставляет номер устройства на шину так, чтобы центральный процессор мог прочесть его и узнать, какое устройство только что завершило свою работу (ведь в одно и то же время могут работать несколько устройств).
Как только центральный процессор решил принять прерывание, содержимое счетчика команд (PC) и слова состояния процессора (PSW) помещается в текущий стек, а процессор переключается в режим работы ядра. Номер устройства может использоваться как индекс части памяти, служащий для поиска адреса обработчика прерываний данного устройства. Эта часть памяти называется вектором прерываний. Когда обработчик прерываний (это часть драйвера устройства, пославшего прерывание) начинает свою работу, он удаляет расположенные в стеке счетчик команд и слово состояния процессора, сохраняет их и запрашивает устройство, чтобы получить информацию о его состоянии. После того как обработка прерывания целиком завершена, управление возвращается кработавшей до этого программе пользователя, к той команде, выполнение которой еще не было закончено.
Для того чтобы не потерять связь с устройством может быть запущен отсчет времени, в течение которого устройство обязательно должно выполнить команду и выдать таки сигнал запроса на прерывание.
Максимальный интервал времени, в течение которого устройство ввода/вывода или его контроллер должны выдать сигнал запроса на прерывание, часто называют установкой тайм-аута.
Если это время истекло после выдачи устройству очередной команды, а устройство так и не ответило, то делается вывод о том, что связь с устройством потеряна и управлять им больше нет возможности. Пользователь и/или процесс получают соответствующее диагностическое сообщение.
Драйверы, работающие в режиме прерываний, представляют собой сложный комплекс программных модулей и могут иметь несколько секций:
- секцию запуска,
- одну или несколько секций продолжения
- и секцию завершения.
Секция запускаинициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода либо просто для инициации очередной операции ввода/вывода.
Секция продолжения(их может быть несколько, если алгоритм управления обменом данными сложный и требуется несколько прерываний для выполнения одной логической операции) осуществляет основную работу по передаче данных.
Секция продолжения, собственно говоря, и является основным обработчиком прерывания.
Используемый интерфейс может потребовать для управления вводом/выводом несколько последовательностей управляющих команд, а сигнал прерывания у устройства, как правило, только один.
Поэтому после выполнения очередной секции прерывания супервизор прерываний при следующем сигнале готовности должен передать управление другой секции.
Это делается за счет изменения адреса обработки прерывания после выполнения очередной секции, если же имеется только одна секция прерываний, то она сама передает управление тому или иному модулю обработки.
Секция завершенияобычно выключает устройство ввода/вывода либо просто завершает операцию.
Управление операциями ввода/вывода в режиме прерываний требует больших усилий со стороны системных программистов — такие программы создавать сложнее, чем те, что работают в режиме опроса готовности.
Примером тому может служить ситуация с драйверами, обеспечивающими печать. Так, в ОС Windows (и Windows 9x, и Windows NT) драйвер печати через параллельный порт работает не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к 100%-й загрузке центрального процессора на все время печати. При этом, естественно, выполняются и другие задачи, запущенные на исполнение, но исключительно за счет того, что ОС Windows реализует вытесняющую мультизадачность и время от времени прерывает процесс управления печатью и передает центральный процессор остальным задачам.
3. Прямой доступ к памяти. Третий метод ввода-вывода информации заключается в использовании специального контроллера прямого доступа к памяти (DMA, Direct Memory Access), который управляет потоком битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства центрального процессора. Процессор вызывает микросхему DMA, говорит ей, сколько байтов нужно передать, сообщает адреса устройства и памяти, а также направление передачи данных и позволяет дальше действовать ей самой. По завершении работы DMA инициирует прерывание, которое обрабатывается так же, как было описано выше.
Операционная система может воспользоваться прямым доступом к памяти только при наличии аппаратного DMA-контроллера, который есть у большинства систем. Как правило, DMA-контроллер, устанавливаемый на материнской плате, обслуживает запросы по передаче данных нескольких различных устройств ввода-вывода, часто на конкурентной основе.
Где бы он ни располагался физически, DMA-контроллер может получать доступ к системной шине независимо от центрального процессора (рис. 11.3). Он содержит несколько регистров, доступных центральному процессору для чтения и записи.
Рис. 11.3. Ввод-вывод с использованием прямого доступа
К ним относятся регистр адреса памяти, счетчик байтов и один или более управляющих регистров. Управляющие регистры задают:
Источник