- •Системное программное обеспечение Учебное пособие
- •Введение
- •1.Основные понятия
- •1.1.Функции и ресурсы ос
- •1.2.Структура программного обеспечения
- •1.3.Режимы функционирования компьютера
- •1.4.Классификация ос
- •1.5.Состав ос
- •2.Управление памятью
- •2.1. Основная память
- •2.2.Регистровая память
- •2.3.Кэш память
- •2.4.Организация основной памяти
- •2.4.1.Режимы работы процессоров Intel
- •2.4.2.Преобразование логического адреса в физический в реальном режиме
- •2.4.3.Адресация памяти в защищенном режиме
- •2.5.Управление памятью
- •2.5.1.Модели памяти
- •2.5.2.Динамическое распределение памяти
- •2.5.3.Динамическое распределение памяти в windows nt
- •2.5.4.Функции ос по управлению основной памятью
- •2.6.Виртуальная память
- •2.6.1.Преобразование виртуального адреса в реальный
- •2.6.2.Страничная организация
- •2.6.3.Сегментная организация
- •2.6.4.Странично-сегментная организация
- •2.6.5.Сплошная модель памяти flat
- •2.6.6.Функции для доступа к виртуальной памяти
- •2.6.6.1Освобождение виртуальной памяти
- •2.6.6.2Фиксирование страниц основной памяти
- •2.6.7.Стратегии управления виртуальной памятью
- •2.6.7.1Определение оптимального размера страниц
- •2.6.7.2Поведение программ при подкачке страниц
- •3.Процессы и задачи. Мультипроцессорные системы
- •3.1.Управление процессами
- •3.1.1.Блок управления процессом (pcb)
- •3.1.2.Управление асинхронными параллельными процессами
- •3.2.Мультизадачность
- •3.2.1.Виды мультизадачности:
- •3.2.2.Процессы и задачи
- •3.2.3.Распределение времени между задачами
- •3.2.4.Процессовая мультизадачность
- •3.2.5.Потоковая мультизадачность
- •3.2.6. Синхронизация задач
- •3.2.6.1Ожидание завершения задачи или процесса
- •3.2.6.2Синхронизация с помощью событий
- •3.2.7.Взаимоисключение
- •3.2.7.1Критические секции в программном интерфейсе windows
- •3.2.7.2Блокирующие функции
- •3.2.8.Семафоры
- •3.3.Тупики
- •3.3.1.Условия возникновения тупика
- •3.3.2.Предотвращение тупиков
- •3.3.3. Обход тупиков
- •3.3.4.Обнаружение тупиков
- •3.3.5.Восстановление после тупика
- •3.4.Средства обеспечения мультизадачности в защищенном режиме работы процессора Intel
- •3.4.1.Переключение задач
- •3.5.Обработка прерываний
- •3.5.1.Обработка прерываний в защищенном режиме
- •3.5.2.Обработка аппаратных прерываний
- •3.6.Управление потоками заданий. Планирование заданий и загрузка процессоров
- •3.6.1.Цели планирования
- •3.6.2.Критерии планирования
- •3.6.3.Дисциплины планирования
- •3.6.4.Многоуровневые очереди с обратными связями
- •3.7.Мультипроцессорные архитектуры. Планирование загрузки ресурсов
- •3.7.1.Параллелизм
- •3.7.2.Цели мультипроцессорных систем
- •3.7.3.Автоматическое распараллеливание
- •3.7.3.1Расщепление цикла
- •3.7.3.2Редукция высоты дерева
- •3.7.4.Мультипроцессорные операционные системы
- •3.7.5.Организация мультипроцессорных операционных систем
- •3.7.6.Производительность мультипроцессорных систем
- •3.7.7.Экономическая эффективность мультипроцессорных систем
- •3.7.8.Восстановление после ошибок
- •3.7.9.Перспективы мультипроцессорных систем
- •4.Управление внешней памятью и файловые системы
- •4.1.Структура дискового тома. Таблица разделов
- •4.2.Управление данными
- •4.2.1.Организация данных
- •4.2.2.Методы доступа
- •4.3. Файловые системы
- •4.3.1.Файловая система fat
- •4.3.2.Файловая система fat32
- •4.3.3.Функции windows api для работы с директориями
- •4.3.4.Файловая система windows 95
- •4.3.5.Файловая система нpfs (os/2)
- •4.3.5.1 Структура тома
- •4.3.5.2Файлы и Fnodes
- •4.3.5.3Каталоги
- •4.3.5.4Расширенные атрибуты
- •4.3.5.5Инсталлируемые файловые системы
- •4.3.5.6Проблемы эффективности
- •4.3.5.7Отказоустойчивость
- •4.3.6.Файловая система ntfs (Windows nt)
- •4.3.6.1Главная файловая таблица
- •4.3.6.2Атрибуты файла ntfs
- •4.3.6.3Длинные и короткие имена файлов
- •4.3.6.4Потоки данных
- •4.3.6.5Согласованность с posix
- •4.4.Асинхронные операции с файлами
- •4.5.Файлы, отображаемые на память
- •4.5.1.Создание отображения файла
- •4.5.2.Выполнение отображения на память
- •5.Средства ввода информации
- •5.1.Аппаратные и программные средства ввода информации с клавиатуры
- •5.1.1.Анализ и преобразование скэн-кода
- •5.1.2.Буфер клавиатуры
- •5.1.3.Схема работы буфера
- •5.1.4.Ввод информации с клавиатуры в Windows
- •5.1.4.1Поддержка горячих клавиш (нot-key)
- •5.1.4.2Языки и локализация
- •5.2.Управление манипулятором "мышь"
- •5.2.1.Аппаратные средства манипулятора
- •5.2.2.Программная поддержка "мыши" (на примере ms dos)
- •5.2.3.Основные функции интерфейса программы с манипулятором "мышь" (int 33н)
- •5.2.4.Чтение позиции курсора и состояния кнопок "мыши"
- •5.2.5.Управление мышью в приложениях Windows
- •5.2.5.1Обработка двойного щелчка (Double-Click Messages)
- •5.2.5.2Сообщения неклиентской области
- •5.2.5.3Активизация окна
- •6.Сетевые операционные системы
- •Литература
- •Оглавление
- •Учебное издание
- •394026 Воронеж, Московский просп., 14
3.3.2.Предотвращение тупиков
При предотвращении тупиков целью является обеспечение условий, исключающих возможность возникновения тупиковых ситуаций.
Такой подход является вполне корректным решением в том, что касается самого тупика, однако он часто приводит к нерациональному использованию ресурсов. Установлено, что тупик будет невозможен, при нарушении хотя бы одного из указанных выше необходимых условий.
Предлагается стратегия, включающая три принципа: - каждый процесс должен запрашивать все требуемые ресурсы сразу и не начинаться, пока они не будут выделены;
- если процесс требует дополнительных ресурсов и получает отказ, он должен освободить все ресурсы и запросить потом всю совокупность ресурсов;
- введение линейной упорядоченности по типам ресурсов.
Все элементы этой стратегии имеют свои недостатки.
3.3.3. Обход тупиков
Используются алгоритмы, позволяющие обойти опасные участки при распределении ресурсов. Дейкстра предложил алгоритм рационального распределения ресурсов. Поскольку данный алгоритм имитирует действия банкира, который, располагая определенным источником капитала, выдает ссуды и принимает платежи, он получил название "алгоритма банкира".
3.3.4.Обнаружение тупиков
Обнаружение тупика - это установление факта, что возникла тупиковая ситуация, и определение процессов и ресурсов, вовлеченных в тупиковую ситуацию. Алгоритмы обнаружения тупиков, как правило, применяются в системах, где выполняются первые три необходимые условия возникновения тупиковой ситуации. Эти алгоритмы затем определяют, не создался ли режим кругового ожидания. Таким образом, обнаружение тупика сводится к проверке наличия циклических запросов на ресурсы. Можно включать в ОС алгоритмы обнаружения, а можно положиться на оператора компьютера.
3.3.5.Восстановление после тупика
Систему, оказавшуюся в тупике, необходимо вывести из него, нарушив одно или несколько условий его существования. Обычно это выполняется путем принудительного вывода некоторого процесса из системы, чтобы можно было использовать его ресурсы. Самый целесообразный способ - это эффективный механизм приостановки/возобновления процесса. Другой способ - создание контрольных точек (дампов памяти) и перезапуск.
В будущих системах тупики станут в большей степени критическим фактором, т.к.
1) системы будут ориентированы на асинхронную параллельную работу;
2) будет реализовано преимущественно динамическое распределение ресурсов. Это может привести к тому, что в какой-то момент ресурсов может оказаться недостаточно;
3) увеличение количества ресурсов за счет включения в список ресурсов данных.
Пример тупика представлен на рис. 17.
Два процесса Пр1 и Пр2 разделяют два вида ресурсов р1 и р2, обращение к которым синхронизируется с помощью семафоров S1 и S2.
Рис. 17. Пример тупика
Соответствующие операции расставляются следующим образом:
Возможны три траектории выполнения процессов:
Траектория А - без проблем.
Траектория В - в точке Х Пр2 ждет освобождения р2.
Траектория С - дедлок в точке Z (Пр2 ждет р1, Пр1 ждет р2).
3.4.Средства обеспечения мультизадачности в защищенном режиме работы процессора Intel
Вам уже известно, что каждое приложение может состоять из нескольких параллельно или последовательно работающих задач. Квантование времени процессора выполняется на уровне задачи. По прерыванию таймера процессор переключается от одной задачи к другой, за счет чего и реализуется мультипрограммный режим работы. Для хранения контекста неактивной в настоящий момент задачи используется сегмент состояния задачи TSS (Task State Segment), ко- торый адресуется при помощи двухбайтового регистра ТR (Task Re- gister). Регистр содержит селектор дескриптора TSS в глобальной дескрипторной таблице.
Поле TYPE байта доступа дескриптора содержит значения 0х09 для неактивной задачи ("доступный" TSS) и 0х0A - для активной ("недоступный" TSS), то есть различаются значением бита 1 (отсчет от нуля). Переключение задачи в активное состояние осуществляется установкой этого бита.
Операционная система для каждой задачи создает свой TSS. Перед тем, как переключиться на выполнение следующей задачи, процессор сохраняет контекст текущей задачи в ее сегменте TSS. Контекст - это, прежде всего, состояние регистров. В сегмент сбрасываются:
регистры общего назначения EAX, EBX, ECX и EDX;
регистры-указатели ESP, EBP, ESI, EDI, EIP;
сегментные регистры ES, CS, SS, DS, FS, GS;
регистр флагов EFLAGS;
регистр LDTR с селектором дескриптора в GDT локальной дескрипторной таблицы, распределенной данной задаче;
регистр базового адреса каталога страниц CR3. Таким образом, каждая задача может иметь свой собственный каталог таблиц страниц, что позволяет выполнить изоляцию задач не только на уровне сегментов, но и на уровне страниц.
-
База карты ввода-вывода
0
Т
0
LDTR
0
GS
0
FS
0
DS
0
SS
0
CS
0
ES
EDI
ESI
EBP
ESP
EBX
EDX
ECX
EAX
EFLAGS
EIP
CR3
0
SS2
ESP2
0
SS1
ESP1
0
SS0
ESP0
0
LINK
LINK предназначено для ссылки на TSS вызвавшей задачи при вложенном вызове задач. Здесь хранится селектор TSS, записанный командой CALL.
TSS содержит указатели на стеки для 0, 1 и 2-го приоритетных колец, соответственно SS0:ESP0, SS1:ESP1 и SS2:ESP2. Эти поля используются при межсегментных вызовах через вентили. Для каждого кольца защиты процессор назначает отдельные стеки. Когда задача вызывает функцию из другого кольца через вентиль вызова, процессор загружает указатель стека SS:ESP адресом нового стека, взятого из соответствующего поля TSS. В новый стек копируется адрес вершины старого стека, параметры функции, количество которых задано в вентиле вызова и адрес возврата. Таким образом, при вызове привилегированного модуля через вентиль вызова менее привилегированная программа не может передать в стеке больше параметров, чем это определено операционной системой для этого модуля. Включение адресов стеков в TSS позволяет разделить стеки задач и обеспечивает их автоматическое переключение при переключении задач. При отладке программы устанавливается в 1 бит Т, в результате чего при переключении на задачу возникает отладочное исключение (0х01), которое может быть использовано отладчиком.
База карты ввода-вывода указывает 16-тиразрядное смещение начала битовой карты ввода-вывода (БКВВ) относительно TSS. Битовая карта ввода-вывода определяет порты, которые может использовать задача. Если задача обратится к несанкционированному порту ввода-вывода, произойдет исключение. Это необходимо для безопасной работы системы. Предел TSS должен определяться с учетом карты ввода-вывода. Каждый бит в карте соответствует адресу байта порта ввода-вывода. БКВВ завершается байтом 0хFF. При выполнении операций с портами процессор проверяет все биты, соответствующие адресу порта. Если какой-либо бит установлен в 1, генерируется исключение. Проверка битовой карты не выполняется, если флаг IOPL больше или равен уровню привилегий. Установка базы карты ввода-вывода большей или равной пределу TSS позволяет полностью запретить обращение к портам. Любая команда ввода-вывода приведет к генерации исключения.