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

Обновлено: 17.05.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аннотация: В лекции рассмотрены следующие вопросы: организация ввода-вывода в компьютерной системе и ее поддержка в ОС; контролллеры; драйверы; контроллеры с прямым доступом к памяти (Direct Memory Access – DMA); цикл выполнения задания в ОС, чередование вычислений и ввода вывода, прерывания.

Презентацию к данной лекции Вы можете скачать здесь.

Введение

Устройства и системы ввода-вывода в современных компьютерных и операционных системах весьма разнообразны. В лекции рассмотрены следующие вопросы:

  • Аппаратура ввода-вывода
  • Интерфейс приложений для ввода-вывода
  • Подсистема ввода-вывода в ядре ОС
  • Преобразование запросов на ввод-вывод в аппаратные операции
  • Производительность систем ввода-вывода.

Аппаратура ввода-вывода

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

  • клавиатуру и мышь;
  • жесткие диски ( HDD ), включая внутренние и внешние;
  • flash-память;
  • ленточные стримеры ;
  • компакт-диски BluRay, DVD , CD;
  • твердотельные накопители на магнитных дисках ( solid state disks – SSD );
  • ZIP drives , JAZ drives – уже устаревающие, но еще используемые устройства для резервного копирования со съемными носителями (их постепенно вытесняет флэш-память , физические размеры модулей которой гораздо меньше, а емкость – больше);
  • магнито-оптические диски – ныне уже устаревшие устройства для резервного копирования, но долгое время использовавшиеся;
  • устройства для мультимедийного ввода-вывода: порты и адаптеры IEEE 1394 ( Fire-Wire ) для подключения цифровых видеоустройств; порты и адаптеры High Definition Multimedia Interface ( HDMI ) для подключения видеоаппаратуры стандарта High Definition (HD); кард-ридеры для нескольких форматов (SmartMedia и др.) носителей, используемых в цифровых фотоаппаратах ;
  • мониторы, видеокарты (видеоадаптеры) и графические процессоры, в том числе – многоядерные;
  • принтеры, сканеры.

Основные концепции

Рассмотрим общие концепции аппаратуры и ОС, связанные с устройствами ввода-вывода .

Каждое устройство подключается к компьютерной системе через порт – контроллер и разъем (либо беспроводное устройство) для передачи данных между устройством ввода-вывода и компьютером. Каждый порт имеет свое традиционное обозначение и свой номер в системе. Порт может существовать физически, как разъем для проводного соединения и связанный с ним контроллер порта (например, USB – универсальный порт для подключения широкого спектра устройств; LPT – порт для подключения принтеров и сканеров), либо может быть организован операционной системой как виртуальный порт для унификации обработки внешних устройств . Виртуальные порты, обычно – коммуникационные порты ( COM ) с большими номерами – например, COM10, COM15, - организуются для обмена с устройствами беспроводной связи – например, мобильными телефонами и органайзерами. Беспроводная связь чаще всего организуется через Bluetooth – радиосвязь на расстоянии до 20 м, в новых стандартах – до 1 км.

Шина (bus) - это цепочка устройств прямого доступа в компьютерной системе, через которую передается информация от одних устройств к другим. Обычно в настольных и портативных компьютерах используется шина PCI (Peripheral Computer Interface), тактовая частота которой в современных компьютерах 1 – 1.5 GHz . Она фактически и определяет суммарную производительность компьютерной системы. К шине PCI подключены контроллеры внешних устройств и портов.

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

Типовая структура общей шины персонального компьютера изображена на рис. 21.1.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

электронная - контроллерилиадаптер

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

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

  • Для учеников 1-11 классов и дошкольников
  • Бесплатные сертификаты учителям и участникам

Основные принципы организации ввода — вывода

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

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

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

Читайте также: