Руководство ввода вывода

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

Система ввода-вывода должна принимать запрос ввода-вывода приложения и отправлять его на физическое устройство, затем принимать любой ответ, возвращаемый устройством, и отправлять его приложению. Устройства ввода / вывода можно разделить на две категории –

  • Блочные устройства – блочное устройство, с которым драйвер связывается, отправляя целые блоки данных. Например, жесткие диски, USB-камеры, Disk-On-Key и т. Д.

  • Символьные устройства. Символьное устройство – это устройство, с которым драйвер общается, отправляя и получая отдельные символы (байты, октеты). Например, последовательные порты, параллельные порты, звуковые карты и т. Д.

Блочные устройства – блочное устройство, с которым драйвер связывается, отправляя целые блоки данных. Например, жесткие диски, USB-камеры, Disk-On-Key и т. Д.

Символьные устройства. Символьное устройство – это устройство, с которым драйвер общается, отправляя и получая отдельные символы (байты, октеты). Например, последовательные порты, параллельные порты, звуковые карты и т. Д.

Контроллеры устройств

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

Контроллер устройства работает как интерфейс между устройством и драйвером устройства. Блоки ввода / вывода (клавиатура, мышь, принтер и т. Д.) Обычно состоят из механического компонента и электронного компонента, где электронный компонент называется контроллером устройства.

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

Любое устройство, подключенное к компьютеру, подключается через разъем и розетку, а разъем подключается к контроллеру устройства. Ниже приведена модель подключения ЦП, памяти, контроллеров и устройств ввода-вывода, в которой все ЦП и контроллеры устройств используют общую шину для связи.

Контроллеры устройств

Синхронный и асинхронный ввод-вывод

  • Синхронный ввод / вывод – в этой схеме выполнение ЦП ожидает, пока продолжается ввод / вывод

  • Асинхронный ввод-вывод – ввод-вывод выполняется одновременно с выполнением процессора

Синхронный ввод / вывод – в этой схеме выполнение ЦП ожидает, пока продолжается ввод / вывод

Асинхронный ввод-вывод – ввод-вывод выполняется одновременно с выполнением процессора

Связь с устройствами ввода / вывода

Процессор должен иметь возможность передавать информацию на устройство ввода-вывода и обратно. Существует три подхода для связи с процессором и устройством.

  • Специальная инструкция ввода / вывода
  • Отображение в памяти ввода-вывода
  • Прямой доступ к памяти (DMA)

Специальная инструкция ввода / вывода

При этом используются инструкции процессора, специально предназначенные для управления устройствами ввода-вывода. Эти инструкции обычно позволяют отправлять данные на устройство ввода-вывода или считывать данные с устройства ввода-вывода.

Отображение в памяти ввода-вывода

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

Отображение в памяти ввода-вывода

При использовании отображения ввода-вывода в память ОС выделяет буфер в памяти и сообщает устройству ввода-вывода использовать этот буфер для отправки данных в ЦП. Устройство ввода-вывода работает асинхронно с ЦП, прерывает ЦП после завершения.

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

Прямой доступ к памяти (DMA)

Медленные устройства, такие как клавиатуры, будут генерировать прерывание для основного процессора после передачи каждого байта. Если бы быстрое устройство, такое как диск, генерировало прерывание для каждого байта, операционная система потратила бы большую часть своего времени на обработку этих прерываний. Таким образом, типичный компьютер использует аппаратное обеспечение прямого доступа к памяти (DMA), чтобы уменьшить эти издержки.

Прямой доступ к памяти (DMA) означает, что ЦП предоставляет полномочия модуля ввода / вывода для чтения или записи в память без участия. Модуль DMA сам управляет обменом данными между основной памятью и устройством ввода-вывода. CPU задействуется только в начале и в конце передачи и прерывается только после того, как весь блок был передан.

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

DMA

Операционная система использует оборудование DMA следующим образом:

шаг Описание
1 Драйвер устройства получает указание перенести данные с диска на адрес буфера X.
2 Затем драйвер устройства дает команду контроллеру диска передать данные в буфер.
3 Контроллер диска начинает передачу DMA.
4 Контроллер диска отправляет каждый байт контроллеру DMA.
5 Контроллер DMA передает байты в буфер, увеличивает адрес памяти, уменьшает счетчик C, пока C не станет равным нулю.
6 Когда C становится равным нулю, DMA прерывает CPU, чтобы завершить передачу сигнала.

Опрос против прерывания ввода / вывода

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

Опрос ввода / вывода

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

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

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

Прерывает ввод / вывод

Альтернативная схема для работы с вводом / выводом – это метод, управляемый прерываниями. Прерывание – это сигнал для микропроцессора от устройства, которое требует внимания.

Контроллер устройства помещает сигнал прерывания на шину, когда ему требуется внимание ЦП, когда ЦП получает прерывание. Он сохраняет свое текущее состояние и вызывает соответствующий обработчик прерываний, используя вектор прерывания (адреса подпрограмм ОС для обработки различных событий). Когда с устройством прерывания обработано, ЦПУ продолжает выполнять свою первоначальную задачу, как если бы оно никогда не прерывалось.

