Мегаобучалка Главная | О нас | Обратная связь


Управление устройствами ввода–вывода данных



2019-07-03 1010 Обсуждений (0)
Управление устройствами ввода–вывода данных 0.00 из 5.00 0 оценок




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

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

Устройства хранения данных к устройствам ввода–вывода относить некорректно, поскольку здесь преобразования информации ради доступности внешнему миру не происходит. Устройства хранения вместе с устройствами ввода–вывода можно объединить общим понятием «внешние устройства».

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

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

Различают три типа действий с периферийными устройствами:

· операции чтения/записи данных;

· операции управления внешними устройствами;

· операции по проверке состояния внешних устройств.

 

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

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

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

 

Подсистема ввода–вывода, способная эффективно решать такие задачи, должна быть универсальной. Поэтому самым главным является следующий принцип: любые операции по управлению вводом–выводом объявляются привилегированными и могут выполняться только кодом самой ОС. Как правило, в режиме супервизора выполнение команд ввода–вывода разрешено, а в пользовательском – запрещено. Использование команд ввода–вывода в пользовательском режиме вызывает ошибку и сообщение системы Privileget instruction.

Различают две группы устройств ввода–вывода: символьные и блочные.

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

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

Помимо общих операций, некоторые устройства могут выполнять операции специфические, свойственные только им. Для выполнения таких специфических действий в интерфейс между драйвером и базовой подсистемой ввода–вывода обычно входит еще одна функция, позволяющая непосредственно передавать драйверу устройства произвольную команду с произвольными параметрами, что позволяет задействовать любую возможность драйвера без изменения интерфейса. В операционной системе Unix такая функция получила название ioctl (от input–output control). Помимо функций read, write, seek (для блочных устройств), get, put (для символьных устройств) и ioctl, в состав интерфейса обычно включают еще следующие функции:

· инициализации или повторной инициализации работы драйвера и устройства – open;

· временного завершения работы с устройством (может, например, вызывать отключение устройства) – close;

· опроса состояния устройства;

· останова драйвера, которая вызывается при останове операционной системы или выгрузке драйвера из памяти, – halt.

 

Приведенные выше операции, выполняемые драйверами внешних устройств, характерны для большинства операционных систем, соответствующие функции присутствуют в интерфейсах к ним. В ОС Windows NT для управления устройствами ввода–вывода используется функция DeviceIoControl(). Функция DeviceIoControl() – это интерфейс общего назначения, который может отправлять управляющие коды разнообразным устройствам. Каждый управляющий код представляет операцию, выполняемую драйвером. Приложения могут использовать стандартные управляющие коды или специальные для устройства управляющие коды, чтобы выполнить прямые операции ввода и вывода данных на накопителе на жестком диске или устройстве чтения компакт–дисков (CD–ROM). Большинство стандартных управляющих кодов определяются в заголовочных файлах системы программирования.

Режимы управления вводом–выводом. Имеются два основных режима ввода–вывода:

· режим обмена с опросом готовности устройства ввода–вывода;

· режим обмена с прерываниями.

 

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

В ОС Windows, Unix c любой программой в стадии ее выполнения связаны следующие стандартные потоки ввода–вывода:

· стандартный поток ввода – это обычно клавиатура (дескриптор потока, дескриптор открытого файла df = 0);

· стандартный поток вывода – это обычно монитор (дескриптор потока df = 1);

· стандартный поток вывода ошибок и диагностических сообщений (стандартный поток ошибок) – это обычно монитор (дескриптор потока df =2).

 

Любой другой открытый в программе файл будет иметь дескриптор, равный 3.

Поток представляет собой некоторый буфер в памяти, куда поступает или откуда выбирается информация. Преимущество использования стандартных потоков состоит в том, что их можно переназначать с одного устройства ввода–вывода на другое, а также переназначить ввод–вывод информации из устройства в файл. В Windows сохранились имена файлов, которые зарезервированы в DOS – это COM, LPT,CON,AUX, NUL. Попытка создать файл с таким именем приводит к перенаправлению информации на соответствующий порт или устройство.

Для перенаправления ввода–вывода используются следующие символы:

 

> переназначает стандартный поток вывода другому устройству (или файлу). Если этот файл существует, он очищается, и на его место записывается новая информация;
>> то же самое, но если файл существует, то новая информация записывается в конец этого файла;
< переадресация стандартного ввода.

 

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

Пример использования переадресации

program < indata.dat >> outdata.txt

В данном примере входные данные программы program читаются из файла indata.dat и записываются в файл outdata.txt.

В примере

copy < mylist > aux

данные из файла mylist программой copy выводятся в последовательный порт.

Программная реализация переназначения ввода–вывода выглядит так:

# include <io.h>

# include <stdio.h>

void main ( )

{

char c[1],ch;

while( read(0,c,1) == 1) write(1,c,1);

// while( (ch = getchar()) != EOF) putchar( ch );– или так

}

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

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

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



2019-07-03 1010 Обсуждений (0)
Управление устройствами ввода–вывода данных 0.00 из 5.00 0 оценок









Обсуждение в статье: Управление устройствами ввода–вывода данных

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1010)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)