
- •1Определение операционной системы (ос). Назначение и основные функции ос.
- •Эволюция ос.
- •Классификация операционных систем.
- •Структура ос Windows. Краткий обзор архитектуры Windows.
- •Основные системные файлы Windows 95, nt, 2000.
- •Виртуальная память. Страничная организация памяти.
- •Страничная или сегментно-страничная организация памяти.
- •Алгоритмы замещения страниц виртуальной памяти. Алгоритмы замещения страниц
- •7.1.1 Алгоритм nru (Not Recently Used - не использовавшаяся в последнее время страница)
- •Адресное пространство процесса Win32 в Windows nt(2000). Регионы в адресном пространстве. Передача физической памяти региону. Гранулярность выделения ресурсов.
- •Раздел 4. В него загружаются ядро Windows nt и драйверы устройств. Этот раздел защищен и по чтению, и по записи. Регионы в адресном пространстве.
- •Передача физической памяти региону.
- •Механизм выделения страниц физической памяти.
- •Выделение физической памяти под программный код.
- •Атрибуты защиты страниц памяти в Win32. Изменение атрибутов защиты. Атрибуты защиты страниц.
- •Стек потока под управлением Windows nt (2000).
- •Стек потока под Windows 95, 98.
- •Функции компилятора для контроля стека.
- •Кучи в Windows nt (2000). Структура кучи в Win32. Функции управления кучей Win32. Кучи (Heaps).
- •Особенности кучи в Windows 95, Windows nt.
- •Структура арены.
- •Функции управления кучей Win32.
- •Удаление кучи.
- •Выделение блока памяти в определённой куче.
- •Куча, предоставляемая процессу по умолчанию, и дополнительные кучи. Назначение дополнительных куч Win32.
- •Дополнительные кучи Win32 процесса.
- •Создание дополнительных куч для эффективного управления памятью.
- •Локальный доступ. Создание дополнительных куч для локализации доступа.
- •Файлы, проецируемые в память. Файлы проецируемые в память (фпвп).
- •Проецирование в память exe и dll файлов.
- •Совместное использование статических данных несколькими экземплярами exe и dll модулей.
- •Иерархия функций работы с памятью.
- •Объекты ядра. Процессы, потоки и модули в Win32. Объекты kernel32.Dll.
- •Структура imte.
- •Структура modref.
- •Процессы Win32. Идентификатор процесса и дескриптор процесса. Объект ядра процесс в Win32. Функции для работы с процессами Таблица дескрипторов процесса.
- •Потоки. Состояния потоков. Свойства потоков. Объект ядра поток. Функции для работы с потоками.
- •Основные функции для работы с потоками.
- •Структура оя «поток».
- •Распределение времени между потоками. Классы приоритета. Уровни приоритета. Относительный уровень приоритета потока. Функции для работы с приоритетами потоков.
- •Уровни приоритета.
- •Функции Win32 связанные с планированием.
- •Учет квантов времени в Windows. Управление величиной кванта. Учёт квантов времени.
- •Сценарии планирования процессорного времени. Сценарий планирования.
- •Поток простоя.
- •Динамическое повышение приоритета. Динамическое повышение приоритета потока.
- •Синхронизация процессов и потоков. Объекты синхронизации. Синхронизация потоков без использования объектов синхронизации Синхронизация.
- •Синхронизация потоков без использования объектов синхронизации.
- •Синхронизация потоков.
- •Критические секции (кс). Критические секции.
- •Работа потока с несколькими критическими секциями.
- •Синхронизация потоков с объектами ядра. Ожидание завершения потока или процесса. Ожидание завершения нескольких потоков или процессов. Синхронизация объектов.
- •События со сбросом вручную.
- •События с автоматическим сбросом.
- •Объекты Мutex.
- •Синхронизация потоков с помощью семафоров.
- •Синхронизация потоков с помощью событий. События со сбросом вручную и с автоматическим сбросом.
- •События со сбросом вручную.
- •События с автоматическим сбросом.
- •Динамически подключаемые библиотеки (dll). Явная и неявная загрузка dll.
- •Обработка сообщения в ос Window. Структура threadinfo.
- •Посылка асинхронных сообщений в очередь потока
- •Системная очередь аппаратного ввода сообщений.
- •Работа с окнами в ос Windows. Классы окон. Z-порядок окон. Описание окон в ос Windows. Структуры управления окнами.
- •Существующие форматы исполняемых файлов. Формат pe-файла. Заголовок pe-файла. Основные секции pe-файла. Формат pe-файла.
- •Особенности ре-формата.
- •Заголовок ре-файла.
- •Основные секции исполняемого pe-файла.
- •Секция программного кода, импорт и экспорт в pe-файлах. Ресурсы pe-файла. Базовые поправки pe-файла. Импорт в pe-файлах.
- •Экспорт в pe-файлах
- •Ресурсы ре-файла.
- •Базовые поправки ре-файла.
- •Методы отслеживания изменений файловой системы.
- •Файловая система fat. Структура системной области и области данных в fat.
- •Назначение ntfs. Основные особенности и возможности ntfs. Структура файловой системы ntfs. Понятие тома и файла в ntfs.
- •Особенности ntfs.
- •Возможности ntfs.
- •Структура файловой системы ntfs.
- •Тома в ntfs.
- •Кластеры в ntfs.
- •Основные файлы ntfs, назначение основных файлов ntfs. Главная таблица файлов.
- •Назначение основных файлов ntfs.
- •Генерация имен файлов ms dos в ntfs.
- •Структура главной файловой таблицы (mft). Атрибуты файла ntfs. Заголовок атрибута, значение атрибута. Резидентные и нерезидентные атрибуты. Структура главной файловой таблицы (mft).
- •Структура файловых ссылок.
- •Атрибуты файла ntfs
- •Резидентные атрибуты.
- •Нерезидентные атрибуты.
- •Записи главной файловой таблицы ntfs (mft) для резидентных атрибутов и для нерезидентных атрибутов. Виртуальные и логические номера кластеров.
- •Структура больших файлов и каталогов в ntfs. Индексация файлов в ntfs. Структура каталогов в ntfs
- •Структура больших файлов в ntfs
- •Индексация файлов в ntfs.
- •Битовая карта.
- •Восстанавливаемость ntfs. Протоколирование транзакций. Журнал транзакций. Восстанавливаемость ntfs.
- •Протоколирование транзакций.
- •Журнал транзакций.
- •Записи модификации, записи контрольной точки, таблица транзакций, таблица измененных страниц в журнале транзакций. Записи модификации.
- •Записи контрольной точки.
- •Восстановление данных в ntfs. Проход анализа. Проход повтора. Проход отмены. Восстановление данных в ntfs.
- •Проход анализа.
- •Проход повтора.
- •Проход отмены.
- •Замена плохих секторов в ntfs. Файл плохих кластеров. Переназначение плохих кластеров.
- •Переназначение плохих кластеров.
- •Компрессия данных в фс ntfs.
- •Сжатие разрежённых файлов.
- •Сжатие обычных файлов.
- •Система шифрования данных (efs) в файловой системе ntfs .
- •Загрузка ос Windows 2000.
- •Предварительная загрузка.
- •Загрузка.
- •Загрузка ядра.
- •Инициализация ядра
- •Регистрация
- •Процесс разработки программы на ассемблере.
- •Трансляция программы
- •Компоновка программы
- •Основные регистры процессора Pentium.
- •Ассемблерные команды пересылки данных. Пример программы.
- •Работа с адресами и указателями на ассемблере. Пример программы.
- •Ассемблерные команды для работы со стеком. Пример программы.
- •Ассемблерные команды сложения и вычитания. Пример программы.
- •Ассемблерные команды умножения, деления и изменения знака. Пример программы.
- •Использование в Delphi встроенного ассемблера. Пример программы.
- •Ассемблерные команды линейного и циклического сдвига. Пример программы.
- •Ассемблерные команды условного и безусловного перехода. Состояние флагов. Пример программы.
- •Перечень команд условного перехода для команды cmp
- •Организация циклических программ на ассемблере. Пример программы.
Кучи в Windows nt (2000). Структура кучи в Win32. Функции управления кучей Win32. Кучи (Heaps).
Мы рассматривали функции для работы с виртуальной памятью. Для работы с небольшими областями памяти используются кучи. В DOS кучей являлась вся свободная память.
Каждая программа имеет следующую структуру.
главная куча стек локальная
куча переменные код
ехе файла
свободная
память
куча
данные
При работе с кучей используются следующие функции.
HeapCreate(…) – создание кучи. HeapDestroy(…) – уничтожение кучи. HeapAlloc(…) – выделение блока в куче.
HeapFree(…) – освобождение блока в куче. GetProcessHeap(…) – определение идентификатора кучи, предоставляемой процессу по умолчанию.
Особенности кучи в Windows 95, Windows nt.
В Windows максимальный размер кучи может быть практически равен размеру свободного адресного пространства. По умолчанию выделяется 1 Мб и передаются 2 страницы физической памяти.
В Windows поддерживается несколько куч.
Кучи Win32 могут расти за пределы первоначально отведенного для них размера. В этом случае kernel32 выделяет дополнительный блок линейного адресного пространства и связывает с ним кучу, то есть образует подкучу.
Каждая куча Win32 поддерживает 4 отдельных списка свободных блоков, чтобы избежать чрезмерной фрагментации.
При создании любого процесса ОС автоматически создаёт кучу, которая называется куча, предоставляемая процессу по умолчанию. Куча нужна самой ОС для выполнения функций Win32.
Пример. UNICODE2-х байтная ANSI привычная.
Windows NT, 2000 работают только с UNICODE, поэтому когда вызывается ANSI вариант, то для выполнения этой функции необходимо организовать буфер для перевода ANSI в UNICODE.
GetProcessHeap
куча
1
HeapCreate
куча
2
HeapCreate
куча
3
Process Data Base
подкучи
подкучи
У нас куча 1 создана по умолчанию, а 2 и 3 – это дополнительные кучи, создаваемые процессом. PDB – эта таблица содержит указатели на кучи. ToolHelp – специальный набор функций.
Структура кучи. Список(Заголовок и арена) кучи Win32.
… 2
блок 2
арена 1
блок 1
арена … критическая
секция массив
из 4-х заголовков размер
заголовок кучи
Каждый блок имеет свой заголовок – арену. Заголовок кучи имеет следующую структуру. Заголовок состоит из полей.
общий размер памяти, зарезервированной для кучи.
указатель на следующую кучу, если она есть.
указатель на начало списка дополнительных подкуч данной кучи.
списки свободных блоков.
Для снижения фрагментации памяти и ускорения поиска свободных блоков заголовок каждой кучи содержит 4 списка свободных блоков:
1-ый список состоит из блоков, размер которых меньше 20h байт.
2-ой список состоит из блоков, размер которых меньше 80h байт.
3-ий список состоит из блоков, размер которых меньше 200h байт.
4-ый список состоит из блоков, размер которых меньше FFFFFFFFh байт.
Kernel32 ищет свободный блок в наиболее подходящем блоке.
список свободных блоков
куча
заголовок
////////////////////////////
Каждая структура списка свободных блоков имеет следующий формат.
максимальный размер блока (это число 20h, 80h, 200h и FFFFFFFFh).
структура, представляющая собой арену, то есть заголовок.
Длина блока в арене 0, а указатель типа next указывает на первый свободный блок данного размера в куче, то есть указывает на первый свободный блок.
В заголовке кучи кроме того находится указатель на следующую кучу, созданную функцией HeapCreate(…). Если следующей кучи нет, то 0. В заголовке кучи имеется поле флагов.
В заголовке содержится критическая секция CriticalSection. Это структура, которая организует последовательный доступ к куче различных потоков процесса.
Несколько потоков обращаются к куче для того, чтобы выделить блок памяти в куче. Процесс выделения памяти в куче состоит из следующих этапов.
Поиск свободного блока.
Выделение физической памяти для этого блока.
Запись информации в выделенный блок.
Первый поток выполнил два этапа, его квант времени истёк. Начинается выполнение программного кода второго потока. Второй поток выполняет три этапа и находит тот же блок. Когда управление вернётся к первому потоку, то он запишет информацию в тот же блок, то есть информация второго потока будет испорчена.
Чтобы этого избежать существует критическая секция. Это признак. Как только какой-либо поток начинает работу с кучей устанавливается признак в CriticalSection.
Недостатком кучи является снижение производительности из-за последовательного доступа.
Heap_No_Serialsize – куча допускает одновременный доступ к куче со стороны нескольких потоков. Его рекомендуется не использовать, а если использовать, то только в том случае, если процесс имеет один поток.
В заголовке кучи обычно указывается сигнатура “HI” – признак того, что это заголовок кучи. Рассмотрим структуру отдельных блоков кучи. Каждый блок начинается с заголовка, то есть с арены.