Обслуживание ввода-вывода
Одной из главных задач ОС является обеспечение обмена данными между приложениями и периферийными устройствами компьютера. Собственно ради выполнения этой задачи и были разработаны первые системные программы, послужившие прототипами операционных систем. В современной ОС функции обмена данными с периферийными устройствами выполняет подсистема ввода-вывода. Клиентами этой подсистемы являются не только пользователи и приложения, но и некоторые компоненты самой ОС, которым требуется получение системных данных или их вывод, например подсистеме управления процессами при смене активного процесса необходимо записать на диск контекст приостанавливаемого процесса и считать с диска контекст активизируемого процесса. Основными компонентами подсистемы ввода-вывода являются драйверы, управляющие внешними устройствами, и файловая система. К подсистеме ввода-вывода можно также с некоторой долей условности отнести и диспетчер прерываний. Условность заключается в том, что диспетчер прерываний обслуживает не только модули подсистемы ввода-вывода, но и другие модули ОС, в частности такой важный модуль, как планировщик (диспетчер) потоков. Но из-за того, что планирование работ подсистемы ввода-вывода составляет основную долю нагрузки диспетчера прерываний, его вполне логично рассматривать как ее составную часть (к тому же первопричиной появления в компьютерах системы прерываний были в свое время именно операции с устройствами ввода-вывода).
Основными задачами подсистемы ввода-вывода являются: · организация параллельной работы процессора и устройств ввода-вывода, при обеспечении приемлемого уровня реакции каждого драйвера и минимизации общей загрузки процессора;
· согласование скоростей работы процессора, оперативной памяти и устройств ввода-вывода; · разделение устройств ввода-вывода между процессами; · обеспечение удобного логического интерфейса к устройствам ввода-вывода.
Структура системы ввода-вывода. Подсистема ввода-вывода обычно имеет ярко выраженную многослойную структуру, которая помогает объединить большое количество разнотипных драйверов в систему с общим интерфейсом. Все устройства ввода-вывода различаются по нескольким направлениям: 1) скорость обмена информацией может варьироваться в диапазоне от нескольких байт в секунду (клавиатура) до нескольких гигабайт в секунду (сетевые карты); 2) некоторые устройства могут быть использованы параллельно несколькими процессами (являются разделяемыми), в то время как другие требуют монопольного захвата процессом; 3) устройства могут запоминать выведенную информацию для ее последующего ввода или не обладать этой функцией. Устройства, запоминающие информацию, в свою очередь, могут дифференцироваться по формам доступа к сохраненной информации: обеспечивать к ней последовательный доступ в жестко заданном порядке или уметь находить и передавать только необходимую порцию данных; 4) часть устройств умеет передавать данные только по одному байту последовательно (символьные устройства, например, принтер, манипулятор мышь, сканер), а часть устройств умеет передавать блок байт как единое целое (блочные устройства, например, диск); 5) существуют устройства, предназначенные или только для ввода, или только для вывода информации, а также устройства, которые могут совершать и ввод, и вывод.
Ввод-вывод – одна из самых сложных областей проектирования операционных систем, в которой сложно применить общий подход из-за изобилия частных методов.
Сложность возникает из-за огромного числа устройств ввода-вывода разнообразной природы, которые должна поддерживать ОС. Создатели ОС должны обеспечить эффективное управление этими устройствами, создать удобный и эффективный виртуальный интерфейс, позволяющий прикладным программистам просто считывать или сохранять данные, не обращая внимание на специфику устройств и проблемы распределения устройств между выполняющимися задачами.
Система ввода-вывода, способная объединить в одной модели широкий набор устройств, должна быть универсальной. Она должна учитывать потребности существующих устройств, от простой мыши до клавиатур, принтеров, графических дисплеев, дисковых накопителей, компакт-дисков и даже сетей. С другой стороны, необходимо обеспечить доступ к устройствам ввода-вывода для множества параллельно выполняющихся задач, причем так, чтобы они как можно меньше мешали друг другу. Поэтому самым главным является следующий принцип: любые операции по управлению вводом-выводом объявляются привилегированными и могут выполняться только кодом самой ОС. Для обеспечения этого принципа в большинстве процессоров даже вводятся режимы пользователя и супервизора. Как правило, в режиме супервизора выполнение команд ввода-вывода разрешено, а в пользовательском режиме — запрещено. Использование команд ввода-вывода в пользовательском режиме вызывает исключение и управление через механизм прерываний передается коду ОС. Хотя возможны и более сложные системы, в которых в ряде случаев пользовательским программам разрешено непосредственное выполнение команд ввода-вывода.
Помимо разделяемых устройств ввода-вывода существуют неразделяемые устройства. Разделяемые устройства – это устройства с прямым доступом (диск, флешка). Неразделяемые устройства — принтер. Операционные системы должны управлять и теми и другими устройствами, предоставляя возможность параллельно решающимся задачам их использовать. Прикладные программы (а в общем случае все обрабатывающие программы) не могут непосредственно связываться с устройствами ввода-вывода независимо от использования устройств (монопольно или совместно). Установив соответствующие значения параметров в запросе на ввод-вывод, определяющих требуемую операцию и количество потребляемых ресурсов, они могут передать управление супервизору ввода-вывода, который и запускает необходимые логические и физические операции.
Для организации использования многими параллельно выполняющимися задачами устройств ввода-вывода, которые не могут быть разделяемыми, вводится понятие виртуальных устройств. Использование принципа виртуализации позволяет повысить эффективность вычислительной системы. Главная задача спулинга (SPOOLing — simultaneous peripheral operation on-line, то есть имитация работы с устройством в режиме онлайн) — создать видимость параллельного разделения устройства ввода-вывода с последовательным доступом, которое фактически должно использоваться только монопольно и быть закрепленным. Например, несколько приложений должны выводить на печать результаты своей работы. Если разрешить каждому такому приложению печатать строку по первому же требованию, то это приведет к потоку строк, не представляющих никакой ценности. Однако можно каждому вычислительному процессу предоставлять не реальный, а виртуальный принтер и поток выводимых символов (или управляющих кодов для их печати) сначала направлять в специальный файл. Затем, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений выводить содержимое спул-файла на принтер. Системный процесс, который управляет спул-файлом, называется спулером (spool-reader или spool-writer).
Программирование задач управления вводом-выводом является наиболее сложным и трудоемким, требующим очень высокой квалификации. Поэтому код, позволяющий осуществлять операции ввода-вывода, стали оформлять в виде системных библиотечных процедур. Потом его стали включать не в системы программирования, а в операционную систему с тем, чтобы в каждую отдельно взятую программу его не вставлять, а только позволить обращаться к такому коду. Системы программирования вставляют в машинный код необходимые библиотечные подпрограммы ввода-вывода и обращения к тем системным программным модулям, которые, собственно, и управляют операциями обмена между оперативной памятью и внешними устройствами. Разработчики операционных систем получили возможность освободиться от написания и тестирования специфических программных частей, получивших название драйверов, передав эту деятельность производителям самих внешних устройств.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|