Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Конспект лекций по курсу операционные системы 4 страница



Эффективность алгоритма обычно оценивается на конкретной последовательности ссылок к памяти, для которой подсчитывается число возникающих page faults. Эта последовательность называется строкой обращений reference string. Мы можем генерировать строку обращений искусственным образом при помощи датчика случайных чисел или трассируя конкретную систему. Последний метод дает слишком много ссылок, для уменьшения числа которых можно сделать две вещи:

· для конкретного размера страниц можно запоминать только их номера, а не адреса, на которые идет ссылка

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

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

3.8. Алгоритмы замещения страниц

Алгоритм FIFO. Выталкивание первой пришедшей страницы
Простейший алгоритм. Каждой странице присваивается временная метка. Реализуется это просто созданием очереди страниц, в конец которой страницы попадают, когда загружаются в физическую память, а из начала берутся, когда требуется освободить память. Для замещения выбирается старейшая страница. К сожалению, эта стратегия с достаточной вероятностью будет приводить к замещению активно используемых страниц, например страниц кода текстового процессора при редактировании файла. Заметим, что при замещении активных страниц все работает корректно, но page fault происходит немедленно.
Аномалия Билэди Belady
На первый взгляд кажется очевидным, что чем больше в памяти страничных кадров, тем реже будут иметь место page faults. Удивительно, но это не всегда так.Как установил Билэди с коллегами, определенные последовательности обращений к страницам в действительности приводят к увеличению числа страничных нарушений при увеличении кадров, выделенных процессу. Это явление носит название аномалии Билэди или аномалии FIFO.
Система с тремя кадрами 9 faults оказывается более производительной, чем с четырьмя кадрами 10 faults, для строки обращений к памяти 012301401234 при выборе стратегии FIFO.

Рис. 10.1. Аномалия Билэди: a — FIFO с тремя страничными кадрами; b — FIFO с четырьмя страничными кадрами

Аномалию Билэди следует считать скорее курьезом, чем фактором, требующим серьезного отношения, который иллюстрирует сложность ОС, где интуитивный подход не всегда приемлем.
Оптимальный алгоритм OPT
Одним из последствий открытия аномалии Билэди стал поиск оптимального алгоритма, который при заданной строке обращений имел бы минимальную частоту page faults среди всех других алгоритмов. Такой алгоритм был найден. Он прост: замещай страницу, которая не будет использоваться в течение самого длительного периода времени.
Каждая страница должна быть помечена числом инструкций, которые будут выполнены, прежде чем на эту страницу будет сделана первая ссылка. Выталкиваться должна страница, для которой это число наибольшее.
Этот алгоритм легко описать, но реализовать невозможно. ОС не знает, к какой странице будет следующее обращение. Ранее такие проблемы возникали при планировании процессов — алгоритм SJF.
Зато мы можем сделать вывод, что для того, чтобы алгоритм замещения был максимально близок к идеальному алгоритму, система должна как можно точнее предсказывать обращения процессов к памяти. Данный алгоритм применяется для оценки качества реализуемых алгоритмов.
Выталкивание дольше всего не использовавшейся страницы. Алгоритм LRU
Одним из приближений к алгоритму OPT является алгоритм, исходящий из эвристического правила, что недавнее прошлое — хороший ориентир для прогнозирования ближайшего будущего.
Ключевое отличие между FIFO и оптимальным алгоритмом заключается в том, что один смотрит назад, а другой вперед. Если использовать прошлое для аппроксимации будущего, имеет смысл замещать страницу, которая не использовалась в течение самого долгого времени. Такой подход называется least recently used алгоритм LRU. Работа алгоритма проиллюстрирована на рис. рис. 10.2. Сравнивая рис. 10.1 b и 10.2, можно увидеть, что использование LRU алгоритма позволяет сократить количество страничных нарушений.

Рис. 10.2. Пример работы алгоритма LRU
LRU — хороший, но труднореализуемый алгоритм. Необходимо иметь связанный список всех страниц в памяти, в начале которого будут хранится недавно использованные страницы. Причем этот список должен обновляться при каждом обращении к памяти. Много времени нужно и на поиск страниц в таком списке.
В [Таненбаум, 2002] рассмотрен вариант реализации алгоритма LRU со специальным 64-битным указателем, который автоматически увеличивается на единицу после выполнения каждой инструкции, а в таблице страниц имеется соответствующее поле, в которое заносится значение указателя при каждой ссылке на страницу. При возникновении page fault выгружается страница с наименьшим значением этого поля.
Как оптимальный алгоритм, так и LRU не страдают от аномалии Билэди. Существует класс алгоритмов, для которых при одной и той же строке обращений множество страниц в памяти для n кадров всегда является подмножеством страниц для n+1 кадра. Эти алгоритмы не проявляют аномалии Билэди и называются стековыми stack алгоритмами.