Операционная система — аппаратное обеспечение ввода-вывода

Время на прочтение
5 мин

Количество просмотров 2.3K

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

Система ввода/вывода должна принимать запрос приложения на ввод/вывод и посылать его физическому устройству, затем принимать ответ от устройства и посылать его приложению. Устройства ввода/вывода можно разделить на две категории:

  • Блочные устройства. Блочное устройство — это устройство, с которым драйвер взаимодействует путем отправки целых блоков данных. Например, жесткие диски, USB-камеры, флешки и т.д.

  • Символьные устройства. Символьное устройство — это устройство, с которым драйвер взаимодействует путем отправки и получения отдельных символов (байтов, октетов). Например, последовательные порты, параллельные порты, звуковые карты и т.д.

Контроллеры устройств

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

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

Для каждого устройства всегда есть контроллер и драйвер для взаимодействия с операционными системами. Контроллер может работать с несколькими устройствами. Его основная задача в качестве интерфейса — преобразовать последовательный поток битов в блок байтов и при необходимости выполнить коррекцию ошибок.

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

Синхронный и асинхронный ввод/вывод

  • Синхронный ввод/вывод — в этой схеме процессор ждет, пока выполняется ввод/вывод.

  • Асинхронный ввод/вывод — ввод/вывод происходит параллельно с выполнением инструкций на процессоре.

Связь с устройствами ввода/вывода

Центральный процессор должен иметь возможность передавать информацию на устройство ввода-вывода и обратно. Существует три подхода для связи между CPU и устройством.

  • Специальная команда ввода/вывода

  • Ввод/вывод с привязкой к памяти

  • Прямой доступ к памяти (direct memory access, DMA)

Специальная команда ввода/вывода

При этом используются инструкции CPU, специально разработанные для управления устройствами ввода-вывода. Эти инструкции обычно позволяют отправлять данные на устройство ввода/вывода или считывать их с устройства ввода/вывода.

Ввод/вывод с привязкой к памяти

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

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

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

Прямой доступ к памяти (Direct Memory Access, DMA)

Медленные устройства, например, клавиатуры, будут генерировать прерывание для главного процессора после передачи каждого байта. Если бы быстрое устройство, такое как диск, генерировало прерывание для каждого байта, операционная система тратила бы большую часть своего времени на обработку этих прерываний. Поэтому типичный компьютер использует прямой доступ к памяти (DMA), чтобы уменьшить эти накладные расходы.

Прямой доступ к памяти (DMA) означает, что процессор предоставляет модулю ввода-вывода полномочия на чтение из памяти или запись в память без его участия. Модуль DMA сам управляет обменом данными между основной памятью и устройством ввода-вывода. Центральный процессор участвует только в начале и конце передачи данных и прерывается только после передачи всего блока.

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

Операционная система использует аппаратное обеспечение DMA следующим образом:

Шаг

Описание

1

Драйверу устройства дается команда передать данные с диска по адресу буфера X.

2

Затем драйвер устройства дает команду контроллеру диска передать данные в буфер.

3

Дисковый контроллер запускает передачу данных через DMA.

4

Дисковый контроллер посылает каждый байт контроллеру DMA.

5

Контроллер DMA передает байты в буфер, увеличивает адрес памяти, уменьшает счетчик C, пока C не станет нулем.

6

Когда C становится равным нулю, DMA прерывает процессор, чтобы сообщить о завершении передачи.

Ввод/вывод по опросу vs Ввод/вывод по прерыванию

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

Ввод-вывод по опросу

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

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

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

Ввод-вывод с прерыванием

Альтернативной схемой работы с вводом/выводом является метод прерываний. Прерывание — это сигнал микропроцессору от устройства, которое требует внимания.

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

Тему ввода-вывода в компьютерных системах продолжим изучать на открытом уроке, который пройдет уже завтра вечером.

На данном уроке мы рассмотрим основы архитектуры ввода-вывода (I/O) в компьютерных системах. Изучим роль I/O систем в компьютерной архитектуре, рассмотрим различные типы устройств и их использование в компьютерных системах. Мы обсудим необходимые аппаратные компоненты, такие как память, а также научимся использовать программно устройства ввода-вывода. Цель урока — разобраться в роли, типах I/O систем в компьютерной архитектуре и способов взаимодействия с ними.

  • Записаться на урок можно на странице онлайн-курса «Computer Science»

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

I/O в аппаратном обеспечении

В современных операционных системах средства ввода-вывода представляют собой способы взаимодействия между обработчиком информации и внешним миром. Сюда можно отнести чтение или запись файлов на жёсткий диск или SSD, отправку и получение данных по сети, отображение информации на мониторе и получение ввода с мыши и клавиатуры.

