Архитектура современных операционных систем
135 Если блочный обработчик не найден или не смог обработать исключение, то диспетчер исключений проверяет, а не задано ли подсистемой среды, в рам- ках которой выполняется процесс, своего обработчика этого исключения. Если такой обработчик задан, то управление передается ему, иначе управ- ление передается к обработчику исключений по умолчанию, который аварийно завершает поток или процесс. Обработка системных вызовов Любая ОС предоставляет возможность прикладным процессам вызывать системные функции, работающие в привилегированном режиме, то есть в ре- жиме ядра. Для того чтобы при таком переходе из пользовательского режима в режим ядра не было нарушений, используется специальный вызов syscall. В WindowsNT это программное прерывание Int 2EB, приводящее к вызову обработчика ловушки. Он запоминает состояние процессора, переходит в ре- жиме ядра и вызывает диспетчера системных вызовов. Диспетчер системных вызовов копирует параметры системного вызова из стека пользователя в стек ядра, чтобы пользователь не имел доступа к ним и вызывает соответствующий обработчик. Для поиска обработчиков системных вызовов используется таблица рас- пределения системных сервисов (SSAT). Эта таблица содержит адреса точек входа в обработчики системных вызо- вов, а индексом в этой таблице является номер вызываемого системного серви- са. Такой подход позволяет легко наращивать системные сервисы без измене- ния кода ядра. Межпроцессорная синхронизация При работе в мультипроцессорной системе важно, чтобы глобальные дан- ные ОС в каждый конкретный момент изменялись только одним процессором.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy