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

Обновлено: 03.07.2024

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

Содержание

Компоненты устройства ввода-вывода

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

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

Устройство имеет простые интерфейсы, и должно удовлетворять двум обязательным условиям: [Источник 1]

  1. Обладать простыми возможностями;
  2. Отвечать общим стандартам.

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

Типы устройств ввода-вывода - обычно выделяют 2 типа устройств ввода-вывода - блок-ориентированные и байт-ориентированные. [Источник 2]

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

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

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

Цикл жизни драйвера устройств:

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

Модели построения драйвера устройств:

Рассмотрим каждую из них.

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

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

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

Способы установки драйвера в ядро

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

Ввода и вывод данных

Ввод и вывод данных можно осуществлять тремя способами.

Способ 1 : ( способ активного ожидания) - пользовательская программа производит системный вызов, затем драйвер приступает к процессу ввода-вывода. При этом он выполняет короткий цикл, постоянно спрашивая устройство и отслеживая завершение операции. Именно опрос устройства и есть самый главный недостаток данного способа. После завершения операции ввода-вывода драйвер помещает данные в нужное место и возвращает управление.

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

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

Способ 3 : в данном способе используется специальный контроллер прямого доступа к памяти (Direct Memory Access (DMA) ), который может управлять потоками битов между оперативной памятью и некоторыми контроллерами без постоянного вмешательства центрального процессора. Центральный процессор, в свою очередь, выполняет настройку контроллера DMA, сообщая ему о том, сколько байтов следует передать, какое устройство и адрес памяти задействовать, также в каком направлении передать данные, а затем дает ему возможность действовать самостоятельно [Источник 3] .

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

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

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

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

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

ОС выполняет ввод-вывод, записывая команды в регистры контроллера. Например, контроллер гибкого диска IBM PC принимает 15 команд, таких как READ, WRITE, SEEK, FORMAT и т.д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. При завершении команды контроллер организует прерывание для того, чтобы передать управление процессором операционной системе, которая должна проверить результаты операции. Процессор получает результаты и статус устройства, читая информацию из регистров контроллера.

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

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

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

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

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

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

  • Обработка прерываний,
  • Драйверы устройств,
  • Независимый от устройств слой операционной системы,
  • Пользовательский слой программного обеспечения.

Рис. 2.30. Многоуровневая организация подсистемы ввода-вывода

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

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

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

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

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

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

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

Независимый от устройств слой операционной системы

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

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

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

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

Пользовательский слой программного обеспечения

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

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

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

Аннотация: В лекции рассматриваются основные физические и логические принципы организации ввода-вывода в вычислительных системах.

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

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

Объяснение того, что именно делает процессор при обработке информации, как он решает задачу и какой алгоритм выполняет, не входит в задачи нашего курса. Это скорее относится к курсу "Алгоритмы и структуры данных", с которого обычно начинается изучение информатики. Как операционная система управляет обработкой информации, мы разобрали ранее, в деталях описав два состояния процессов – исполнение (а что его описывать то?) и готовность (очереди планирования и т. д.), а также правила, по которым осуществляется перевод процессов из одного состояния в другое (алгоритмы планирования процессов).

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

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

Физические принципы организации ввода-вывода

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

Общие сведения об архитектуре компьютера

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

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

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

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

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

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

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

  • На адресной шине процессор должен выставить сигналы, соответствующие адресу порта, в который будет осуществляться передача информации, в адресном пространстве ввода-вывода .
  • На шину данных процессор должен выставить сигналы, соответствующие информации, которая должна быть передана в порт.
  • После выполнения действий 1 и 2 на шину управления выставляются сигналы, соответствующие операции записи и работе с устройствами ввода-вывода (переключение адресных пространств!), что приведет к передаче необходимой информации в нужный порт.

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

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

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

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

Модуль 7. Управление устройствами

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

Подсистема Управление периферийными устройствами (УПУ) предназначена для выполнения следующих функций:

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

Физическая организация периферийных устройств

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

  • быстродействием;
  • порцией обмена информации (1 бит, байт, слово, сектор, трек);
  • системой кодирования;
  • набором операций управления устройством.

Внешнее устройство состоит из механической и электронной компонент, и узким местом является механическая часть.

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

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

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

По способам параллельного выполнения запросов ЦП на ввод/вывод каналы ввода/вывода подразделяются на три типа:

1.Байт-мультиплексные каналы, допускающие одновременный побайтовый обмен с несколькими медленными устройствами.

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

3. Блок-мультиплексные каналы, допускающие одновременный блочный обмен данными с несколькими устройствами.

