- •Тема 1. Операционные системы
- •Тема 2. История ос
- •0.Аналитическая машина Чарльза Бэббиджа
- •Тема 3. Архитектура ос
- •Тема 4. Процессы и потоки
- •Тема 5. Обработка прерываний
- •Тема 6. Управление процессами и потоками
- •Тема 10.Взаимоблокировки
- •Тема 11.Управление памятью
- •Тема 12.Виртуальная память
- •Тема 13. Стратегии замещения виртуальной памяти
- •Тема 13.Файловые системы
- •Тема 14. Реализация некоторых подсистем ос Windows
- •Ipc (обмен)
- •Ipc (синхронизация)
- •Тема 15. Реализация некоторых подсистем ос Linux
- •Тема 7. Межпроцессное взаимодействие (Inter-Process Communication, ipc)
- •6.2) Аппаратная поддержка (xchg)
- •Тема 8. Примитивы межпроцессного взаимодействия
- •1) Семафоры
- •2) Мьютексы (mutex)
- •3) Мониторы
- •4) Очереди сообщений
- •5) Барьеры
- •Тема 9. Классические проблемы межпроцессного взаимодействия
Тема 14. Реализация некоторых подсистем ос Windows
Структура ОС Windows
Пространство ядра ОС Windows семейства NT
Уровеньабстрагированияоборудования (Hardware Abstraction Layer, hal.dll)
Драйверы
Графический интерфейс пользователя (win32k.sys)
Ядро NTOS (ntoskrnl.exe)
Уровень абстрагирования оборудования
Позволяет абстрагироваться от физических устройств, упростить перенос ОС на другие платформы, собрать платформо-зависимый код в одном месте
Реализует службу идентификации устройств
Управляет устройствами и DMA
Предоставляет службы времени
Предоставляет низкоуровневые примитивы синхронизации
Уровень ядра
Планирование и синхронизация потоков
Предоставление объекта управления — структуры данных для управления процессом
Предоставление диспетчерского объекта — структуры данных для диспетчеризации
Исполнительный уровень
В основном переносимый
Реализует «диспетчеры»:
Диспетчер объектов
Диспетчер ввода-вывода
Диспетчер процессов
Диспетчер памяти
Диспетчер кэширования
Монитор безопасности
Диспетчер конфигурации
Драйверы
Являются динамически связываемыми библиотеками
Диспетчер I/O формирует маршрут потока данных — стек устройства
Драйвер-фильтр — драйвер, не управляющий устройством, а только преобразующий передаваемые данные
Драйвер мини-порта — драйвер, организующий работу с псевдо-устройством, реализующим общую функциональность набора устройств
Модель работы
Модель работы — процесс
Процесс содержит виртуальное адресное пространство, описатели объектов ядра, потоки, общие для потоков ресурсы
Процесс имеет ProcessEnvironmentBlock (PEB): список загруженных модулей, область памяти, рабочий каталог, данные для управления «кучами», …
Модель работы — поток
Поток — абстракция ядра для планирования
Поток имеет приоритет, привязку к процессору (affinity) и ThreadEnvironmentBlock (TEB): данные пользовательского режима, ThreadLocalStorage, ...
Системные вызовы для управления процессами
CreateProcess()
CreateThread()
CreateFiber()
ExitProcess()
ExitThread()
ExitFiber()
SwitchToFiber()
Создание нового процесса CreateProcess():
Преобразование имени файла из строки Win32 в строку WinNT и поиск файла
Все параметры передаются функции NtCreateUserProcess() в режиме ядра
NtCreateUserProcess() обрабатывает параметры, открывает образ программы, и создаёт объект сегмента
Создание нового процесса
Диспетчер процессов создаёт объект процесса
Диспетчер памяти создаёт адресное пространство (инициализация каталогов страниц и дескрипторов виртуальных адресов)
Создаётся таблица описателей, в которую копируются наследуемые описатели родителя
Диспетчер памяти инициализирует структуры данных рабочего набора
Представленные объектом сегмента части образа программы отображаются на адресное пространство
Исполнительные уровень инициализирует PEB
В созданном процессе выделяется виртуальная память для передачи параметров
В таблице описателей процессов выделяется новый идентификатор
Создаётся объект потока, его стек и TEB, инициализируется контекст
Объект процесса добавляется в список процессов
NtCreateUserProcess() возвращает управление в пространство пользователя с новым процессом, содержащим один поток в состоянии «приостановлен»
Если NtCreateUserProcess() возвращает ошибку, то проверяется, не принадлежит ли процесс к другой подсистеме или предназначен для работы под отладчиком
В случае успеха NtCreateUserProcess(), процесс регистрируется в csrss.exe
Применяются ограничения безопасности процесса
Вызывается NtResumeThread() для запуска потока