Спонсор: Microsoft
Опубликован: 13.11.2010 | Уровень: для всех | Доступ: платный | ВУЗ: Санкт-Петербургский государственный университет
Лекция 21:

Системы ввода-вывода

< Лекция 20 || Лекция 21: 12345 || Лекция 22 >

Программный интерфейс ввода-вывода

При проектировании и реализации программного интерфейса (API) ввода-вывода используются принципы уровней абстракции.

Модули операционной системы, реализующие системные вызовы для ввода-вывода, инкапсулируют поведение конкретных устройств ввода-вывода и обеспечивают более абстрактный интерфейс.

Более низкий уровень, уровень драйверов устройств, скрывает различия между контроллерами ввода-вывода конкретных устройств от ядра ОС.

Устройства ввода-вывода различаются по многим параметрам в силу их специфики, например:

  • Устройство для работы с потоками символов или с блоками;
  • Устройство последовательного или прямого доступа;
  • Разделяемое или специализированное (монополизируемое) устройство;
  • Различия по скорости выполнения операций устройствами;
  • Устройство для чтения/записи, или только для чтении, или только для записи.

Структура модулей ввода-вывода в ядре, разработанная и реализованная по этим принципам, изображена на рис. 21.4.

Структура модулей ввода-вывода в ядре ОС.

увеличить изображение
Рис. 21.4. Структура модулей ввода-вывода в ядре ОС.

Классификация устройств ввода-вывода по различным характеристикам и их примеры приведены в таблица 3.

Таблица 3. Характеристики устройств ввода-вывода
классификация варианты примеры
режим передачи данных
  • символьный
  • блочный
  • терминал
  • диск
метод доступа
  • последовательный
  • произвольный
  • модем
  • CD-ROM
метод передачи данных
  • синхронный
  • асинхронный
  • лента
  • клавиатура
возможность совместного доступа
  • монопольный
  • общий
  • лента
  • клавиатура
скорость устройства
  • латентность
  • время поиска
  • скорость передачи
  • задержка между операциями
направленнность ввода-вывода
  • только чтение
  • только запись
  • чтение-запись
  • CD-ROM
  • графический контроллер
  • диск

Блочные и символьные устройства

Типичный пример блочного устройства устройство управления дисками. Оно выполняет команды вида: read, write, seek (считать, записать или найти блок с заданным номером). Устройство может выполнять чистый ввод-вывод или доступ к файловой системе. Имеется возможность доступа к файлу, отображаемому в память.

Типичные примеры символьных устройств – клавиатура, мышь, последовательные порты. Такие устройства выполняют команды вида: get, put (считать или записать символ). Библиотеки верхнего уровня в операционной системе для символьных устройств допускают построчное редактирование посимвольно введенной информации.

Сетевые устройства cущественно отличаются от блочных и символьных; имеют свой собственный интерфейс и систему команд

Сетевые устройства и их драйверы в ОС поддерживают традиционные или специфические сетевые протоколы и способы передачи информации через сеть. Например, ОС UNIX и Windows NT / 9x / 2000 поддерживают сокетный интерфейс. Сетевое устройство отделяет сетевой протокол от сетевой операции. Команды сетевых устройств включают функцию select – выбор сетевого пакета. Сетевые устройства различны по подходам к реализации (конвейеры, pipes, FIFO, потоки, очереди, почтовые ящики). В типичной конфигурации настольного или портативного компьютера присутствуют следующие сетевые устройства:

  • сетевой адаптер локальной сети (Ethernet), имеющий разъем типа RJ45 для подключения сетевого кабеля twisted pair (витая пара) или BNC (коаксиального);
  • устройство для подключения к беспроводной сети типа IEEE.802.11x (Wi-Fi);
  • устройство для подключения к локальной сети IEEE 1394 (FireWire) для передачи цифрового видео;
  • уже несколько устаревший, но до сих пор используемый в компьютерах способ подсоединения к сети Интернет - встроенный модем для передачи информации по телефонной линии ( dial-up) со скоростью максимум порядка 5-6 килобайт в секунду.

Устройства FireWire, по-видимому, из-за особой важности передачи мультимедийной информации, в современных компьютерах располагаются на материнской плате. В спецификации компьютера это обычно указывается аббревиатурой типа FireWire on board (на борту).

Операционные системы поддерживают для пользователей более высокоуровневую концепцию сетевого соединения (network connection),включающую информацию о сетевом устройстве, с помощью которого данное соединение осуществляется.

Сетевые протоколы подробно рассмотрены далее в специальных разделах курса.

Часы и таймеры

Данные хронометрические устройства в компьютерной системе хранят информацию о текущем времени, прошедшем отрезке времени, установках таймера.

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

В системе UNIX работу с часами и таймером поддерживает системный вызов и команда ioctl. Кроме того, в системе имеется процесс-демон cron, с помощью которого в системе организуются события, происходящие в назначенное время, - например, автоматическое резервное копирование всех наиболее важных файловых систем на ленту.

Блокируемый (синхронный) и не блокируемый (асинхронный) ввод-вывод

Для оптимизации ввода-вывода в системе поддерживается, помимо традиционного синхронного (блокируемого),также асинхронный ввод-вывод.

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

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

< Лекция 20 || Лекция 21: 12345 || Лекция 22 >
Василий Четвертаков
Василий Четвертаков
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Константин Леденев
Константин Леденев
Россия
Олег Равков
Олег Равков
Россия