Способы взаимодействия современных ОС с периферийными устройствами зависят от типа устройства, возможностей прошивки и аппаратного обеспечения. Можно считать, что периферия может обрабатывать несколько запросов одновременно. То есть время последовательного взаимодействия прошло. В этом смысле все взаимодействия устройств ввода-вывода с процессором асинхронны и находятся на стороне аппаратного обеспечения.

Такой асинхронный механизм называется аппаратным прерыванием. В простом случае, процессор отправляет запрос к внешнему устройству и начинает бесконечный цикл, в котором он каждый раз запрашивает у периферии, готовы ли данные, которые процессор мог бы считать, и ждёт в цикле, пока периферия не выдаст ему эти данные. Этот метод ввода-вывода называется методом опроса поскольку процессор должен постоянно проверять состояние периферии.

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

I/O в программном обеспечении

В среде программного обеспечения существует большое количество видов ввода и вывода: блокирующий, неблокирующий, мультиплексированный и асинхронный. Давайте рассмотрим их по очереди.

Блокирующий метод

Помните, что любая пользовательская программа запускается внутри процесса, а код выполняется в контексте потока? Предположим, вы пишете программу, которой нужно читать информацию из файла. С блокирующим вводом-выводом вы просите ОС «усыпить» ваш поток и «разбудить» его только после того, как данные из файла будут доступны для чтения.

То есть блокирующий ввод-вывод называется так, потому что поток, который его использует, блокируется и переходит в режим ожидания, пока ввод-вывод не будет завершён.

Неблокирующий метод

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

Один из способов осуществить это — использовать неблокирующий ввод-вывод. Его идея заключается в том, что когда программа делает вызов на чтение файла, ОС не будет блокировать поток, а просто вернёт ей либо готовые данные, либо информацию о том, что ввод-вывод ещё не закончен. Это не заблокирует поток, но программе придётся позже проверять, завершён ли ввод-вывод. Это означает, что ПО может по-разному реагировать в зависимости от того, завершён ли ввод-вывод и выполнять другие задачи. Когда же программе снова понадобится ввод-вывод, она сможет повторно попробовать прочесть содержимое файла, и если ввод-вывод завершён, то получит содержимое файла. В противном случае ПО снова получит сообщение о том, что операция ещё не завершена и сможет заняться другими задачами.

Мультеплексированный метод

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

Хорошо, если ПО просит ОС прочитать содержимое из файла А, после чего выполняет какие-нибудь сложные вычисления. Затем проверяет, завершилось ли чтение файла А, и если да, то просто продолжает ту работу, для которой нужно было содержимое файла, а иначе снова выполняет некоторое количество сложных вычислений и так далее.

Но что, если программе не нужно выполнять сложные вычисления? Ей просто нужно прочесть файл A и одновременно файл B. Пока ПО ожидает завершения обработки файла А, оно делает неблокирующий вызов чтения содержимого файла В. Во время ожидания обработки программе больше нечего делать, потому она входит в бесконечный цикл опроса, проверяя, готово ли A и готово ли B, снова и снова. Это либо нагрузит процессор проверками состояния ваших неблокирующих вызовов, либо вам придётся вручную добавить какое-то произвольное время, которое ваш поток будет «спать», а значит, программа немного позже заметит, что ввод-вывод готов, что отрицательно скажется на пропускной способности ПО.

Во избежание этого можно использовать мультиплексированный ввод-вывод. Он тоже блокирует поток на операциях ввода-вывода, но вместо того, чтобы производить блокировку по очереди, вы можете запланировать все операции ввода-вывода, которые вам нужно сделать, и блокировать их все. Операционная система разбудит поток, когда какая-нибудь из операций завершится. В некоторых реализациях мультиплексированного ввода-вывода можно даже точно указать, что вы хотите, чтобы поток разбудили, только когда заданный набор операций ввода-вывода будет завершён, например, когда файлы A и C, или файлы B и D будут готовы.

Таким образом ПО делает неблокирующий вызов чтения файла A, потом неблокирующий вызов чтения файла B, и наконец говорит ОС: усыпи мой поток, и разбуди его, когда A и B будут оба готовы, или когда один из них будет готов.

Асинхронный метод

Проблема мультиплексированного ввода-вывода в том, что поток всё-таки спит, пока ввод-вывод не будет готов для обработки. Для многих программ это подходит, поскольку у них нет других задач, пока они ждут завершения операций ввода-вывода. Но иногда у них есть и другие задачи.

Например, ПО вычисляет цифры числа π и одновременно суммирует значения из нескольких файлов. Вам хотелось бы запланировать все операции чтения файлов, пока программа ждёт их выполнения, вычислять цифры числа π. Когда какой-нибудь из файлов будет прочитан, ПО прибавит записанное в нём значение и продолжит вычислять цифры числа π дальше, пока ещё один файл не будет прочитан.

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

Чтение по теме: Асинхронное программирование в Python

Многопоточность или однопоточность?

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

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

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

