- •1. Понятие вычислительной системы
- •1.1. Модель вычислителя
- •1.2. Модель коллектива вычислителей
- •1.3. Понятие параллельных алгоритмов
- •1.4. Принципы технической реализации модели коллектива вычислителей
- •1.9. Распределенные вычислительные системы
- •1.5. Классификация архитектур вычислительных систем
- •1.6. Конвейерные вычислительные системы
- •1.7. Матричные вычислительные системы
- •1.8. Мультипроцессорные системы
- •1.10. Вычислительные системы с программируемой структурой
- •1.11. Примеры реализаций вычислительных систем.
- •2. Аппаратные средства вс
- •2.1. Прерывания
- •2.2. Многомодульное программирование
- •2.3. Реализация архитектурных решений. Обзор технологий процессоров Intel
- •3. Ос. Основные понятия и типы операционных систем
- •3.1. Основные технологии программирования
- •3.2. Общие подходы к построению ос. Классификация ос.
- •3.3. Основные функции ос
- •3.4. Подходы к построению ос.
- •3.5. Виртуализация
- •3.6. Подходы Oracle
- •3.7. Центры обработки данных (цод)
- •Инструментарий ос (на основе Windows)
- •Основные базовые понятия: процессы и потоки
- •Инструментарий
- •Режим ядра и пользовательский режим
- •Средства изучения внутреннего устройства Windows
- •Основные концепции построения Windows
- •Архитектура современных ос
- •Лекция Основные требования при проектировании
- •Модель ос Windows
- •Обзор архитектуры
- •Многопроцессорная обработка
- •Различия между клиентскими и серверными версиями ос Windows
- •Лекция. Проверочный выпуск ос
- •Ключевые компоненты системы
- •Подсистема окружения
- •Подсистема окружения Windows
- •Исполнительная система Windows
- •Объекты ядра
- •Поддержка оборудования
- •Уровень абстрагирования от оборудования (Hardware Abstraction Layer)
- •Драйверы устройств в ос Windows
- •Недокументированные интерфейсы
- •Системные процессы
- •Прерывания (interrupts) и dpc (deferred procedure calls)
- •Процесс system и его потоки
- •Диспетчер сеансов
- •Диспетчер управления сервисами
- •Системные механизмы Windows
- •Виртуальная память
- •Режим ядра и пользовательский режим
- •Другие механизмы
- •Уровни запросов программных прерываний
- •Объекты прерывания
- •Программные прерывания
- •Прерывания apc (Asynchronous Procedure Call)
- •Диспетчеризация исключений
- •Необработанные исключения
- •Поддержка отчетов об ошибках
- •Диспетчеризация системных сервисов
- •Диспетчеризация 32-разрядных системных сервисов
- •Диспетчеризация системных сервисов режима ядра
- •Диспетчер объектов
- •Объекты исполнительной системы
- •Структура объектов в Windows
- •Заголовки и тела объектов
- •Объекты типа
- •Атрибуты объекта типа
- •Методы объекта
- •Описатели объектов и таблица описателей
- •Глобальные флаги Windows
- •Трассировка событий ядра
- •Управление процессами и потоками
- •Внутреннее устройство процессов
- •Создание процессов
- •Внутреннее устройство процессов. Структуры данных
- •Внутреннее устройство потоков
- •Основные блоки описания потоков в ос Windows
- •Взаимодействие процессов (ipc)
- •Взаимоисключения
- •Синхронизация в Windows
- •Спин-блокировки
Необработанные исключения
При запуске каждого процесса существует обработчик, который сообщает о необработанных исключениях. В 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 адрес параметров.
Диспетчеризация системных сервисов режима ядра
Ядро также использует номер системного сервиса и ищет его в таблице диспетчеризации системных сервисов SystemServiceDispatchTable. Это таблица другая, отличная от IDT, но сходна тем, что каждая запись – ссылка. Замечание: в режиме ядра номера системных сервисов могут отличаться от одного пакета обновления к другому.
Диспетчер системных сервисов PSystemService берет аргументы, которые соответствуют вызываемому сервису и записывают их в стек ядра. После этого они становятся доступны.
Замечание: у каждого потока есть указатель на таблицу системных сервисов. Windows позволяет поддерживать до 4-х таблиц системных сервисов. Диспетчер определяет, в какой таблице находится ссылка на запрошенный сервис.
Слайд 39 показывает, что номер системного вызова делится на части и транслируется в индекс таблицы и индекс внутри таблицы. Главная таблица (KeServiceDescriptorTable) определяет главные сервисы ОС, реализуемые в ntoskernel. Другая таблица, называемая Shadow включает сервисы, относящиеся к User и GDI, реализованные в win32k.sys.
Возможно в некоторых версиях Windows добавлять в эти таблицы новые сервисы.
Замечание: Windows Server 2003 не поддерживает добавление новых таблиц системных сервисов.
Инструкции для диспетчеризации сервисов исполнительной системы Windows хранятся в библиотеке nt.dll.
Подсистемы окружения вызывают из nt.dll функции для реализации сервисов. На слайде 41 показано, что функции, относящиеся к User и GDI и относящиеся к функциям ядра выполняются из разных библиотек. Например, Windows функция WriteFile вызывает функцию NTWriteFile из nt.dll. Она вызывает срабатывание ловушки системного сервиса и передает номер системного сервиса в NTWriteFile. Для режима USER и GDI диспетчер работает с Win32.sys.