Как мы уже замечали, КВВ решает только проблему различия быстродействия ПУ и ЦП. Для решения же проблемы стандартного интерфейса ПУ с внутрисистемной шиной (магистралью) ЭВМ предназначено устройство управления (УУ) ПУ, называемое контроллером или адаптером устройства.

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

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

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

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

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

ОС выполняет ввод-вывод, записывая команды в регистры контроллера. Например, контроллер гибкого диска IBM PC принимает 15 команд, таких, как READ, WRITE, SEEK, FORMAT и т.д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. При завершении команды контроллер организует прерывание для того, чтобы передать управление процессору операционной системы, которая должна проверить результаты операции. Процессор получает результаты и статус устройства, читая информацию из регистров контроллера.

В настоящее время распространены три основные схемы организации ввода/вывода, соответствующие конфигурациям микро-, мини- и больших ЭВМ (рис. 1,2,3 соответственно).

Рис.1. Схема организации ввода/вывода для персональных ЭВМ

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

УПДП - устройство прямого доступа памяти (DMA-direct memory access) обеспечивает пересылку блоков данных независимо от ЦП и упрощает канал ввода/вывода.

На больших ЭВМ контроллер может быть связан с несколькими каналами ввода/вывода, а периферийное устройство - с несколькими контроллерами.

Контроллер может иметь несколько адресов и путей доступа.

Адресация периферийных устройств на больших ЭВМ осуществляется составным адресом, включающим: номер канала, номер котроллера, номер устройства на контроллере:

№ канала №контр. № устройства.

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

Доступ к периферийным устройствам здесь осуществляется как обычный доступ к ячейкам ОП, что значительно упрощает программирование ввода/вывода./font>

Рисунок 2. Схема организации ввода/ вывода для мини ЭВМ

Рис.10.3. Схема организации ввода/вывода для многомашинного комплекса

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

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

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

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

  1. Независимый от устройств слой операционной системы.
  2. Обработка прерываний.
  3. Драйверы устройств.
  4. Пользовательский слой программного обеспечения.

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

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

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

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

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

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

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

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

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

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

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

  • по опросу готовности;
  • по прерываниям;
  • по прямому доступу к памяти.

По опросу готовности драйвер выполняет следующие действия:

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

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

Достоинство - простота. Недостаток - синхронный ввод/вывод, отсутствие параллелизма между вводом/выводом и обработкой.

При работе по прерываниям действия выполняются в следующей последовательности:

  1. Инициализируется операция ввода/вывода и разрешает прерывания от устройства.
  2. Возвращает управление ЦП для выполнения других действий до момента прерывания.
  3. При прерывании происходит переход на программу обработки, в которой проверяется отсутствие ошибки ввода/вывода, и после завершения обработки осуществляется возврат на прерванную программу.

Достоинство - асинхронный ввод/вывод, то есть параллельная работа ЦП и ПУ. Используется в мультипрограммных системах.

При работе по прямому доступу к памяти (ПДП) (Direct Memory Access-DMA)действия выполняются в следующем порядке:

  1. ЦП запускает канальную программу командой "запустить канал", которая содержит адрес канала и периферийного устройства. С этого момента канал и ЦП работают параллельно.
  2. Канал выполняет свою программу, которая заканчивается нормально либо с ошибкой, либо по команде ЦП "остановить канал".
  3. В любой момент ЦП может проверить состояние канала, выполняющего канальную программу, командой "тестировать канал". Эта проверка не влияет на выполнение программы. Обработка ошибок ввода/вывода здесь осуществляется супервизором ввода/вывода.

Хотя большая часть программного обеспечения ввода-вывода находится внутри ОС, некоторая его часть содержится в библиотеках, связанных с пользовательскими программами. Системные вызовы, включающие вызовы ввода-вывода, обычно делаются библиотечными процедурами. Если программа, написанная на языке С, содержит вызов count = write (fd, buffer, nbytes), то библиотечная процедура write будет связана с программой. Набор подобных процедур является частью системы ввода-вывода. В частности, форматирование ввода или вывода выполняется библиотечными процедурами. Примером может служить функция printf языка С, которая принимает строку формата и, возможно, некоторые переменные в качестве входной информации, затем строит строку символов ASCII и делает вызов write для вывода этой строки. Стандартная библиотека ввода-вывода содержит большое число процедур, которые выполняют ввод/вывод и работают как часть пользовательской программы.

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

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

Организация программного обеспечения ввода/вывода

Использование асинхронных и синхронных передач

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

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

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

Независимый от устройств слой операционной системы

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

1. Обеспечения общего интерфейса к драйверам устройств

2. Именования устройств

3. Защита устройств

4. Обеспечения независимого размера блока

6. Распределение памяти на блок-ориентированных устройствах

7. Распределение и освобождения выделенных устройств

8. Уведомление об ошибках

Пользовательский слой программного обеспечения.

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

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

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