Перевод статьи «The Various Kinds of IO — Blocking, Non-blocking, Multiplexed and Async.»

Лекция 9.   Управление вводом-выводом данных

9.1 Принципы аппаратуры ввода-вывода

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


Рис. 1. Структура системы ввода-вывода

В составе любой ОС существует специальная подсистема, управляющая аппаратурой ввода-вывода. Основные задачи, решаемые с помощью этой подсистемы, состоят в следующем:

— подсистема должна обеспечить пользователей удобным и понятным интерфейсом для обращения к ПУ как в однопользовательском, так и в многопользовательском режимах работы ЭВМ; при этом часто выдвигается требование на достижение унифицированного интерфейса для доступа к различным по своим физическим характеристикам ПУ, для чего реализуется принцип независимости от устройств;

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

— состав подсистемы ОС для устройств ввода-вывода и аппаратура ввода-вывода существенно отличаются для различных ЭВМ, но можно выделить и единое концептуальное начало, свойственное всем подсистемам. Аппаратуру ввода-вывода можно рассматривать как совокупность аппаратурных процессоров, которые способны работать параллельно друг относительно друга, а также относительно ЦП. На таких процессорах выполняются так называемые внешние процессы. Например, для печатающего устройства процесс может состоять из совокупности действий, обеспечивающих перевод каретки, продвижение бумаги на одну строку, печать любого заданного числа символов на строке.

Внешние процессы взаимодействуют с программными процессами, выполняемыми ЦП и оперативной памятью (ОП). Существенно, что скорость выполнения программного процесса может на несколько порядков превосходить скорость внешнего процесса.

Рекомендуемые материалы

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

1. операции чтения-записи данных;

2. операции управления ПУ;

3. операции по проверке состояния ПУ.

9.1.1 Устройства ввода-вывода

Устройства делят на две категории (некоторые не попадают ни в одну):

  • блочные устройства — информация считывается и записывается по блокам, блоки имеют свой адрес (диски)
  • символьные устройства — информация считывается и записывается посимвольно (принтер, сетевые карты, мыши)

9.1.2 Контроллеры устройств

Устройства ввода-вывода обычно состоят из двух частей:

  • механическая (не надо понимать дословно) — диск, принтер, монитор
  • электронная — контроллер или адаптер

  Если интерфейс между контроллером и устройством стандартизован (ANSI, IEEE или ISO), то независимые производители могут выпускать совместимые как контроллеры, так и устройства. Например: диски IDE или SCSI.

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

9.1.3 Отображаемый на адресное пространство памяти ввод-вывод

  Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. При помощи этих регистров ОС управляет (считывает, пишет, включает и т.д.) и определяет состояние (готовность) устройства.

  У многих устройств есть буфер данных (например: видеопамять).

  Реализации доступа к управляющим регистрам и буферам:

  • номер порта ввода-вывода — назначается каждому управляющему регистру 8- или 16-рзрядное целое число. Адресные пространства ОЗУ и устройства ввода-вывода в этой схеме не пересекаются.
    Недостатки
    — для чтения и записи применяются специальные команды, например IN и OUT
    — необходим специальный механизм защиты от процессов
    — необходимо сначала считать регистр устройства в регистр процессора
  • отображаемый на адресное пространство памяти ввод-вывод — регистры отображаются на адресное пространство памяти.
    Недостатки
    — при кэшировании памяти, могут кэшироваться и регистры устройств
    — все устройства должны проверять все обращения к памяти, чтобы определить, на какие им реагировать. На одной общей шине это реализуется легко, но на нескольких будут проблемы.
  • смешанная реализация — используется в х86 и Pentium,
    от 0 до 64К отводится портам,
    от 640 до 1М зарезервировано под буферы данных.

Способы реализации доступа к управляющим регистрам и буферам

9.1.4 Прямой доступ к памяти (DMA — Direct Memory Access)

  Прямой доступ к памяти реализуется с помощью DMA — контроллера.

  Контроллер содержит несколько регистров:

  • регистр адреса памяти
  • счетчик байтов
  • управляющие регистры, могут содержать:
    — порт ввода-вывода
    — чтение или запись
    — единицы переноса (побайтно или пословно)

  Без контроллера происходит следующее:

  1. Процессор дает команду дисковому контроллеру прочитать данные в буфер,
  2. Считываются данные в буфер, контроллер проверяет контрольную сумму считанных данных (проверка на ошибки). Процессор, до прерывания, переключается на другие задания.
  3. Контроллер диска инициирует прерывание
  4. Операционная система начинает работать и может считывать из буфера данные в память

