Кучи. Кучи в Windows nt (2000).
Куча – 3-й и последний элемент управления памятью в Win32. Используется для создания небольших блоков данных, например связанных с очередями, списками, деревьями.
В DOS и Win16 кучи играли основную роль, в Win32 – вспомогательную.
Особенности куч Win32:
максимальный размер кучи не ограничен, т.е. теоретически = макс. адресное пространство процесса (2 ГБ)
кучи могут расти за пределы изначально выделенного им пространства. В этом случае выделяется блок АП и связывается с кучей, образуя подкучу
поддерживается несколько куч в рамках данного процесса
каждая куча поддерживает 4 отдельных списка свободных блоков, чтобы избежать чрезмерной фрагментации
все кучи – локальные, т.е. каждая куча принадлежит определенному процессу
п ри создании процесса обязательно создается одна куча – куча, предоставляемая процессу по умолчанию. Она уничтожается только при закрытии процесса.
Структура куч Win32:
Доп. кучи создаются с помощью HeapCreate. Используются для защиты компонентов, для более эффективного управления памятью, для локализации доступа.
Каждый блок имеет свой заголовок – арену. Заголовок кучи имеет следующую структуру. Заголовок состоит из полей.
общий размер памяти, зарезервированной для кучи.
указатель на следующую кучу, если она есть.
указатель на начало списка дополнительных подкуч данной кучи.
списки свободных блоков.
Для снижения фрагментации памяти и ускорения поиска свободных блоков заголовок каждой кучи содержит 4 списка свободных блоков:
1-ый список состоит из блоков, размер которых меньше 20h байт.
2-ой список - меньше 80h байт.
3-ий список - меньше 200h байт.
4-ый список - меньше FFFFFFFFh байт.
Функции работы с кучей.
GetProcessHeap(…) – получить дескриптор кучи, предоставляемый процессу по умолчанию. Эта функция находит PDB и извлекает из базы данных дескриптор кучи.
HeapCreate(…) – создание кучи. Вызывают не только приложения пользователя, но и kernel32.dll и user32.dll вызывает для создания системных структур данных, например PDB или базы данных потока (TDB).
Процесс создания кучи проходит в 2 этапа: резервирование памяти для кучи и связывание кучи в списке куч процесса, инициализация всех полей заголовка кучи.
Удаление кучи.
HeapDestroy(…). Проблема состоит в том, что
куча должна быть свободной, то есть CriticalSection=0.
куча может иметь подкучи.
Необходимо удалить весь список связанных подкуч. то есть HeapDestroy(…) должна выполнять действия по корректировке списка.
Выделение блока памяти в определённой куче.
HeapAlloc(…). Этот процесс состоит из следующих этапов.
проверки параметров функции HeapAlloc(…).
захват CriticalSection заголовка кучи.
выравнивание размера запрошенного блока к ближайшему числу кратному 4 и добавление размера арены.
нахождение первого свободного блока в списке. Если блок найден, то функция проверяет насколько этот блок велик. Если можно поделить на 2, то создаются 2 блока, настраиваются их арены. Первый блок занят функцией HeapAlloc(…), другой поступает в список свободных блоков.
освобождение критической секции. Указатель кучи устанавливается на первый байт следующего за ареной блока. Если функция не найдёт в списке подходящего свободного блока, то kernel32 создаёт подкучу, вставляет в список подкуч, а затем функция HeapAlloc(…) возвращается к поиску свободных блоков.
Освобождение блока кучи.
HeapFree(…).
проверка параметров.
захват CriticalSection.
если перед освобождаемым блоком уже есть свободный блок, то сливаются в один.
фактическое освобождение блока, возврат его в кучу.
освобождение CriticalSection.
Куча, предоставляемая процессу по умолчанию.
Данную кучу нельзя уничтожить (создается при создании процесса, уничтожается при завершении процесса). Данную кучу помимо пользователя используют функции Win32.
- Средства аппаратной поддержки управления памятью в микропроцессорах Intel.
- 0000 Смещение
- Стек потока под управлением Windows nt (2000).
- Кучи. Кучи в Windows nt (2000).
- 5. Файлы, проецируемые в память.
- 6.Объекты ядра. Процессы, потоки и модули в Win32.
- Структура modref.
- Основные функции для работы с потоками.
- 7. Распределение времени между потоками. Классы приоритета. Уровни приоритета. Относительный уровень приоритета потока.
- Классы и уровни приоритета.
- Функции Win32 связанные с планированием.
- 8. Учет квантов времени в Windows. Управление величиной кванта. Сценарии планирования процессорного времени.
- Сценарий планирования.
- Поток простоя.
- 9. Динамическое повышение приоритета потока.
- 10 Синхронизация потоков.
- 11. Динамически подключаемые библиотеки (dll). Явная и неявная загрузка dll.
- 12. Обработка сообщения в ос Window.
- 13. Системная очередь аппаратного ввода сообщений.
- 14. Работа с окнами в ос Windows. Классы окон. Z-порядок окон. Описание окон в ос Windows.
- 15. Существующие форматы исполняемых файлов. Формат pe-файла.
- Особенности ре формата:
- Заголовок ре файла.
- Основные секции исполняемого файла.
- Прикладная программа
- 16. Методы отслеживания изменений файловой системы
- 17. Файловая система fat. Структура системной области и области данных в fat.
- Загрузочный сектор.
- 18. Файловая система ntfs. Структура главной файловой таблицы (mft). Атрибуты файла ntfs. Резидентные и нерезидентные атрибуты.
- Особенности ntfs.
- Структура ntfs на диске.
- Атрибуты файла.
- 19. Структура больших файлов и каталогов в ntfs. Индексация файлов в ntfs.
- 20. Восстанавливаемость ntfs. Протоколирование транзакций. Журнал транзакций. Восстановление данных в ntfs.
- Журнал транзакций.
- Восстановление данных в ntfs.