Построение практикума по операционным системам на основе MS Windows Коньков Константин Алексеевич (K_Konkov@mail.ru) к.ф.-м.н., доцент Московский физико-технический институт, г. Москва Аннотация Основные положения учебного курса по операционным системам проиллюстрированы на примере изучения ОС MS Windows. Информация о поведении системы основана на активном использовались ее API, применении разнообразных инструментальных средств, изучении исходных текстов и трассировке ядра. Методика обучения Практическое освоение ОС MS Windows основано на: • Изучении специализированной и справочной литературы • Разработке небольших модельных консольных приложений • Применении разнообразных инструментальных средств • Изучении исходных текстов ядра • Трассировке ядра системы Введение в курс ОС – виртуальная, абстрактная машина ОС – менеджер ресурсов История MS-DOS и Windows 3.1, Windows 95, Windows NT … понятие реентерабельности Упрощенная структура системы ОС Windows Структура ОС Windows Основные компоненты ОС Windows реализованы в следующих системных файлах, находящихся в каталоге system32: • hal.dll - уровень абстрагирования от оборудования, • ntoskrnl.exe - исполнительная система и ядро, • ntdll.dll - внутренние функции поддержки и интерфейсы диспетчера системных сервисов с функциями исполнительной системы • win32k.sys - часть подсистемы Win32, работающая в режиме ядра • kernel32.dll, advapi32.dll, user32.dll, gdi32.dll - основные dll подсистемы Win32 … анализ состава отдельных модулей Архитектурные особенности ОС Windows Первые версии Windows имели микроядерный дизайн, основанный на микроядре Mach Схема ОС с микроядерной архитектурой. Архитектура более поздних версий системы микроядерной уже не является. Различные маршруты выполнения вызовов Win32 API Техника разработки Win32 приложений • Среда Visual C, Win32 API, MSDN • Типы данных, используемые в Win32 приложениях • Unicode • Обработка ошибок Базовые механизмы Прерывания, системные вызовы, исключения • Единообразная обработка: фрейм ловушки, сохранение контекста, обобщенный вектор прерываний (Interrupt Dispatch Table) Базовые механизмы Прерывания, системные вызовы, исключения • Единообразная обработка: фрейм ловушки, сохранение контекста, обобщенный вектор прерываний (Interrupt Dispatch Table) Базовые механизмы Прерывания, системные вызовы, исключения • Единообразная обработка: фрейм ловушки, сохранение контекста, обобщенный вектор прерываний (Interrupt Dispatch Table) • Синхронность и асинхронность • Приоритеты IRQL, отложенная обработка Объекты ядра Объекты – абстрактная концепция, которая активно используется в ОС Windows для регулирования доступа к системным ресурсам. Описатели объектов hSemaphore = CreateSemaphore(NULL, 0, MaxCount, "MySemaphore"); Объекты и их описатели Именование объектов Утилита WinObj Связь пространства имен объектов и пространства имен файловой системы. Реализация процеcсов и потоков 1. Отличие процесса от программы 2. Процесс базируется на двух независимых концепциях: • Владение ресурсами (память, файлы, семафоры, порты …) • Поток (thread) исполняемых команд или просто поток. Понятие потока определяется текстом программы и текущим состоянием, которое отражает динамику исполнения и подлежит сохранению при переключении потоков. Реализация процеcсов Блок управления процессом (PCB) реализован в виде набора связанных структур, главная из которых называется блоком процесса EPROCESS. Создание процессов в ОС Windows Обычно процесс создается другим процессом вызовом Win32-функции CreateProcess (см. рис.). Реализация потоков Контекст потока. Переключение контекстов В типичном случае переключение контекста требует сохранения и восстановления следующих данных: • счетчика программы (program counter); • регистра состояния процессора; • содержимого остальных регистров процессора; • указателей на стек ядра и пользовательский стек; • указателя на адресное пространство, в котором выполняется поток (каталог таблиц страниц процесса). Структура CONTEXT (определена в файле WinNT.h). Функции GetThreadContext и SetThreadContext. Выполнение кода пользователя Восстановление контекста Работа hardware Выполнение кода ОС Поток 1 Работа hardware Исполнение Готовность Выполнение кода пользователя Поток 2 Ожидание Готовность Исполнение Выполнение кода ОС Прерывание Сохранение контекста Обработка Планирование прерывания Пример цепочки операций при переключении контекстов Реализация потоков Подобно процессам, каждый поток имеет свой блок управления, реализованный в виде набора структур, главная из которых ETHREAD показана на рис. Реализация потоков Создание потока инициируется Win32-функцией CreateThread, которая находится в библиотеке Kernel32.dll. Этапы создания потока Состояния потоков Каждый новый процесс содержит по крайней мере один поток, остальные потоки создаются динамически. Потоки составляют основу планирования и могут находиться в одном из состояний (см. рис.). Состояния потоков Переход потоков из одного состояния в другое можно «увидеть» с помощью консоли «производительность» Рис. Переход потока из состояния ожидания (5) в состояние готовности (1) Синхронизация Race conditions, взаимоисключение, критические секции Использование переменной-замка в сочетании со спинблокировкой while(lock); lock = 1; Команда Test-and-Set (проверить и установить) while(lock); lock = 1; While(Test_and_Set(lock)); Семейство Interlocked-функций. InterlockedCompareExchange, InterlockedExchangeAdd … Адаптивные семафоры и мьютексы и их реализация Синхронизация в ядре • запрет прерываний (повышение IRQL уровня), • захват спинблокировки, • проблема тупиков, • синхронизация при «высоких» IRQL Планирование Вытесняющая (preemptive) многозадачность, вытеснение ядра системы Алгоритмы планирования • приоритетное планирование в сочетании с алгоритмом RR … • слой абстрагирования приоритетов динамическое повышение приоритетов … • поощрение интерактивных потоков Планирование реального времени Диспетчеризация, переключение контекстов Планирование в условиях многопроцессорности Управление памятью Наличие двух адресных пространств и трансляция (связывание) адреса Управление памятью Наличие двух адресных пространств и трансляция (связывание) адреса Рис. Трансляция адреса с использованием ассоциативной памяти и двухуровневой таблицы страниц. Управление памятью Виртуальная память Управление памятью Рабочие наборы и обработка страничных нарушений (page faults) Рис. Наблюдение за размером рабочего набора процесса и количеством страничных ошибок. Управление памятью Отдельные аспекты функционирования менеджера памяти • Локализация страниц в памяти • Копирование при записи (Сopy-On-Write ) • Контроль процессом памяти другого процесса. Файловая система Файлы и объекты, имеющие файловый интерфейс Синхронный и асинхронный ввод-вывод Методы выделения дискового пространства Поиск в каталоге Файловая система Файлы и объекты, имеющие файловый интерфейс Синхронный и асинхронный ввод-вывод Методы выделения дискового пространства Поиск в каталоге Монтирование и связывание … образование циклов Файловая система Совместный доступ к файлам … синхронизация доступа Файловая система Производительность Особенности кэширования в ОC Windows Рис. Поведение счетчика «сбросов данных» кэша. Файловая система Целостность файловой системы Журналирование Поддержка нескольких файловых систем Безопасность Система управления доступом Модели защищенности Дискреционный и ролевой доступ Пример графа доступа Пример матрицы доступа Безопасность Система управления доступом Пример проверки прав доступа к защищенному объекту Безопасность Политика безопасности Аутентификация пользователя Аудит системы защиты Недопустимость повторного использования объектов Защита от внешнего навязывания Сложные сценарии настройки контекста пользователя Благодарю за внимание Коньков Константин Алексеевич (K_Konkov@mail.ru) к.ф.-м.н., доцент Московский физико-технический институт, г. Москва Материал выступления базируется на книге Коньков К.А. Устройство и функционирование ОС Windows. Практикум к курсу «Операционные системы». Издательство "Интуит.ру". 2008 г.