
- •Введение
- •Эволюция ос.
- •Классификация ос.
- •Краткий обзор архитектуры 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.
- •Словарь терминов.
Планирование потоков в системах с симметричной мультипроцессорной системой (smp).
Симметричная – код ОС находится на разных процессорах.
Асимметричная – код ОС находится на одном процессоре.
Чтобы рассмотреть планирование потоков рассмотрим 2 основных термина.
Привязка к процессору. По умолчанию выполняется на любом процессоре. Маска привязки устанавливается с помощью функций
SetProcessAffinityMask(…)
SetThreadAffinityMask(…)
а также при наличии образа маски в заголовке файла.
Идеальный процессор. Это процессор предпочтительный для выполнения данного потока. Идеальный процессор выбирается случайным образом при создании потока на основе значения, записанного в базе данных процесса. Значение из базы данных процесса увеличивается на единицу каждый раз, когда создаётся новый поток. Поэтому создаваемые потоки равномерно распреде-ляются по набору доступных процессоров. Windows не меняет идеальный процессор после создания потока, но изменить идеальный процессор может изменить приложение, вызвав функцию SetThreadIdealProcessor(…). Последний процессор – это процессор, на котором поток работал в прошлый раз.
Выбор процессора для потока, готового к выполнению.
Windows пытается подключить поток к простаивающему процессору. Если простаивающих процессоров несколько, то Windows старается подключить поток к идеальному процессору, а если он занят, то к последнему.
Если эти процессоры заняты, то Windows NT, 2000 выбирает первый из простаивающих, используя для этого маску свободных процессоров в порядке их возрастания. Все эти действия Windows выполняет в соответствии с маской привязки к процессорам.
Все процессоры заняты.
Windows просматривает, нельзя ли вытеснить какой-либо поток на одном из процессоров. Сначала рассматривается идеальный процессор, затем последний.
Windows сравнивает приоритеты выполняемого потока и выполняющегося потока, и если приоритет выше, то происходит вытеснение.
Если вытеснение невозможно, то поток помещается в очередь потоков, готовых к выполнению.
Рассмотрим ситуацию, в каком случае готовые потоки с наивысшим приоритетом выполняются. Пусть к процессору 0 подключен поток с приоритетом 8, который может работать на любом процессоре. К процессору 1 поток с приоритетом 4. Готов поток с приоритетом 6, который может выполняться только на процессоре 0. В этом случае поток с приоритетом 6 будет поставлен в очередь к процессору 0.
Синхронизация.
Впервые появилась в W32. Синхронизация – это средство, позволяющее реализовать вытесняющую многозадачность, то есть реализовать переключение программ в любой момент времени. Синхронизация может выполняться в пользовательском режиме: критические секции и функции Interlocked.
В режиме ядра для синхронизации используются следующие объекты: события, семафоры, мьютексы.
В Windows 2000 появился новый объект – ожидающий таймер.
Cинхронизация может выполняться с помощью таких объектов ядра, как процессы, потоки, задания, файлы. Оповещение об изменениях файловой системы, CON ввод/вывод. Синхронизация используется для единоличного доступа к ресурсам и для оповещения о каких-либо событиях, например, когда необходима синхронизация – это работа с базой данных. В тот момент когда происходит запись, то другие операции должны быть заблокированы.
Пример, для оповещения событий. Процесс состоит из двух потоков.
Поток 1 считывает данные с файда, поток 2 выводит на экран. Естественно поток 2 ожидает выполнение потока 1.