![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Необработанные исключения
При запуске каждого процесса существует обработчик, который сообщает о необработанных исключениях. В Windows 2000 он включается по умолчанию. Пример сообщения представлен на слайде. Если ОС не может обработать исключение в приложении, то процесс не завершается, выдается сообщение с вопросом, что делать, и при нажатии ОК процесс завершается.
Поддержка отчетов об ошибках Важной компонентой любой программы является диагностика (диагностические сообщения). В ОС Windows тоже предусмотрена компонента, которая называется Windows Error Reporting. Перехватив необработанное исключение, фильтр или программа исполнительной системы начинает проверять, нужно ли запускать дополнительно для анализа Windows Error Reporting. Если в реестре по умолчанию установлен ноль и нет строки debugger, загружается в аварийный процесс специальная DLL, которая вызывает функцию Report Fail. На слайде 35 представлено окно с отчетом.
Диспетчеризация системных сервисов Диспетчеризация системных сервисов начинает выполняться после инструкции, за которой закреплен процесс диспетчеризации. Инструкция зависит от типа процессора, на котором работает Windows.
Диспетчеризация 32-разрядных системных сервисов Для процессоров x86 для начала процессов диспетчеризации использовалась инструкция int 46. В результате выполнения этой инструкции срабатывала ловушка и Windows заносит в таблицу IDT запись под номером 46 – указатель на диспетчер системных сервисов. Ловушка переключает выполняемый поток в режим ядра и запускает процесс диспетчера системных сервисов. Каждый системный сервис имеет свой номер. Номер запрошенного по int 46 сервиса передается числом в регистре eax. Регистр ebx передает указатель (адрес) на список параметров для выполнения системного сервиса. На процессорах x86 Pentium II и выше Windows использует другую инструкцию SysEnter (слайд 38). SysEnter – команда процессора, которую Intel ввел специально для быстрой диспетчеризации системных сервисов. Эта инструкция также переводит процесс в режим ядра и запускает диспетчер. Отличия: номер передается в eax, а список параметров – в edx. Для возврата в пользовательский режим процесс-диспетчер выполняет функцию SysExit. На 32-разрядных процессорах AMD введена машинная команда SysCall, работает по аналогии с SysEnter. Возврат из системног сервиса осуществляется через команду SysRet. На слайде 37 показано, как заносится номер системного сервиса 183 (B7) и в edx адрес параметров.
|