Файл: Функции операционных систем персональных компьютеров (Управление вводом/выводом).pdf
Добавлен: 28.03.2023
Просмотров: 240
Скачиваний: 4
Введение:
Операционная система - это программа, которая служит посредником между пользователем и компьютером. Она производит диалог с пользователем, осуществляет управление компьютером, его ресурсами (оперативной памятью, местом на дисках и т.д.), запускает другие (прикладные) программы на выполнение. Таким образом, операционная система – это набор программ, контролирующих работу прикладных программ и системных приложений и исполняющих роль интерфейса между пользователями, программистами, прикладными программами, системными приложениями и аппаратным обеспечением компьютера. Она опирается на базовое программное обеспечение – базовую систему ввода-вывода BIOS (Base Input-Output System). Программы, работающие под управлением операционной системы, называются приложениями. Под ресурсами вычислительной системы понимаются объем оперативной памяти, процессорное время, объем внешней памяти, внешние устройства.
Операционная система, выполняя роль посредника, служит двум целям: эффективно использовать компьютерные ресурсы и создавать условия для эффективной работы пользователя.
В качестве ресурсов компьютера обычно рассматривают:
- — время работы процессора;
- — адресное пространство основной памяти;
- — оборудование ввода-вывода;
- — файлы, хранящиеся во внешней памяти.
В функции операционной системы входит:
- — осуществление диалога с пользователем;
- — ввод-вывод и управление данными;
- — распределение ресурсов (оперативной памяти и кэша, процессора, внешних устройств);
- — запуск программ на выполнение;
- — всевозможные вспомогательные операции обслуживания;
- — передача информации между различными внутренними устройствами;
- — программная поддержка работы периферийных устройств (дисплея, клавиатуры, дисковых накопителей, принтера и др.).
- — организация среды взаимодействия и обмена информацией между работающими программами.
Осуществление диалога с пользоватилем:
Для общения с пользователем операционная система исользует интерфейс.
Существует несколько вариантов интерфейса.
ПРОГРАММНЫЙ – совокупность средств, обеспечивающих взаимодействие устройств и программ в рамках ЭВМ.
ПОЛЬЗОВАТЕЛЬСКИЙ – совокупность программных и аппаратных средств взаимодействия пользователя с программой или ЭВМ
КОМАНДНОСТРОЧНЫЙ - предлагает ввод пользователем команд с клавиатуры при выполнении действий по управлению ресурсами ЭВМ. (MS DOS,)
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ - предполагает управление ресурсами компьютера посредством осуществления операций над объектами. (Windows, OS/2)
Управление вводом/выводом
Чтобы дать программам возможность обмена данными с внешними устройствами и при этом не включать в каждую программу соответствующий код, осуществляющий управление устройствами ввода/вывода, привела разработчиков к созданию системного программного обеспечения и, в частности, самих операционных систем. Подпрограммы ввода/вывода оформляли в виде системных библиотечных процедур и включили в операционную систему, чтобы не включать этот код в каждую программу, а только оформить обращение к тому или иному коду. Управление вводом/выводом – одна из основных функций любой операционной системы. Ввод и вывод во всех операционных системах похожи, а реализация сильно отличается от каждой системы. Проблема усугубляется ещё тем, что в большинстве используемых систем эти моменты вообще, как правило, подробно не описаны, и исключение по этому вопросу касается только системы Linux, для которой имеются комментированные исходные тексты. Детально описываются функции API (application program interface – Интерфейс прикладного программирования), реализующие ввод/вывод. Поэтому рассмотрим только основные идеи и концепции.
Сложность проектирования ввода/вывода связана с большим числом устройств различного назначения.
Все операции ввода/вывода привилегированные и выполняются только самой операционной системой. Для того чтобы не было сбоев есть два режима, которые вводятся в процессы. Первый режим – это режим пользователя, он запрещает выполнение команд ввода/вывода и второй режим администратора, который позволяет выполнением команд ввода/вывода.
Для мультипрограммных ОС одним из основных видов ресурсов являются устройства ввода/вывода и обслуживающие их программы. ОС должны управлять разделяемыми и неразделяемыми устройствами и позволять параллельно выполняющимися задачам использовать различные устройства ввода/вывода. Примером разделяемого устройства может служить устройство для чтения компакт-дисков. Это устройство с прямым доступом. Пример неразделяемых устройств – принтер. Это устройство с последовательным доступом.
Непосредственное обращение к внешним устройствам из пользовательских программ не разрешено по трем причинам:
- возможные конфликты при доступе к устройствам ввода/вывода. Например, две параллельно выполняющиеся программы пытаются вывести на печать результаты своей работы. Если не предусмотреть внешнее управление устройством печати, то в результате мы можем получить абсолютно нечитаемый текст, так как каждая программа будет время от времени выводить свои данные, которые будут перемежаться данными другой программы. Другой пример: ситуация, когда одной программе необходимо прочитать данные с некоторого сектора магнитного диска, а другой – записать результаты в другой сектор того же накопителя. Если операции ввода/вывода не будут отслеживаться каким-то третьим (внешним) процессом-арбитром, то после позиционирования магнитной головки для первого запроса может тут же появиться команда позиционирования головки для второй задачи, и обе операции ввода/вывода не смогут быть выполнены корректно;
- снижение эффективности использования этих ресурсов. Например, у накопителя на магнитных дисках время подвода головки чтения/записи к необходимой дорожке и обращение к определенному сектору может значительно (до тысячи раз) превышать время пересылки данных. В результате, если задачи по очереди обращаются к цилиндрам, далеко отстоящим друг от друга, то полезная работа, выполняемая накопителем, может быть существенно снижена;
- ошибки в программах ввода/вывода могут привести к разрушению системы.
Компонента ОС, выполняющая ввод/вывод называется супервизором ввода/вывода. Основные задачи супервизора следующие:
- получение, проверка на корректность и выполнение запросов на ввод/вывод от прикладных задач и от модулей самой системы. Иначе говоря, супервизор ввода/вывода получает запросы на ввод/вывод от прикладных задач и от программных модулей самой операционной системы. Эти запросы проверяются на корректность, и если запрос выполнен по спецификациям и не содержит ошибок, он обрабатывается дальше, в противном случае пользователю (задаче) выдается соответствующее диагностическое сообщение о недействительности (некорректности) запроса;
- планирование ввода/вывода: выполнение или постановка в очередь, т.е. супервизор ввода/вывода определяет очередность предоставления устройств ввода/вывода задачам, затребовавшим их;
- инициирование ввода/вывода. Т.е. супервизор ввода/вывода передаёт управление соответствующим драйверам и в случае управления вводом/выводом с использованием прерываний предоставляет процессор диспетчеру задач с тем, чтобы передать его первой задаче, стоящей в очереди на выполнение;
- при получении сигналов прерывания передача управления соответствующей программе обработки прерывания;
- передача сообщений об ошибках, если они появляются;
- передача сигнала о завершении операции ввода/вывода, т.е. супервизор ввода/вывода посылает сообщения о завершении операции ввода/вывода запросившему эту операцию процессу и снимает его с состояния ожидания ввода/вывода, если процесс ожидал завершения операции.
Имеются два основных режима ввода/вывода:
- режим обмена с опросом готовности;
- режим обмена с прерываниями.
Пусть для простоты управление вводом/выводом осуществляет центральный процессор (в этом случае часто говорят о наличии программного канала обмена данными между внешними устройством и оперативной памятью, в отличие от канала прямого доступа к памяти, при котором управление вводом/выводом осуществляет специальное дополнительное оборудование). Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству ввода/вывода. Последнее исполняет
команду, транслируя сигналы, понятные центральному устройству и устройству управления в сигналы, понятные устройству ввода/вывода. Но быстродействие устройства ввода/вывода намного меньше быстродействия центрального процессора. Поэтому сигнал готовности (транслируемый или генерируемый устройством управления и сигнализирующий процессору о том, что команда ввода/вывода выполнена и можно выдать новую команду для продолжения обмена данными) приходится долго ожидать, постоянно опрашивая соответствующую линию интерфейса на наличие или отсутствие нужного сигнала. Посылать новую команду, не дождавшись сигнала готовности, сообщающего об исполнении предыдущей команды, бессмысленно. В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, как раз и выполняет в цикле команду «проверить наличие сигнала готовности». До тех пор пока сигнал готовности не появится, драйвер ничего другого не делает. При этом нерационально используется время центрального процессора.
Итак, в режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, выполняет в цикле команду «поверить готовность устройства». Центральный процессор в таком режиме используется нерационально.
Гораздо выгоднее, выдав команду ввода/ вывода, на время забыть об устройстве ввода/вывода и перейти на выполнение другой программы. А появление сигнала готовности трактовать как запрос на прерывание от устройства ввода/вывода.
Режим обмена с прерываниями по своей сути является режимом асинхронного управления. Для того чтобы не потерять связь с устройством (после того как процессор выдал очередную команду по управлению обменом данными и переключился на выполнение других программ), может быть запущен отсчёт времени, в течение которого устройство обязательно должно выполнить команду и выдать таки сигнал запроса на прерывание. Если это время истекло после выдачи устройству очередной команды, а устройство так и не ответило, то делается вывод о том, что связь с устройством потеряна и управлять им больше нет возможности. Пользователь и/или задача получают соответствующее диагностическое сообщение.
Драйверы, работающие в режиме прерываний, представляют собой сложный комплекс программных модулей и могут иметь несколько секций: секцию запуска, одну или несколько секций продолжения и секцию завершения.
Секция запуска инициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода либо просто для инициации очередной операции ввода/вывода.
Секция продолжения (их может быть несколько, если алгоритм управления обменом данными сложный и требуется несколько прерываний для выполнения одной логической операции) осуществляет основную работу по передаче данных. Секция продолжения, собственно говоря, и является основным обработчиком прерывания.
Секция завершения обычно выключает устройство ввода/вывода либо просто завершает операцию.
Управление операциями ввода/вывода в режиме прерываний, требует больших усилий со стороны системных программистов – такие программы создавать сложнее, чем те, что работают в режиме опроса готовности. Примером тому может служить ситуация с драйверами, обеспечивающими печать. Так, в ОС Windows (а именно в Windows 9x) драйвер печати через параллельный порт работает не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к 100%-й загрузке центрального процессора на всё время печати. При этом, естественно, выполняются и другие задачи, запущенные на исполнение, но исключительно за счёт того, что ОС Windows реализует вытесняющую мультизадачность и время от времени прерывает процесс управления печатью и передаёт центральный процессор остальным задачам.
Рассмотрим основные системные таблицы ввода/вывода.
Каждая ОС имеет свои таблицы ввода/вывода, их состав (количество и назначение каждой таблицы) может сильно отличаться. В некоторых ОС вместо таблиц создаются списки, хотя использование статических структур данных для организации ввода/вывода, как правило, приводит к большему быстродействию.
Исходя из принципа управления вводом/выводом через супервизор ОС и учитывая, что драйверы устройств ввода/вывода используют механизм прерываний для установления обратной связи центральной части с внешними устройствами, можно сделать вывод о необходимости создания, по крайней мере, трёх системных таблиц.
Первая таблица (или список) содержит информацию обо всех устройствах ввода/вывода, подключенных к вычислительной системе. Это таблица оборудования (equipment table), а каждый элемент этой таблицы называетсяUCB (unit control block, блок управления устройством ввода/вывода). Каждый элемент UCB таблицы оборудования, как правило, содержит следующую информацию об устройстве:
- тип устройства, его конкретная модель, символическое имя и характеристики устройства;
- как это устройство подключено (через какой интерфейс, к какому разъёму, какие порты и линия запроса прерывания используются и т. д.);
- номер и адрес канала (и подканала), если такие используются для управления устройством;
- указание на драйвер, который должен управлять этим устройством, адрес секции запуска и секции продолжения драйвера;
- информация о том, используется или нет буферирование при обмене данными с этим устройством, «имя» (или просто адрес) буфера, если такой выделяется из системной области памяти;
- уставка тайм-аута и ячейки для счетчика тайм-аута;
- состояние устройства;
- поле указателя для связи задач, ожидающих устройство, и, возможно, много ещё каких сведений.
Поскольку во многих ОС драйверы могут обладать свойством реентерабельности (напомним, это означает, что один и тот же экземпляр программного модуля может обеспечить параллельное обслуживание сразу нескольких однотипных устройств), то в элементе UCB должна храниться либо непосредственно сама информация о текущем состоянии устройства и сами переменные для реентерабельной обработки, либо указание на место, где такая информация может быть найдена. Наконец, важнейшим компонентом элемента таблицы оборудования является указатель на дескриптор той задачи, которая сейчас использует данное устройство. Если устройство свободно, то поле указателя будет иметь нулевое значение. Если же устройство уже занято и рассматриваемый указатель не нулевой, то новые запросы к устройству фиксируются посредством образования списка из дескрипторов тех задач, которые сейчас ожидают данное устройство.