Работа DMA — контроллера

  С контроллером происходит следующее:

  1. Процессор программирует контроллер (какие данные и куда переместить)
  2. Процессор дает команду дисковому контроллеру прочитать данные в буфер
  3. Считываются данные в буфер, контроллер диска проверяет контрольную сумму считанных данных, (процессор, до прерывания, переключается на другие задания).
  4. Контроллер DMA посылает запрос на чтение дисковому контроллеру
  5. Контроллер диска поставляет данные на шину, адрес памяти уже находится на шине, происходит запись данных в память
  6. Когда запись закончена, контроллер диска посылает подтверждение DMA контроллеру
  7. DMA контроллер увеличивает используемый адрес и уменьшает значение счетчика байтов
  8. Все повторяется с пункта 4, пока значение счетчика не станет равной нулю.
  9. Контроллер DMA инициирует прерывание

Операционной системе не нужно копировать данные в память, они уже там.

9.1.5 Прерывания

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

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

  Контроллер прерываний — обслуживает поступающие прерывания от устройств.

  1. Если необработанных прерываний нет, прерывание выполняется немедленно.
  2. Если необработанных прерываний есть, контроллер игнорирует прерывание. Но устройство продолжает удерживать сигнал прерывания на шине до тех пор, пока оно не будет обработано.

Работа прерываний

Алгоритм работы:

  • Устройство выставляет сигнал прерывания
  • Контроллер прерываний инициирует прерывание, указывая номер устройства
  • Процессор начинает выполнять обработку прерывания, вызывая процедуру
  • Эта процедура подтверждает получение прерывания контроллеру прерываний

9.2 Принципы программного обеспечения ввода-вывода

9.2.1 Задачи программного обеспечения ввода-вывода

Основные задачи, которые должно решать программное обеспечение ввода-вывода:

  • Независимость от устройств — например, программа, читающая данные из файла не должна задумываться с чего она читает (CD, HDD и др.). Все проблемы должна решать ОС.
  • Единообразное именование — имя файла или устройства не должны отличаться. (В системах UNIX выполняется дословно).
  • Обработка ошибок — ошибки могут быть отловлены на уровне контроллера, драйвера и т.д.
  • Перенос данных — синхронный и асинхронный (в последнем случае процессор запускает перенос данных, и переключается на другие задачи до прерывания).
  • Буферизация
  • Проблема выделенных (принтер) и невыделенных (диск) устройств — принтер должен предоставляться только одному пользователю, а диск многим. ОС должна решать все возникающие проблемы.

Три основных способа осуществления операций ввода-вывода:

  • Программный ввод-вывод
  • Управляемый прерываниями ввод-вывод
  • Ввод-вывод с использованием DMA

Рассмотрим их подробнее.

9.2.2 Программный ввод-вывод

  В этом случае всю работу выполняет центральный процессор.

Рассмотрим процесс печати строки ABCDEFGH этим способом.

Этапы печати строки ABCDEFGH

Алгоритм печати:

  1. Строка для печати собирается в пространстве пользователя.
  2. Обращаясь к системному вызову, процесс получает принтер.
  3. Обращаясь к системному вызову, процесс просит распечатать строку на принтере.
  4. Операционная система копирует строку в массив, расположенный в режиме ядра.
  5. ОС копирует первый символ в регистр данных принтера, который отображен на памяти.
  6. Символ печатается на бумаге.
  7. Указатель устанавливается на следующий символ.
  8. Процессор ждет, когда бит готовности принтера выставится в готовность.
  9. Все повторяется.

  При использовании буфера принтера, сначала вся строка копируется в буфер, после этого начинается печать.

9.2.3 Управляемый прерываниями ввод-вывод

  Если в предыдущем примере буфер не используется, а принтер печатает 100 символов в секунду, то на каждый символ будет уходить 10мс, в это время процессор будет простаивать, ожидая готовности принтера.

  Рассмотрим тот же пример, но с небольшим усовершенствованием.

Алгоритм печати:

  1. До пункта 8 тоже самое.
  2. Процессор не ждет готовности принтера, а вызывает планировщик и переключается на другую задачу. Печатающий процесс блокируется.
  3. Когда принтер будет готов, он посылает прерывание процессору.
  4. Процессор переключается на печатающий процесс.

9.2.4 Ввод-вывод с использованием DMA

Недостаток предыдущего метода в том, что прерывание происходит при печати каждого символа.

Алгоритм не отличается, но всю работу на себя берет контроллер DMA.

9.3 Программные уровни и функции ввода-вывода

  Четыре уровня ввода-вывода:

Уровни ввода-вывода

9.3.1 Обработчики прерываний

  Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Лучше всего блокировать драйвер, начавший ввод-вывод.

  Алгоритм:

  1. Драйвер начинает операцию ввод-вывод.
  2. Драйвер блокирует сам себя,
    — выполнив на семафоре процедуру down
    — выполнив на переменной состояния процедуру wait
    — выполнив на сообщении процедуру receive
  3. Происходит прерывание
  4. Обработчик прерываний начинает работу
  5. Обработчик прерываний может разблокировать драйвер (например, выполнив на семафоре процедуру up)

9.3.2 Драйвера устройств

  Драйвер устройства — необходим для каждого устройства. Для разных ОС нужны разные драйверы.

