
- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры 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.
- •Словарь терминов.
События с автоматическим сбросом.
Освобождаются с помощью SetEvent(…), переходят в занятое состояние с помощью WaitForMultipleObjects(…), как только событие освобождается.
WaitForMultipleObjects(…);
.
.
.
SetEvent(…);
Для событий с автосбросом SetEvent(…) не используется.
Модули.
Модули – это версия в памяти кода данных и ресурсов исполняемого файла или dll. В каждом процессе имеется модуль для ехе файла, каждая dll – это модуль.
Если два или более процесса обращаются к одной dll они используют один и тот же модуль. Точно также, когда запущены 2 копии процесса, они используют один и тот же модуль.
Информация о модулях хранится в базе данных модуля. В Windows 95, 98, NT база данных модуля фактически представляет собой заголовок исполняемого файла. Любой процесс загружается в ВАП.
начало база данных
ехе файла модуля
При работе с модулями Win32 использует дескриптор модуля HMODULE.
GetModuleHandle(…) – получает дескриптор модуля, виртуальный адрес с которого загружается ехе или dll. Например для всех процессов, работающих под Windows 95, 98 это 00400000h.
База данных модуля находится в адресном пространстве процесса, кроме того, для оператив-ной работы с модулем W32 создаёт копию базы данных своей системной кучи.
ВАП
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
видны всем процессам
файл
на диске
база
данных
модуля
2 Гб
личная база данных модуля
начальный адрес
При работе с модулями возникают две проблемы:
Проблема защиты информации, то есть создание закрытого адресного пространства для каждого процесса.
Для оперативной работы ОС надо знать список всех загруженных модулей.
Эти проблемы решаются с помощью двух структур IMTE (Internal Module Table Entry) и MODREF – она поддерживает собственный список модулей для каждого процесса. И та и другая структуры находятся в системной куче ядра. Рассмотрим структуру IMTE.
таблица
модулей IMTE
kernel32.dll
pModuleTableArray
user32.dll
gdi32.dll
my.exe
Начало таблицы модулей хранится в pModuleTableArray. Как только новый процесс или dll создаются, то kernel32 создаёт структуру IMTE, ищет свободный элемент в таблице модулей и записывает в него указатель на структуру IMTE. ОС сама следит за тем, чтобы не произошло заполнение таблицы модулей.
Лекция № 13 (26.04.02)
Структура imte.
Указатель на базу данных модуля, расположенного в куче kernel32.dll в области выше 2 Гб. Благодаря указателю kernel32 может получать информацию о любом модуле не переключаясь в контекст памяти.
Указатель на полное имя файла из которого был создан модуль. Память под полное имя модуля выделяется.
Указатель на строку с именем модуля. Этот указатель указывает внутрь предыдущей структуры.
Число символов в полном имени файла.
Число символов только в имени файла.
Зачем нужны эти два предыдущих поля? Например, функция GetModuleHandle с помощью указателя просматривает структуры IMTE и для ускорения поиска сравнивает длины запрашиваемого модуля и модуля в очередной структуре IMTE, если длины не совпадают, то сравнивать имена смысла не имеет.
Число разделов в модуле.
Например, раздел, содержащий данные, программный код и т.д.
Базовый адрес, по которому был запущен модуль.
Счётчик ссылок к модулю.
Счётчик числа ссылок в модуле, например, если какая-то программа была запущена на выполнение три раза, то для этой программы создаётся три объекта ядра процесса и одна база данных модуля.