Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 1027

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

159
тельском режиме – запрещено. Использование команд ввода/вывода в пользова- тельском режиме вызывает исключение
1
и управление через механизм прерываний передаётся коду ОС. Хотя возможны и более сложные системы, в которых в ряде случаев пользовательским программам разрешено непосредственное выполнение команд ввода/вывода.
Еще раз подчеркнем, что, прежде всего, мы говорим о мультипрограммных
ОС, для которых существует проблема разделения ресурсов. Одним из основных видов ресурсов являются устройства ввода/вывода и соответствующее программ- ное обеспечение, с помощью которого осуществляется управление обменом дан- ными между внешними устройствами и оперативной памятью. Помимо разделяе- мых устройств ввода/вывода (эти устройства допускают разделение посредством механизма доступа) существуют неразделяемые устройства. Примерами разделяе- мого устройства могут служить накопитель на магнитных дисках, устройство для чтения компакт-дисков. Это устройства с прямым доступом. Примеры неразделяе- мых устройств – принтер, накопитель на магнитных лентах. Это устройства с по- следовательным доступом. Операционные системы должны управлять и теми и другими устройствами, предоставляя возможность параллельно выполняющимся задачам использовать различные устройства ввода/вывода.
Можно назвать три основные причины, по которым нельзя разрешать каждой отдельной пользовательской программе обращаться к внешним устройствам непо- средственно:
♦ Необходимость разрешать возможные конфликты доступа к устройствам ввода/вывода. Например, две параллельно выполняющиеся программы пытаются вывести на печать результаты своей работы. Если не предусмотреть внешнее управление устройством печати, то в результате мы можем получить абсолютно нечитаемый текст, так как каждая программа будет время от времени выводить свои данные, которые будут перемежаться данными другой программы. Другой пример: ситуация, когда одной программе необходимо прочитать данные с некото-
1
Исключение – это определенный вид внутреннего прерывания. Этим термином, во-первых, обозначают некоторое множество синхронных прерываний, а во-вторых, подчеркивают, что ситуация, вызвавшая запрос на прерывание,
является исключительной, то есть, отличается от обычной.


160
рого сектора магнитного диска, а другой – записать результаты в другой сектор то- го же накопителя. Если операции ввода/вывода не будут отслеживаться каким-то третьим (внешним) процессом-арбитром, то после позиционирования магнитной головки для первого запроса может тут же появиться команда позиционирования головки для второй задачи, и обе операции ввода/вывода не смогут быть выполне- ны корректно.
♦ Желание увеличить эффективность использования этих ресурсов. Напри- мер, у накопителя на магнитных дисках время подвода головки чтения/записи к необходимой дорожке и обращение к определенному сектору может значительно
(до тысячи раз) превышать время пересылки данных. В результате, если задачи по очерёди обращаются к цилиндрам, далеко отстоящим друг от друга, то полезная работа, выполняемая накопителем, может быть существенно снижена.
♦ Ошибки в программах ввода/вывода могут привести к краху всех вычисли- тельных процессов, ибо часть операций ввода/вывода осуществляется для самой операционной системы. В ряде ОС системный ввод/вывод имеет существенно бо- лее высокие привилегии, чем ввод/вывод задач пользователя. Поэтому системный код, управляющий операциями ввода/вывода, очень тщательно отлаживается и оп- тимизируется для повышения надёжности вычислений и эффективности использо- вания оборудования.
Итак, управление вводом/выводом осуществляется операционной системой,
компонентом, который чаще всего называют супервизором ввода/вывода, В пере- чень основных задач, возлагаемых на супервизор, входят следующие;
♦ супервизор ввода/вывода получает запросы на ввод/вывод от прикладных задач и от программных модулей самой операционной системы. Эти запросы про- веряются на корректность, и если запрос выполнен по спецификациям и не содер- жит ошибок, он обрабатывается дальше, в противном случае пользователю (задаче)
выдается соответствующее диагностическое сообщение о недействительности (не- корректности) запроса;
♦ супервизор ввода/вывода вызывает соответствующие распределители кана- лов и контроллеров, планирует ввод/вывод (определяет очерёдность предостав-

161
ления устройств ввода/вывода задачам, затребовавшим их). Запрос на ввод/вывод либо тут же выполняется, либо ставится в очередь на выполнение;
♦супервизор ввода/вывода инициирует операции ввода/вывода (передаёт управление соответствующим драйверам) и в случае управления вводом/выводом с использованием прерываний предоставляет процессор диспетчеру задач с тем, что- бы передать его первой задаче, стоящей в очерёди на выполнение;
♦ при получении сигналов прерываний от устройств ввода/вывода супервизор идентифицирует их (рис.4.1) и передаёт управление соответствующей программе обработки прерывания (как правило, на секцию продолжения драйвера – см. раздел
«Режимы управления вводом/выводом»);
♦ супервизор ввода/вывода осуществляет передачу сообщений об ошибках,
если таковые происходят в процессе управления операциями ввода/вывода;
♦ супервизор ввода/вывода посылает сообщения о завершении операции вво- да/вывода запросившему эту операцию процессу и снимает его с состояния ожида- ния ввода/вывода, если процесс ожидал завершения операции.
В случае, если устройство ввода/вывода является инициативным
1
, управление со стороны супервизора ввода/вывода будет заключаться в активизации соответст- вующего вычислительного процесса (перевод его в состояние готовности к вы- полнению).
Таким образом, прикладные программы (а в общем случае – все обрабатываю- щие программы) не могут непосредственно связываться с устройствами вво- да/вывода независимо от использования устройств (монопольно или совместно).
Установив соответствующие значения параметров в запросе на ввод/вывод, опре- деляющих требуемую операцию и количество потребляемых ресурсов, они могут
1
Инициативным называют такое устройство (обычно это датчики, внешнее устройство, а не устройство вво- да/вывода), по сигналу прерывания от которого запускается соответствующая ему программа. Такая программа, с одной стороны, не является драйвером, и управлять операциями обмена данными нет необходимости. Но, с другой стороны, запуск такой программы осуществляется именно по событиям, связанным с генерацией устройством вво- да/вывода соответствующего сигнала. Разница между драйверами, работающими по прерываниям, и инициативны- ми программами заключается в статусе этих программных модулей. Драйвер является компонентом операционной системы и часто выполняется не как вычислительный процесс, а как системный объект, а инициативная программа является обычным вычислительным процессом, только его запуск осуществляется по инициативе внешнего устрой- ства.