Драйверы должны быть частью ядра (в монолитной системе), что бы получить доступ к регистрам контроллера.

  Это одна из основных причин приводящих к краху операционных систем. Потому что драйверы, как правило, пишутся производителями устройств, и вставляются в ОС.

Логическое расположение драйверов устройств. На самом деле обмен данными между контроллерами и драйверами идет по шине.

Драйвера должны взаимодействовать с ОС через стандартные интерфейсы.

Стандартные интерфейсы, которые должны поддерживать драйвера:

  • Для блочных устройств
  • Для символьных устройств

Раньше для установки ядра приходилось перекомпилировать ядра системы.

Сейчас в основном ОС загружают драйверы. Некоторые драйверы могут быть загружены в горячем режиме.

Функции, которые выполняют драйвера:

  • обработка запросов чтения или записи
  • инициализация устройства
  • управление энергопотреблением устройства
  • прогрев устройства (сканера)
  • включение устройства или запуска двигателя

9.3.3 Независимое от устройств программное обеспечение ввода-вывода

Функции независимого от устройств программного обеспечения ввода-вывода:

  • Единообразный интерфейс для драйверов устройств,
  • Буферизация
  • Сообщения об ошибках
  • Захват и освобождение выделенных устройств(блокирование)
  • Размер блока, не зависящий от устройств

Единообразный интерфейс для драйверов устройств

Кроме интерфейса, в него также входят проблемы,

  • именование устройств
  • защита устройств

Буферизация

Рассмотрим несколько примеров буферизации.

a) Не буферизованный ввод — после ввода каждого символа происходит прерывание

b) Буферизация в пространстве пользователя — приходится держать загруженными необходимые страницы памяти в физической памяти.

c) Буферизация в ядре с копированием в пространство пользователя — страница загружается только когда буфер ядра полный, данные из буфера ядра в буфер пользователя копируется за одну операцию. Проблема может возникнуть, когда буфер ядра полный, а страница буфера пользователя еще не загружена.

d) Двойная буферизация в ядре — если один буфер заполнен, и пока он выгружается, символы пишутся во второй буфер.

Сообщения об ошибках

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

Захват и освобождение выделенных устройств

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

Независимый от устройств размер блока

Размер блока должен быть одинаковый для верхних уровней, и не зависеть от устройств (размеров секторов на диске).

9.4. Программное обеспечение ввода-вывода пространства пользователя

Функции этого обеспечения:

  • Обращение к системным вызовам ввода-вывода (через библиотечные процедуры).
  • Форматный ввод-вывод (меняют формат, например, в ASCII)
  • Спулинг (для выделенных устройств) — создается процесс (например, демон печати) и каталог спулера.

Обобщение уровней и функций ввода-вывода

Уровни и основные функции системы ввода-вывода

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

Блокирующиеся, неблокирующиеся и асинхронные системные вызовы

Все системные вызовы, связанные с осуществлением операций ввода-вывода, можно разбить на три группы по способам реализации взаимодействия процесса и устройства ввода-вывода.

· К первой, наиболее привычной для большинства программистов группе относятся блокирующиеся системные вызовы. Как следует из самого названия, применение такого вызова приводит к блокировке инициировавшего его процесса, т. е. процесс переводится операционной системой из состояния исполнение в состояние ожидание. Завершив выполнение всех операций ввода-вывода, предписанных системным вызовом, операционная система переводит процесс из состояния ожидание в состояние готовность. После того как процесс будет снова выбран для исполнения, в нем произойдет окончательный возврат из системного вызова. Типичным для применения такого системного вызова является случай, когда процессу необходимо получить от устройства строго определенное количество данных, без которых он не может выполнять работу далее.

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

· К третьей группе относятся асинхронные системные вызовы. Процесс, использовавший асинхронный системный вызов, никогда в нем не блокируется. Системный вызов инициирует выполнение необходимых операций ввода-вывода и немедленно возвращается, после чего процесс продолжает свою регулярную деятельность. Об окончании завершения операции ввода-вывода операционная система впоследствии информирует процесс изменением значений некоторых переменных, передачей ему сигнала или сообщения или каким-либо иным способом. Необходимо четко понимать разницу между неблокирующимися и асинхронными вызовами. Неблокирующийся системный вызов для выполнения операции read вернется немедленно, но может прочитать запрошенное количество байтов, меньшее количество или вообще ничего. Асинхронный системный вызов для этой операции также вернется немедленно, но требуемое количество байтов рано или поздно будет прочитано в полном объеме.

Буферизация и кэширование

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

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

