
- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры 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.
- •Словарь терминов.
Основные функции для работы с потоками.
CreateThread(…). Создаёт новый поток в текущем процессе.
CreateRemoteThread(…).Создаёт новый поток в другом процессе.
ExitThread(…). Нормальное завершение потока.
TerminateThread(…). Аварийное завершение потока, завершение потока из другого потока.
GetExitCodeThread(…). Получение кода завершения любого потока.
GetThreadTimes(…). Возвращает временные характеристики другого потока, то есть время работы другого потока в пользовательском режиме и режиме ядра. В Windows 95 и Windows 98 не используются.
GetThreadContext(…). Возвращает регистры процессора для данного потока.
SetThreadContext(…). Изменяет регистры процессора для данного потока.
GetCurrentThread(…). Получить дескриптор текущего потока.
SetCurrentThreadId(…). Получить идентификатор текущего потока.
Аналогичные функции есть для процесса GetCurrentProcess и GetCurrentProcessId.
Управляющие структуры ос для работы с потоками.
Управляющие структуры имеют kernel32.dll. Исполнительная система. Упрощённая структура.
TEB
Win32k.sys
Пользовательский режим
Область системных программ
TDB (ETHREAD)
KTHREAD
PDB (EPROCESS)
незавершенные
запросы на ввод/вывод
маркер доступа
блок потока
подсистемы Win32
W32THREAD
csrss.exe
База данных используется kernel32.dll.
Блок потока ядра – Win32 в режиме ядра.
Лекция № 10
Описание структур управления потоками.
TDB (ETHREAD). Начинается со стандартного заголовка, который содержит идентификатор объекта (от 0 до 27) и счётчик числа обращений к данному объекту. Далее следует указатель на структуру KTHREAD – блок потока ядра, указатель на PDB (EPROCESS), откуда поток может извлекать, структура CONTEXT – содержит описание регистров, время создания и завершения потока, стартовый адрес потока, и так далее.
KTHREAD. Содержит информацию необходимую ядру Windows для планирования потоков и их синхронизации с другими потоками.
суммарное время работы в пользовательском режиме,
суммарное время работы в режиме ядра,
базовый и текущий приоритеты потока,
значение кванта (для Windows 2000),
маска привязки к процессорам, то есть в случае многопроцессорной системы информация о том, на каких процессорах может выполняться данный поток,
список объектов, ожидаемых данным потоком, например, поток ждёт завершения какого-либо другого потока.
указатель на блок окружения потока, который находится в пользовательском адресном прост-ранстве.
TEB. В нём содержится информация о стеке потока, базовый адрес.
заполненная часть стека
/////////////////////////
текущий адрес стека
базовый адрес стека младший адрес
В блоке TEB содержится локальная память потока TLS, значение кода последней ошибки, то есть LastError. Даные необходимые для работы модулей user32.dll и GDI32. В том случае, если поток работает в сети в TEB содержится указатель на данные WinSock.
W32THREAD. Дублирует данные, необходимые для работы user32 и gdi32.
Алгоритм работы функции CreateThread(…) (kernel32.dll).
Создаёт стек пользовательского режима в адресном пространстве процесса.
Инициализирует аппаратный процесс потока, то есть структуру CONTEXT.
Вызывает функцию ядра ОС NtCreateThread(…), которая создаёт все управляющие структуры, которые находятся в системной части адресного пространства.
Создаёт блок TEB.
Уведомляется подсистема Win32, которая создаёт блок W32THREAD.
Возвращает дескриптор и идентификатор вызывающей программе вновь созданного потока.
Вновь созданный поток ставится в очередь на выполнение.