162
передать управление супервизору ввода/вывода, который и запускает необходимые логические и физические операции.
Упомянутый выше запрос на ввод/вывод должен удовлетворять требованиям
API той операционной системы, в среде которой выполняется приложение. Пара- метры, указываемые в запросах на ввод/вывод, передаются не только в вызываю- щих последовательностях, создаваемых по спецификациям API, но и как данные,
хранящиеся в соответствующих системных таблицах. Все параметры, которые бу- дут стоять в вызывающей последовательности, поставляются компилятором и от- ражают требования программиста и постоянные сведения об операционной систе- ме и архитектуре компьютера в целом. Переменные сведения о вычислительной системе (её конфигурация, состав оборудования, состав и особенности системного программного обеспечения) содержатся в специальных системных таблицах. Про- цессору, каналам прямого доступа в память, контроллерам необходимо передавать конкретную двоичную информацию, с помощью которой и осуществляется управ- ление оборудованием. Эта конкретная двоичная информация в виде кодов и дан- ных часто готовится с помощью препроцессоров, но часть её хранится в системных таблицах.
1   ...   10   11   12   13   14   15   16   17   ...   37

Режимы управления вводом/выводом
Как известно, имеются два основных режима ввода/вывода: режим обмена с
опросом готовности устройства ввода/вывода и режим обмена с прерываниями.
Рассмотрим рис. 4.1.
Рис.4.1. Управление вводом/выводом
Оперативная
память
Центральный
процессор или
процессор
ввода/вывода
Устройство
управления
устройством
ввода/вывода
Устройство
ввода/вывода
Сигнал готовности
Команда ввода/вывода
Данные

163
Пусть для простоты управление вводом/выводом осуществляет центральный процессор (в этом случае часто говорят о наличии программного канала обмена данными между внешними устройством и оперативной памятью, в отличие от ка- нала прямого доступа к памяти, при котором управление вводом/выводом осуще- ствляет специальное дополнительное оборудование; эти вопросы мы обсудим не- сколько позже). Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству ввода/вывода. Последнее исполняет ко- манду, транслируя сигналы, понятные центральному устройству и устройству управления в сигналы, понятные устройству ввода/вывода. Но быстродействие устройства ввода/вывода намного меньше быстродействия центрального процессо- ра (порой на несколько порядков). Поэтому сигнал готовности (транслируемый или генерируемый устройством управления и сигнализирующий процессору о том, что команда ввода/вывода выполнена и можно выдать новую команду для продолже- ния обмена данными) приходится очень долго ожидать, постоянно опрашивая со- ответствующую линию интерфейса на наличие или отсутствие нужного сигнала.
Посылать новую команду, не дождавшись сигнала готовности, сообщающего об исполнении предыдущей команды, бессмысленно. В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, как раз и выполняет в цикле команду «проверить наличие сигнала готовности». До тех пор пока сигнал готовности не появится, драйвер ничего другого не делает. При этом, естественно, нерационально используется время центрального процессора.
Гораздо выгоднее, выдав команду ввода/ вывода, на время забыть об устройстве ввода/вывода и перейти на выполнение другой программы. А появление сигнала готовности трактовать как запрос на прерывание от устройства ввода/вывода.
Именно эти сигналы готовности и являются сигналами запроса на прерывание (см.
раздел «Прерывания», глава 1).
Режим обмена с прерываниями по своей сути является режимом асинхронного управления. Для того чтобы не потерять связь с устройством (после того как про- цессор выдал очередную команду по управлению обменом данными и переклю- чился на выполнение других программ), может быть запущен отсчёт времени, в те-