Выталкивание редко используемой страницы. Алгоритм NFU
Поскольку большинство современных процессоров не предоставляют соответствующей аппаратной поддержки для реализации алгоритма LRU, хотелось бы иметь алгоритм, достаточно близкий к LRU, но не требующий специальной поддержки.
Программная реализация алгоритма, близкого к LRU, — алгоритм NFUNot Frequently Used.
Для него требуются программные счетчики, по одному на каждую страницу, которые сначала равны нулю. При каждом прерывании по времени а не после каждой инструкции операционная система сканирует все страницы в памяти и у каждой страницы с установленным флагом обращения увеличивает на единицу значение счетчика, а флаг обращения сбрасывает.
Таким образом, кандидатом на освобождение оказывается страница с наименьшим значением счетчика, как страница, к которой реже всего обращались. Главный недостаток алгоритма NFU состоит в том, что он ничего не забывает. Например, страница, к которой очень часто обращались в течение некоторого времени, а потом обращаться перестали, все равно не будет удалена из памяти, потому что ее счетчик содержит большую величину. Например, в многопроходных компиляторах страницы, которые активно использовались во время первого прохода, могут надолго сохранить большие значения счетчика, мешая загрузке полезных в дальнейшем страниц.
К счастью, возможна небольшая модификация алгоритма, которая позволяет ему забывать. Достаточно, чтобы при каждом прерывании по времени содержимое счетчика сдвигалось вправо на 1 бит, а уже затем производилось бы его увеличение для страниц с установленным флагом обращения.
Другим, уже более устойчивым недостатком алгоритма является длительность процесса сканирования таблиц страниц.

4. Управление вводом-выводом
4.1. Прерывания от внешних устройств
Смотри пункт 1.3
4.2. Классификация устройств ввода-вывода
Классификация по способу вывода

По способу ввода-вывода информации на периферийное устройство используют следующую классификацию:
1. Прямое программирование устройств. При этом способе программа сама, без помощи других программ, программирует периферийное устройство. Хотя этот способ является исторически первым и обеспечивает максимальное быстродействие, в настоящее время он не используется из-за своей практической непереносимости между компьютерами.
2. Прямое программирование через драйвер устройства. Драйвер — это такая программа, которая перехватывает обращение пользователя или операционной системы к периферийному устройству, предлагая более или менее унифицированный интерфейс функций для работы с устройством. При этом пользователю не нужно вникать в аппаратную реализацию устройства, обращаться к регистрам и портам устройства по уникальным адресам, и, в конце концов, держать всю эту информацию в своей голове. Драйвер предоставляет доступ к функциям управления устройствами либо через прерывания в MS-DOS, либо через специальные функции операционной системы Windows, Unix, либо как некоторый объект с методами Win32 и др.. Недостаток этого метода заключается в том, что написать один драйвер с интерфейсом на все случаи жизни не представляется возможным. Поэтому программирование через драйвер устройства является также сложной работой даже для профессионалов, однако такого рода ввод-вывод является: вводом-выводом среднего уровня. На практике используется ввод-вывод высокого уровня, когда с драйвером устройства будет работать одна или несколько промежуточных программ, обеспечивающих единый интерфейс ввода-вывода для прикладных программ.
3. Буферизированный потоковый ввод-вывод. Этот вывод реализован на уровне консоли в MS-DOS, Windows и UNIX. При этом способе в оперативной памяти ЭВМ создаётся буфер для записи или считывания из него символов, и непосредственным их вводом-выводом на устройство занимается операционная система.

Недостатки буферизированного ввода-вывода следующие:

· при таком вводе-выводе невозможно задать шрифтовое и абзацное оформление текста — используется только поток символов

· такой ввод-вывод ограничен консолью и консольными операциями перенаправления вывода. С его помощью нельзя реализовать WIMP, SILK и другие интерфейсы

· редактировать такой поток можно только с помощью внешних программ-редакторов.

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

4. Ввод-вывод с использованием API. Термин API расшифровывается как Application Programming Interface — интерфейс программирования приложений. С помощью этого интерфейса можно создавать программы на высоком уровне абстракции от реальной конфигурации ЭВМ и периферийных устройств. Программа описывает свои действия на языке в общем виде, все детали формирования изображения и ввода-вывода от него скрыты. Программист может задавать шрифтовое и абзацное оформление, выводить графику вместе с текстом — всё это будет реализовано одинаково на любом устройстве, которое поддерживает данное API. Недостатки такого вывода следующие:

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

· привязка ввода-вывода к одному API, а значит — к определённой платформе ЭВМ, библиотекам и операционным системам

