- •Министерство образования российской федерации
- •Содержание
- •Введение
- •Предмет и задачи курса
- •Рекомендации по литературе
- •Краткий очерк истории ос
- •Предыстория ос
- •Пакетные ос
- •Ос с разделением времени
- •Однозадачные ос для пэвм
- •Многозадачные ос для пк с графическим интерфейсом
- •Классификация ос
- •Критерии оценки ос
- •Надежность
- •Эффективность
- •Удобство
- •Масштабируемость
- •Способность к развитию
- •Мобильность
- •Основные функции и структура ос
- •Ос, используемые в дальнейшем изложении
- •Управление устройствами
- •Основные задачи управления устройствами
- •Классификация периферийных устройств и их архитектура
- •Прерывания
- •Архитектура подсистемы ввода/вывода
- •Способы организации ввода/вывода
- •Ввод/вывод по опросу и по прерываниям
- •Активное и пассивное ожидание
- •Синхронный и асинхронный ввод/вывод
- •Буферизация и кэширование
- •Понятие буферизации
- •Сглаживание неравномерности скоростей процессов
- •Распараллеливание ввода и обработки
- •Согласование размеров логической и физической записи
- •Редактирование при интерактивном вводе
- •Кэширование дисков
- •Опережающее чтение.
- •Драйверы устройств
- •Управление устройствами в ms-dos
- •Уровни доступа к устройствам
- •Драйверы устройств в ms-dos
- •Управление символьными устройствами
- •Управление блочными устройствами
- •Структура диска
- •Разделы и логические тома
- •Средства доступа к дискам
- •Управление устройствами вWindows
- •Драйверы устройств в Windows
- •Доступ к устройствам
- •Управление устройствами вUnix
- •Драйверы устройств вUnix
- •Устройство как специальный файл
- •Управление данными
- •Основные задачи управления данными
- •Характеристики файлов и архитектура файловых систем
- •Размещение файлов
- •Защита данных
- •Разделение файлов между процессами
- •Файловая системаFaTи управление данными вMs-dos
- •Общая характеристика системы fat
- •Структуры данных на диске
- •Структура записи каталога файловой системы fat
- •Создание и удаление файла
- •Работа с файлами в ms-dos
- •Системные функции
- •Доступ к данным
- •Структуры данных в памяти
- •Новые версии системы fat
- •Файловые системы и управление данными вUnix
- •Архитектура файловой системы unix
- •Жесткие и символические связи
- •Монтируемые тома
- •Типы и атрибуты файлов
- •Управление доступом
- •Структуры данных файловой системыUnix
- •Доступ к данным в unix
- •Развитие файловых системUnix
- •Файловая системаNtfSи управление данными вWindows
- •Особенности файловой системы ntfs
- •Структуры дисковых данных
- •Главная таблица файлов
- •Атрибуты файла
- •Доступ к данным
- •Защита данных
- •Аутентификация пользователя
- •Дескриптор защиты
- •Управление процессами
- •Основные задачи управления процессами
- •Реализация многозадачного режима
- •Понятия процесса и ресурса
- •Квазипараллельное выполнение процессов
- •Состояния процесса
- •Вытесняющая и невытесняющая многозадачность
- •Дескриптор и контекст процесса
- •Реентерабельность системных функций
- •Дисциплины диспетчеризации и приоритеты процессов
- •Проблемы взаимодействия процессов
- •Изоляция процессов и их взаимодействие
- •Проблема взаимного исключения процессов
- •Двоичные семафоры Дейкстры
- •Средства взаимодействия процессов
- •Целочисленные семафоры
- •Семафоры с множественным ожиданием
- •Сигналы
- •Сообщения
- •Общая память
- •Программные каналы
- •Проблема тупиков
- •Управление процессами вMs-dos
- •Процессы в ms-dos
- •Среда программы
- •Запуск программы
- •Завершение работы программы
- •Перехват прерываний и резидентные программы
- •Управление процессами вWindows
- •Понятие объекта в Windows
- •Процессы и нити
- •ПланировщикWindows
- •Процесс и нить как объекты
- •Синхронизация нитей
- •Способы синхронизации
- •Объекты синхронизации и функции ожидания
- •Типы объектов синхронизации
- •Критические секции
- •Сообщения
- •Управление процессами в unix
- •Жизненный цикл процесса
- •Группы процессов
- •Программные каналы
- •Сигналы
- •Средства взаимодействия процессов в стандарте posix
- •Планирование процессов
- •Состояния процессов в unix
- •Приоритеты процессов
- •Интерпретатор команд shell
- •Управление памятью
- •Основные задачи управления памятью
- •Виртуальные и физические адреса
- •Распределение памяти без использования виртуальных адресов
- •Настройка адресов
- •Распределение с фиксированными разделами
- •Распределение с динамическими разделами
- •Сегментная организация памяти
- •Страничная организация памяти
- •Сравнение сегментной и страничной организации
- •Управление памятью в ms-dos
- •Управление памятью вWindows
- •Структура адресного пространства
- •Регионы
- •Отображение исполняемых файлов
- •Файлы, отображаемые на память
- •Стеки и кучи
- •Управление памятью вUnix
- •Литература
- •Дроздов Сергей Николаевич операционные системы Конспект лекций
Способы организации ввода/вывода
Ввод/вывод по опросу и по прерываниям
Рассмотрим более подробно работу программы, непосредственно выполняющей ввод или вывод данных на конкретное устройство. (На самом деле, этой работой обычно занимается драйвер устройства, так что мы фактически рассматриваем логику работы драйвера.)
Для определенности положим, что программа должна выдать Nбайт данных из массиваAна символьное устройствоX. Для операции ввода могут использоваться те же подходы, которые будут рассмотрены здесь для операции вывода.
Пусть архитектура устройства представлена регистром данных X.DATAи флагом готовностиX.READY. КогдаX.READY=TRUE, в регистрX.DATAможно выдавать очередной байт данных. Запишем на псевдокоде, близком к языку Паскаль, варианты организации соответствующей программы.
а) Ввод/вывод без проверки готовности
i := 1;
while i <= N do begin
X.DATA := A[i];
i := i + 1;
end;
Этот «наглый» способ вывода вполне работоспособен, если используется «всегда готовое» устройство (например, монитор), т.е. флаг X.READYвсегда истинен и потому вообще не нужен. При попытке использовать тот же подход для вывода на принтер мы убедились бы, что напечатаны будут лишь некоторые символы, которым посчастливилось быть выданными в редкие моменты готовности принтера.
б) Ввод/вывод по опросу готовности
i := 1;
while i <= N do begin
while not X.READY do
;
X.DATA := A[i];
i := i + 1;
end;
Здесь добавлен цикл ожидания, в котором не делается ничего, кроме постоянной циклической проверки готовности устройства. Передача данных происходит только тогда, когда устройство готово. Поскольку после выдачи одного байта устройство вполне может опять перейти в состояние неготовности, следует опять выполнять цикл ожидания, пока выданный символ не будет обработан устройством.
Такая организация ввода/вывода позволяет корректно работать с любыми устройствами. Этот способ действительно применяется в некоторых однозадачных системах. Недостатком данного способа является непроизводительная трата времени на постоянное «долбление» флага готовности. При современном соотношении скоростей работы процессора и периферии, цикл ожидания может повторяться миллионы раз перед выдачей каждого байта. Более того, если по каким-то причинам устройство вообще не перейдет в состояние готовности, то работа всей системы может быть парализована бесконечным циклом ожидания.
в) Ввод/вывод по прерываниям
i := 1;
while i <= N do begin
X_INT: if not X.READY
return;
X.DATA := A[i];
i := i + 1;
end;
Здесь исчез цикл ожидания, вместо него – однократная проверка готовности и оператор возврата, если не готово.
Куда, собственно, происходит возврат? Чтобы это понять, надо вспомнить, что данный фрагмент – явно не единственная программа, работающая в данный момент на ЭВМ. Очевидно, операция вывода была начата операционной системой по запросу какой-то программы. Данный фрагмент был вызван как подпрограмма ОС, и возврат означает передачу управления ОС. Как система распорядится полученным временем? Это уже совсем другой вопрос, не связанный с вводом/выводом. Например, ОС может переключиться на другой процесс. Или, от нечего делать, запустить экранную заставку либо программу самотестирования.
Но как же быть с брошенной на полпути операцией вывода? Для ее возобновления будет использовано аппаратное прерывание, которое должно выдать устройство Xпри переходе в состояние готовности. Системный обработчик прерывания должен будет передать управление по адресу, обозначенному меткойX_INT. После нелишней дополнительной проверки готовности программа вывода передаст очередной байт на устройство, затем снова проверит готовность и, возможно, вновь вернет управление системе. Таким образом, выполнение ввода/вывода разбивается на отдельные интервалы работы при готовности устройства, перемежающиеся работой системы, пока устройство не готово.
Для устройств, использующих контроллер ПДП, возможные варианты организации работы остаются, по сути, теми же, но только используются гораздо более крупные операции: вместо ввода или вывода одного элемента данных выполняется ввод/вывод целого блока данных, и только после этого контроллер переходит в состояние готовности и генерирует прерывание.