
- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры Windows.
- •Основные системные файлы Windows 95, nt, 2000.
- •Средства аппаратной поддержки управления памятью.
- •Сегментная организация памяти.
- •Страничная или сегментно-страничная организация памяти.
- •Механизмы управления памятью Windows.
- •Раздел 4. В него загружаются ядро Windows nt и драйверы устройств. Этот раздел полностью защищен и по чтению, и по записи. Регионы в адресном пространстве.
- •Системные переменные и операционные системы.
- •Передача физической памяти региону.
- •Механизм выделения страниц физической памяти.
- •Выделение физической памяти под программный код.
- •Атрибуты защиты страниц.
- •Стек потока.
- •Стек потока под Windows 95, 98.
- •Функции компилятора для контроля стека.
- •Кучи (Heaps).
- •Особенности кучи в Windows 95, Windows nt.
- •Структура арены.
- •Рассмотрим функции работы с кучей.
- •Удаление кучи.
- •Выделение блока памяти в определённой куче.
- •Освобождение блока кучи.
- •Дополнительные кучи Win32 процесса.
- •Создание дополнительных куч для эффективного управления памятью.
- •Локальный доступ. Создание дополнительных куч для локализации доступа.
- •Файлы проецируемые в память (фпвп).
- •Проецирование в память exe и dll файлов.
- •Совместное использование статических данных несколькими экземплярами exe и dll модулей.
- •Иерархия функций работы с памятью.
- •Объекты kernel32.Dll.
- •Процессы.
- •Структуры данных процесса.
- •Структура блока pdb.
- •Блок kprocess.
- •Блок переменных окружения (peb).
- •Переменная ядра, связанная с процессами.
- •Последовательность действий, выполняемых функцией CreateProcess.
- •Потоки.
- •Основные функции для работы с потоками.
- •Управляющие структуры ос для работы с потоками.
- •Описание структур управления потоками.
- •Управление потоками.
- •Лекция № 11
- •Функции Win32 связанные с планированием.
- •Учёт квантов времени.
- •Сценарий планирования.
- •Поток простоя.
- •Динамическое повышение приоритета потока.
- •Планирование потоков в системах с симметричной мультипроцессорной системой (smp).
- •Синхронизация.
- •Синхронизация потоков без использования объектов синхронизации.
- •Синхронизация потоков.
- •Критические секции.
- •Работа потока с несколькими критическими секциями.
- •Синхронизация объектов.
- •События со сбросом вручную.
- •События с автоматическим сбросом.
- •Модули.
- •Структура imte.
- •Структура modref.
- •Файлы. Формат pe файла.
- •Особенности ре формата:
- •Заголовок ре файла.
- •Основные секции исполняемого файла.
- •.Idata bfc0847d .Text jmp dword ptr [00040042 … call 00014408 (Вызов GetMessage) Прикладная программа
- •Импортирование ре файлов.
- •Эскпорт ре файлов.
- •Лекция № 15
- •Ресурсы ре файла.
- •Базовые поправки ре файла.
- •Файловые системы.
- •Загрузочный сектор.
- •Особенности ntfs.
- •Новые возможности ntfs.
- •Структура ntfs на диске.
- •Кластеры.
- •Главная таблица файлов.
- •Структура файловых ссылок.
- •Записи о файлах.
- •Индексация имён файлов.
- •Битовая карта.
- •Восстанавливаемость ntfs.
- •Журнал транзакций.
- •Записи контрольной точки.
- •Восстановление данных в ntfs.
- •Проход повтора.
- •Проход отмены.
- •Отказоустойчивость ntfs.
- •Словарь терминов.
Переменная ядра, связанная с процессами.
PsActiveProcessHead. Заголовок списка блоков PDB. CreateProcess(…) открывет ехе файл, который будет выполняться в процессе, то есть PDB. Создаёт первичный поток, то есть стек потока, контекст потока (содержимое всех регистров) и объект поток, то есть TDB.
Уведомляет подсистему Win32 о создании нового процесса и потока. Начинает выполнение первичного потока, если в том случае не указан флаг Create_Suspend.
В контексте нового процесса и потока инициализируется адресное пространство, то есть загружаются необходимые dll и начинается выполнение программы.
Последовательность действий, выполняемых функцией CreateProcess.
открывается ехе
файл и создаётся объект файл проецируемый
в память
создаётся объект
«процесс»
создаётся объект
«поток»
подсистема Win32
уведомление
подсистемы Win32
создаётся новый
процесс и поток
выполнение
первичного потока
завершение
инициализации процесса
выполнение
управление
возвращается вызвавшей функции
Этап 1. Основная проблема – приложения, не являющиеся Win32 нельзя выполнять напрямую. Функция CreateProcess(…) на этапе 1 ищет “образ поддержки” с помощью которой будет выполняться не Win32 приложение, то есть CreateProcess(…) определяет тип процесса, ищет вспомогательную программу и проецирует её на адресное пространство нового процесса. Например, если процесс относится к POSIX, то используется posix.exe, OS/2 – os2.exe, MS-DOS (*.exe, *.com, .pif) – Ntvdm.exe, MS-DOS (.bat) – cmd.exe.
Этап 2. Создание объекта процесс. Создаётся
1) PDB или (EPROCESS).
2) Адресное пространство процесса.
3) Создаётся блок процесса ядро.
4) Инициализируется адресное пространство процесса.
5) Создаётся блок окружения процесса.
Блок PEB – в области пользовательских программ.
Этап 3. Создаётся объект поток, стек потока и его контекст.
Объект поток – это структура в системной области – TDB – содержит информацию.
Стек потока мы проходили. Выделяется регион памяти.
Контекст – это структура CONTEXT – зависит от аппаратуры, зависит от типа процессора. В этой структуре хранятся значения всех регистров процессора.
Этап 4. Уведомление подсистемы Win32. На этом этапе kernel32.dll посылает исполнительной системе Win32 сообщение для того, чтобы подсистема Win32 подготовилась к выполнению нового процесса. Это сообщение содержит идентификаторы процесса и потока и идентификаторы родительского процесса и флаг, является ли процесс Win32 приложением. Подсистема Win32 создаёт блок процесса.
Этапы 5 и 6 очевидны.
Потоки.
Потоки отвечают за исполнение программного кода. При создании процесса всегда создаётся первичный поток. По желанию программиста создаются дополнительные потоки.
CreateThread(…). Для чего создаются потоки?
Выделив различные задачи, выполняемые процессом в отдельном потоке позволяет избежать цикла опросов.
Поток может находится в одном из состояний.
Поток фактически работает, при этом в регистре процессора переписывается содержимое структуры CONTEXT. Все остальные потоки процесса приостанавливаются в случае одного процессора в системе.
Поток готов к выполнению. Отсутствуют все причины, препятствующие работе потока, за исключением того, что процессор занят выполнением другого потока.
Заблокированное состояние. Поток ожидает некоторого события, например, ожидание завершения работы другого потока или какого-либо процесса. До наступление этого события планировщик не позволит этому процессу выполнится.
Объектами синхронизации являются потоки процессы, критические секции, семафоры, события, мьютексы.
Потоки владеют набором регистров.
Все потоки процесса имеют общий доступ к тому, чем этот процесс владеет, поэтому имеет доступ к адресному пространству процесса (различным регионам адресного пространства). Все потоки процесса совместно используют одни и те же значения дескрипторов, следовательно они могут обращаться к файлам, событиям, файлам проецируемым в память и так далее, которые принадлежат процессу.
Каждый поток обладает собственным стеком, собственной очередью оконных сообщений, собственным набором значений локальной памяти потока и собственной цепочкой обработки структу-рированных исключений.
Поток может завладеть или освободить различные синхронизирующие объекты, принад-лежащие процессу. Дескриптор потока – это индекс в таблице дескрипторов процесса. Иденти-фикатор потока – это закодированный указатель на базу данных потока (PDB).