· невозможность оперативного, без помощи программиста, перенаправления вывода.

Этими способами реализации ввода-вывода в основном ограничиваются операции ввода-вывода в разных языках программирования и операционных системах.

Классификация по обработке

По способу обработки информации при её вводе-выводе различают форматированный и неформатированный бинарный ввод-вывод.

При форматированном вводе проводятся следующие операции:
1. Задаётся ограничение на размер строки символов, читаемых с устройства

2. Числовые данные при вводе преобразуются в двоичные в соответствии с их форматом

3. При чтении чисел проверяется их формат, а именно:
длину строки цифр

наличие и местоположение десятичной точки

наличие и значение символа порядка при чтении чисел в научном формате

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

При форматированном выводе производятся операции, противоположные тем, что применялись при вводе, а именно:

1. Данные из двоичной формы преобразуются в текстовую форму, в соответствии со строкой формата

2. Эти текстовые данные обрезаются до определённой длины, а также осуществляется выравнивание текстовой информации в выводимой строке.

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

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

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

4.3. Основные принципы организации ввода — вывода

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

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

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

4.4. Функции супервизора ввода-вывода

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

2 супервизор ввода-вывода получает запросы на ввод-вывод от супервизора задач или от программных модулей самой операционной системы.

3 супервизор ввода-вывода вызывает соответствующие распределители каналов и контроллеров, планирует ввод-вывод Запрос на ввод-вывод либо тут же выполняется, либо ставится в очередь на выполнение.
4 супервизор ввода-вывода инициирует операции ввода-вывода и при использовании прерываний предоставляет процессор диспетчеру задач, чтобы передать его первой задаче, стоящей в очереди на выполнение

5 при получении сигналов прерываний от устройств ввода-вывода супервизор идентифицирует эти сигналы и передает управление соответствующим программам обработки прерываний

6 супервизор

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

7 супервизор ввода-вывода посылает сообщения о завершении операции ввода-вывода запросившей эту операцию задаче и снимает ее с состояния ожидания ввода-вывода, если задача ожидала завершения операции.

4.5. Режимы управления вводом-выводом

Существует 2 основных режима ввода-вывода

1. режим обмена опросом готовности устройства ввода-вывода

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

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

Секция запуска запускается для включения устройств ввода-вывода либо для инициализации очередной операции ввода-вывода.

Секция продолжения осуществляет основную работу по передаче данных

Секция завершения выключает устройства ввода-вывода либо просто завершает операцию.

Управление операциями ввода-вывода в режиме прерывания требует более сложных программ чем те, что работают в режиме опроса готовности.

Так, в операционных системах Windows 95,98 и Windows NT драйвер печати через параллельный код работает не в режиме прерывания, а в режиме опроса готовности, что приводит к 100% загрузке процессора на все время печати. Для организации и выполнения многие параллельно выполняющиеся задачи устройств ввода-вывода вводится понятие виртуального устройства, повышающего эффективность вычислительных систем. Примером служит spooling, то есть имитация работы с устройством в режиме on-line. Главная задача spoolingа — создать единицу параллельно выполняемого устройства ввода-вывода с последовательным доступом.

4.6. Закрепление устройств, общие устройства ввода-вывода.

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

Вообще говоря, понятие виртуального устройства шире, нежели понятие спулинга spooling — Simultaneous Peripheral Operation On-Line, то есть имитация работы с устройством в режиме непосредственного подключения к нему. Основное назначение спулинга — создать видимость разделения устройства ввода-вывода, которое фактически является устройством с последовательным доступом и должно использоваться только монопольно и быть закрепленным за процессом. Например, мы уже говорили, что в случае, когда несколько приложений должны выводить на печать результаты своей работы, если разрешить каждому такому приложению печатать строку по первому же требованию, то это приведет к потоку строк не представляющих никакой ценности. Однако если каждому вычислительному процессу предоставлять не реальный, а виртуальный принтер, и поток выводимых символов или управляющих кодов для их печати сначала направлять в специальный файл на диске так называемый спул-файл — spool-file и только потом, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений выводить содержимое спул-файла на принтер, то все результаты работы можно будет легко читать. Системные процессы, которые управляют спул-файлом, называются спулером чтения spool-reader или спулером записи spool-writer.