164
чение которого устройство обязательно должно выполнить команду и выдать таки сигнал запроса на прерывание. Максимальный интервал времени, в течение кото- рого устройство ввода/вывода или его контроллер должны выдать сигнал запроса на прерывание, часто называют уставкой тайм-аута. Если это время истекло по- сле выдачи устройству очередной команды, а устройство так и не ответило, то де- лается вывод о том, что связь с устройством потеряна и управлять им больше нет возможности. Пользователь и/или задача получают соответствующее диагностиче- ское сообщение.
Драйверы, работающие в режиме прерываний, представляют собой сложный комплекс программных модулей и могут иметь несколько секций: секцию запуска,
одну или несколько секций продолжения и секцию завершения.
Секция запуска инициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода либо просто для инициации очередной операции ввода/вывода.
Секция продолжения (их может быть несколько, если алгоритм управления обменом данными сложный и требуется несколько прерываний для выполнения одной логической операции) осуществляет основную работу по передаче данных.
Секция продолжения, собственно говоря, и является основным обработчиком пре- рывания. Используемый интерфейс может потребовать для управления вво- дом/выводом несколько последовательностей управляющих команд, а сигнал пре- рывания у устройства, как правило, только один. Поэтому после выполнения оче- редной секции прерывания супервизор прерываний при следующем сигнале готов- ности должен передать управление другой секции. Это делается за счёт изменения адреса обработки прерывания после выполнения очередной секции, если же имеет- ся только одна секция прерываний, то она сама передаёт управление тому или иному модулю обработки.
Секция завершения обычно выключает устройство ввода/вывода либо просто завершает операцию.
Управление операциями ввода/вывода в режиме прерываний, требует больших усилий со стороны системных программистов – такие программы создавать слож-

165
нее, чем те, что работают в режиме опроса готовности. Примером тому может слу- жить ситуация с драйверами, обеспечивающими печать. Так, в ОС Windows (и
Windows 9x, и Windows NT) драйвер печати через параллельный порт работает не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовно- сти, что приводит к 100%-й загрузке центрального процессора на всё время печати.
При этом, естественно, выполняются и другие задачи, запущенные на исполнение,
но исключительно за счёт того, что ОС Windows реализует вытесняющую мульти- задачность и время от времени прерывает процесс управления печатью и передаёт центральный процессор остальным задачам.
Закрепление устройств, общие устройства
ввода/вывода
Как известно, многие устройства не допускают совместного использования.
Прежде всего, это устройства с последовательным доступом. Такие устройства мо- гут стать закреплёнными, то есть быть предоставленными некоторому вычисли- тельному процессу на всё время жизни этого процесса. Однако это приводит к то- му, что вычислительные процессы часто не могут выполняться параллельно – они ожидают освобождения устройств ввода/вывода. Для организации использования многими параллельно выполняющимися задачами устройств ввода/вывода, кото- рые не могут быть разделяемыми, вводится понятие виртуальных устройств. Ис- пользование принципа виртуализации позволяет повысить эффективность вы- числительной системы.
Вообще говоря, понятие виртуального устройства шире, нежели использова- ние этого термина для обозначения спулинга (SPOOLing – simultaneous peripheral operation on-line, то есть имитация работы с устройством в режиме «он-лайн»).
Главная задача спулинга – создать видимость параллельного разделения устрой- ства ввода/вывода с последовательным доступом, которое фактически должно ис- пользоваться только монопольно и быть закрепленным. Например, мы уже го- ворили, что в случае, когда несколько приложений должны выводить на печать ре- зультаты своей работы, если разрешить каждому такому приложению печатать строку по первому же требованию, то это приведет к потоку строк, не представ-