- •Системное программное обеспечение
- •Раздел 1 Системное программное обеспечение
- •Тема 1.1 Классификация программного обеспечения
- •Тема 1.2 Операционная система
- •Тема 1.3 Процессы
- •Тема 1.4 Ресурсы
- •Тема 1.5 Память. Управление памятью
- •Тема 1.6 Виртуальная память
- •Тема 1.7 Планирование
- •Тема 1.8 Работа с файлами
- •Тема 1.9 Аппаратно-программные особенности процессоров
- •Раздел 2 Операционная система Windows
- •Тема 2.1 Введение в операционную систему Windows
- •Тема 2.2 Защищенный режим работы
- •Тема 2.3 Ресурсы исполнения программ
- •Тема 2.4 Многозадачность в ос Windows
- •Тема 2.5 Динамические библиотеки dll
- •Тема 2.6 Режим ядра
- •Тема 2.7 Системные механизмы ядра
- •Тема 2.8 Виртуальное адресное пространство
- •Тема 2.9 Драйверы ос Windows
- •Тема 2.10 api oc Windows
- •Раздел 3 Операционная система unix (Linux)
- •Тема 3.1 oc unix
- •Тема 3.2 Процессы в oc unix
- •Тема 3.3 Взаимодействие между процессами
- •Тема 3.4 Средства синхронизации потоков
- •Тема 3.5 Файловая система
Тема 2.7 Системные механизмы ядра
Системные механизмы ядра. Диспетчеризация ловушек
Методические рекомендации
B Microsoft Windows существует несколько базовых механизмов, которыми пользуются компоненты режима ядра: исполнительная система (executive), ядро и драйверы устройств.
Диспетчеризация ловушек. Прерывания и исключения — такие ситуации в операционной системе, в которых нормальный поток выполнения кода процессором прерывается. Эти ситуации обнаруживаются как программным, так и аппаратным обеспечением. Термин ловушка (trap) относится к механизму, благодаря которому при прерывании или исключении процессор перехватывает контроль над выполняемым потоком и передает управление определенной части операционной системы. B Windows процессор передает управление обработчику ловушек (trap handler) - функции, специфичной для конкретного прерывания или исключения.
Ядро различает прерывания и исключения: прерывание (interrupt) является асинхронным событием (т. е. оно может произойти в любой момент независимо от текущих команд, выполняемых процессором). Прерывания в основном генерируются устройствами ввода-вывода и таймерами. Их можно включать и отключать. Исключение (exception), напротив, представляет собой синхронное событие, являющееся результатом выполнения конкретной команды. Повторный запуск программы в аналогичных условиях с теми же данными позволит воспроизвести исключение. Примерами исключений могут служить нарушения доступа (ошибки защиты памяти), выполнение некоторых команд отладчика, а также попытки деления на нуль. Ядро также считает исключениями вызовы системных сервисов (хотя с точки зрения технической реализации это системные ловушки).
Прерывания и исключения можно генерировать как программно, так и аппаратно. Например, исключение «bus error» (ошибка шины) возникает из-за аппаратной ошибки, а причиной исключения «divide-by-zero» (деление на нуль) является ошибка в программе. Аналогичным образом прерывания могут генерироваться устройствами ввода-вывода или самим ядром (такие программные прерывания, как, например, APC или DPC).
При аппаратном прерывании или исключении процессор записывает статусную информацию в стек ядра для прерванного потока, чтобы впоследствии можно было вернуться к исходной точке в потоке управления и продолжить выполнение команд так, будто ничего не произошло. Если поток выполнялся в пользовательском режиме, Windows переключается на стек режима ядра для потока. Затем создает в стеке ядра прерванного потока фрейм ловушки (trap frame), в котором сохраняет информацию о состоянии потока.
Программное прерывание ядро обслуживает либо при обработке аппаратного прерывания, либо синхронно - при вызове потоком функции ядра, относящейся к данному программному прерыванию.
B большинстве случаев ядро устанавливает функции, выполняющие общую обработку ловушек до и после передачи управления другим функциям, которые ставят ловушки. Например, когда устройство генерирует прерывание, обработчик ловушек аппаратных прерываний (принадлежащий ядру) передает управление процедуре обслуживания прерывания (interrupt service routine, ISR), предоставленной драйвером соответствующего устройства. Если прерывание возникло в результате вызова системного сервиса, обработчик ловушек общесистемных сервисов передает управление функции указанного системного сервиса в исполнительной системе. Ядро также устанавливает обработчики для ловушек, которые оно не ожидает или не обрабатывает.
Литература [1]
Вопросы для самоконтроля
1 Дайте понятия прерывания и исключения
2 Опишите диспетчеризацию ловушек