Достаточно рационально организована работа с виртуальными устройствами в системах Windows 9xNT2000XP компании Microsoft. В качестве примера можно кратко рассмотреть подсистему печати. Microsoft различает термины принтер и устройство печати. Принтер — это некоторая виртуализация, объект операционной системы, а устройство печати — это физическое устройство, которое может быть подключено к компьютеру. Принтер может быть локальным или сетевым. При установке локального принтера в операционной системе создается новый объект, связанный с реальным устройством печати через тот или иной интерфейс. Интерфейс может быть и сетевым, то есть передача управляющих кодов в устройство печати может осуществляться через локальную вычислительную сеть, однако принтер все равно будет считаться локальным.
Локальность принтера означает, что его спул-файл будет находиться на том же компьютере, что и принтер. Если же некоторый локальный принтер предоставить в сети в общий доступ с теми или иными разрешениями, то для других компьютеров и их пользователей он может стать сетевым, Компьютер, на котором имеется локальный принтер, предоставленный в общий доступ, называется принт-сервером.

4.7. Основные системные таблицы ввода-вывода

Организация ввода-вывода требует наличия информации о ресурсах устройствах и их состоянии. Эта информация обычно хранится в системных таблицах, основными из которых являются:
- таблица оборудования ET — eguipment table, список УВВ, подключенных к системе

- таблица виртуальных логических устройств DRT — device reference table

- таблица прерываний IT — interrupt table.
Отдельный элемент первой таблицы называется блоком управления соответствующим устройством обмена UCB — unit control block и содержит следующую информацию об устройстве:
- тип, модель, имя и характеристики устройства

- характеристики подключения тип интерфейса, порт, линия запроса прерывания

- указание на драйвер управления и адреса его секций

- наличие и адрес буфера обмена для устройства

- уставка тайм-аута и адрес ячейки хранения счетчика тайм-аута

- состояние устройства

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

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

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

Взаимосвязи названных системных таблиц показаны на рис. 24.

Рис. 24. Взаимосвязь системных таблиц ввода-вывода

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

Супервизор ввода-вывода по логическому виртуальному имени таблицы DRT находит соответствующий элемент UCB в таблице оборудования. Если устройство занято, то описатель задачи помещается в очередь к устройству, иначе запускается препроцессор ввода-вывода. Он формирует последовательность управляемых кодов и данных для устройства ввода-вывода. Когда последовательность сформирована, супервизор ввода-вывода передает управление соответствующему драйверу в секции запуска действие 3.
Драйвер инициирует операцию управления, обнуляет счетчик тайм-аута и возвращает управление диспетчеру задач для постановки задачи на процессор действие 4.

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

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

4.8. Синхронный и асинхронный ввод вывод

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

Простейшим вариантом асинхронного вывода является так называемый буферизованный вывод данных на внешнее устройство, при котором данные из приложения передаются не непосредственно на устройство ввода-вывода, а в специальный системный буфер — область памяти, отведенную для временного размещения передаваемых данных. В этом случае логически операция вывода для приложения считается выполненной сразу же, и задача может не ожидать окончания действительного процесса передачи данных на устройство. Реальным выводом данных из системного буфера занимается супервизор ввода-вывода. Естественно, что выделение буфера из системной области памяти берет на себя специальный системный процесс по указанию супервизора ввода-вывода. Итак, для рассмотренного случая вывод будет асинхронным, если, во-первых, в запросе на ввод-вывод указано на необходимость буферизации данных, а во-вторых, устройство ввода-вывода допускает такие асинхронные операции, и это отмечено в UCB.
Можно организовать и асинхронный ввод данных. Однако для этого необходимо не только выделять область памяти для временного хранения считываемых с устройства данных и связывать выделенный буфер с задачей, заказавшей операцию, но и сам запрос на операцию ввода-вывода разбивать на две части на два запроса, о первом запросе указывается операция на считывание данных, подобно тому как это делается при синхронном вводе-выводе, однако тип код запроса используется другой, и в запросе указывается еще по крайней мере один дополнительный Параметр — имя код системного объекта, которое получает задача в ответ на запрос и которое идентифицирует выделенный буфер. Получив имя буфера будем ак условно называть этот системный объект, хотя в различных операционных истемах используются и другие термины, например класс, задача продолжает свою работу. Здесь очень важно подчеркнуть, что в результате запроса на асинхронный ввод данных задача не переводится супервизором ввода-вывода в состояние ожидания завершения операции ввода-вывода, а остается в состоянии выполнения или в состоянии готовности к выполнению. Через некоторое время выполнив необходимый код, который был определен программистом, задача выдает второй запрос на завершение операции ввода-вывода. В этом втором запросе к тому же устройству, который, естественно, имеет другой код или имя запроса, задача указывает имя системного объекта буфера для асинхронного ввода данных и в случае успешного завершения операции считывания данных тут же получает их из системного буфера. Если же данные еще не успели до конца переписаться с внешнего устройства в системный буфер, супервизор ввода-вывода переводит задачу в состояние ожидания завершения операции ввода-вывода, и далее все напоминает обычный синхронный ввод данных.

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

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





Дата публикования: 2014-12-08; Прочитано: 535 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.019 с)...