· Вторая причина буферизации – это разные объемы данных, которые могут быть приняты или получены участниками обмена единовременно. Возьмем другой пример. Пусть информация поставляется модемом и записывается на жесткий диск. Помимо обладания разными скоростями совершения операций, модем и жесткий диск представляют собой устройства разного типа. Модем является символьным устройством и выдает данные байт за байтом, в то время как диск является блочным устройством и для проведения операции записи для него требуется накопить необходимый блок данных в буфере. Здесь также можно применять более одного буфера. После заполнения первого буфера модем начинает заполнять второй, одновременно с записью первого на жесткий диск. Поскольку скорость работы жесткого диска в тысячи раз больше, чем скорость работы модема, к моменту заполнения второго буфера операция записи первого будет завершена, и модем снова сможет заполнять первый буфер одновременно с записью второго на диск.

· Третья причина буферизации связана с необходимостью копирования информации из приложений, осуществляющих ввод-вывод, в буфер ядра операционной системы и обратно. Допустим, что некоторый пользовательский процесс пожелал вывести информацию из своего адресного пространства на внешнее устройство. Для этого он должен выполнить системный вызов с обобщенным названием write, передав в качестве параметров адрес области памяти, где расположены данные, и их объем. Если внешнее устройство временно занято, то возможна ситуация, когда к моменту его освобождения содержимое нужной области окажется испорченным (например, при использовании асинхронной формы системного вызова). Чтобы избежать возникновения подобных ситуаций, проще всего в начале работы системного вызова скопировать необходимые данные в буфер ядра операционной системы, постоянно находящийся в оперативной памяти, и выводить их на устройство из этого буфера.

Под словом кэш (cash – «наличные»), этимологию которого мы не будем здесь рассматривать, обычно понимают область быстрой памяти, содержащую копию данных, расположенных где-либо в более медленной памяти, предназначенную для ускорения работы вычислительной системы. Мы с вами сталкивались с этим понятием при рассмотрении иерархии памяти. В базовой подсистеме ввода-вывода не следует смешивать два понятия, буферизацию и кэширование, хотя зачастую для выполнения этих функций отводится одна и та же область памяти. Буфер часто содержит единственный набор данных, существующий в системе, в то время как кэш по определению содержит копию данных, существующих где-нибудь еще. Например, буфер, используемый базовой подсистемой для копирования данных из пользовательского пространства процесса при выводе на диск, может в свою очередь применяться как кэш для этих данных, если операции модификации и повторного чтения данного блока выполняются достаточно часто.

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

Spooling и захват устройств

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

Рассмотрим в качестве внешнего устройства принтер. Хотя принтер не может печатать информацию, поступающую одновременно от нескольких процессов, может оказаться желательным разрешить процессам совершать вывод на принтер параллельно. Для этого операционная система вместо передачи информации напрямую на принтер накапливает выводимые данные в буферах на диске, организованных в виде отдельного spool-файла для каждого процесса. После завершения некоторого процесса соответствующий ему spool-файл ставится в очередь для реальной печати. Механизм, обеспечивающий подобные действия, и получил название spooling.

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

Обеспечение spooling и механизма захвата устройств является прерогативой базовой подсистемы ввода-вывода.

Обработка прерываний и ошибок

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

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

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

Планирование запросов

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

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

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

9.5. Принципы, заложенные в подсистему управления вводом-выводом в ОС UNIX

1. Эта подсистема построена единообразно с подсистемой управления данными (файловой системой). Пользователю предоставляется унифицированный способ доступа как к ПУ, так и к файлам. Под файлом в ОС UNIX понимают набор данных на диске, видеотерминале и т.д.; любое ПУ рассматривается как специальный файл. При запросе программного процесса о выводе данных в специальный файл ОС перехватывает запрос и направляет данные на соответствующее устройство. Аналогично организуется чтение данных из специального файла — это прием данных с ПУ. Таким образом, доступ, например, к файлу на диске и к специальному файлу дисплея обеспечивается одним и тем же набором системных вызовов.

2. Другая особенность подсистемы ввода-вывода в ОС UNIX заключается в том, что она работает как синхронная система. Любой программный процесс, требующий ввода данных, приостанавливается в точке, где он выдал запрос, до тех пор, пока не завершится операция ввода из указанного специального файла. При выводе процесс приостанавливается в точке запроса на вывод данных вплоть до того момента, пока выводимые данные будут приняты системой в буфер пользователя. Такая организация ввода-вывода приводит в мультипрограммном режиме работы ЭВМ к повышению эффективности использования времени ЦП вследствие уменьшения простоев этого ЦП. Заметим, что в системах реального времени (СРВ) чаще используется асинхронный принцип работы подсистемы ввода-вывода, так как в этом случае уменьшается время реакции СРВ на события, требующие немедленной обработки.

Лекция «Лекция 5» также может быть Вам полезна.

3. Для управления ПУ в ОС UNIX используются 2 вида интерфейса с этими ПУ: байториентированный и блокориентированный. Блокориентированный интерфейс обеспечивает связь с ПУ, к которым можно адресоваться как к последовательности блоков по 512 байт. Такими ПУ в основном являются ВЗУ. Основой организации такого интерфейса является система буферизации, поддерживаемая в ОП. Байториентированный интерфейс используется для доступа к печатающему устройству, клавиатуре дисплея и некоторым другим устройствам, при этом буферизация не используется.

4. В состав системы управления вводом-выводом входят также драйверы и набор специальных таблиц для логического подключения ядра ОС к драйверам различных устройств. Каждый драйвер содержит 2 части и может обслуживать несколько устройств одного типа.

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

Вторая часть драйвера — это модуль обработки прерываний. При управлении большинством ПУ в ОС UNIX используется метод прерываний. Для байториентированного ПУ прерывание возникает после передачи байта, для блокориентированного ПУ — после передачи блока. Модуль обработки прерывания, являющийся частью драйвера, или прекращает работу с ПУ, или продолжает работу с ним, выдавая ему новое задание.

Некоторые из изложенных принципов построения системы ввода-вывода ОС UNIX были реализованы в ОС, созданных позднее, например, в MS DOS, функционирующей в ЭВМ IBM РС с МП типа 80х86.

Рассмотрим еще одну особенность построения системы ввода-вывода. В мультипрограммном режиме работы ЭВМ, используемом в СРВ или в системах разделения времени, к одному и тому же ПУ может появиться очередь запросов от различных программ. Для организации последовательного выполнения этим ПУ поступивших к нему заявок на обслуживание в ОП должна быть организована специальная таблица, содержимое которой однозначно отображает в каждый момент времени очередность и содержание поступивших заявок; после выполнения ПУ очередной заявки данные о ней исключаются из рассматриваемой таблицы. Такие таблицы должны быть организованы для большинства ПУ, взаимодействующих с ЭВМ.

In this tutorial we will learn about how Input and Output is handled in a computer system.


Input/Output Subsystem

The I/O subsystem of a computer provides an efficient mode of communication between the central system and the outside environment. It handles all the input-output operations of the computer system.


Peripheral Devices

Input or output devices that are connected to computer are called peripheral devices. These devices are designed to read information into or out of the memory unit upon command from the CPU and are considered to be the part of computer system. These devices are also called peripherals.

For example: Keyboards, display units and printers are common peripheral devices.

There are three types of peripherals:

  1. Input peripherals : Allows user input, from the outside world to the computer. Example: Keyboard, Mouse etc.
  2. Output peripherals: Allows information output, from the computer to the outside world. Example: Printer, Monitor etc
  3. Input-Output peripherals: Allows both input(from outised world to computer) as well as, output(from computer to the outside world). Example: Touch screen etc.

Interfaces

Interface is a shared boundary btween two separate components of the computer system which can be used to attach two or more components to the system for communication purposes.

There are two types of interface:

  1. CPU Inteface
  2. I/O Interface

Let’s understand the I/O Interface in details,

Input-Output Interface

Peripherals connected to a computer need special communication links for interfacing with CPU. In computer system, there are special hardware components between the CPU and peripherals to control or manage the input-output transfers. These components are called input-output interface units because they provide communication links between processor bus and peripherals. They provide a method for transferring information between internal system and input-output devices.


Modes of I/O Data Transfer

Data transfer between the central unit and I/O devices can be handled in generally three types of modes which are given below:

  1. Programmed I/O
  2. Interrupt Initiated I/O
  3. Direct Memory Access

Programmed I/O

Programmed I/O instructions are the result of I/O instructions written in computer program. Each data item transfer is initiated by the instruction in the program.

Usually the program controls data transfer to and from CPU and peripheral. Transferring data under programmed I/O requires constant monitoring of the peripherals by the CPU.


Interrupt Initiated I/O

In the programmed I/O method the CPU stays in the program loop until the I/O unit indicates that it is ready for data transfer. This is time consuming process because it keeps the processor busy needlessly.

This problem can be overcome by using interrupt initiated I/O. In this when the interface determines that the peripheral is ready for data transfer, it generates an interrupt. After receiving the interrupt signal, the CPU stops the task which it is processing and service the I/O transfer and then returns back to its previous processing task.


Direct Memory Access

Removing the CPU from the path and letting the peripheral device manage the memory buses directly would improve the speed of transfer. This technique is known as DMA.

In this, the interface transfer data to and from the memory through memory bus. A DMA controller manages to transfer data between peripherals and memory unit.

Many hardware systems use DMA such as disk drive controllers, graphic cards, network cards and sound cards etc. It is also used for intra chip data transfer in multicore processors. In DMA, CPU would initiate the transfer, do other operations while the transfer is in progress and receive an interrupt from the DMA controller when the transfer has been completed.

Input/Output Organisation

Above figure shows block diagram of DMA



Want to learn coding and don’t know where to start?

Try out our

Interactive Courses

for Free 🥳 😯 🤩

learn to code footer Ad

Понравилась статья? Поделить с друзьями:
  • Браслеты из ниток шамбала пошаговая инструкция
  • Фитоверм форте инструкция по применению для комнатных цветов
  • Руководство по формату fb2
  • Руководство по оформлению текстов
  • Руководство по эксплуатации тойота аристо