- •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
- •Организация циклических программ на ассемблере. Пример программы.
Распределение времени между потоками. Классы приоритета. Уровни приоритета. Относительный уровень приоритета потока. Функции для работы с приоритетами потоков.
Планирование потоков. 2)Синхронизация потоков.
В Windows реализована подсистема вытесняющего планирования на основе уровней приоритета. Всегда выполняется поток с наивысшим приоритетом к выполнению. Выбор потока для выполнения может быть ограничен набором процессоров. Это называется привязкой к процессору (processor affinity).
Выбранный для выполнения поток работает в течение некоторого периода называемого квантом. После того, как истёк квант времени ОС будет искать другой поток с таким же уровнем приоритета или выше. Если таких нет, то ищет с меньшим приоритетом. В Windows 2000 потокам могут выделяться разные кванты времени. Поток также может не полностью использовать свой квант.
Как только другой поток с более высоким приор-ом готов к вып-нию, текущий поток вытесняется даже если его квант не истёк.
Код Windows, отвечающий за планирование реализован в ядре ОС. Этот код рассредоточен по ядру, поэтому нет единого модуля или процедуры с названием планировщик. Совокупность процедур, выполняющих планирование - диспетчер ядра.
Диспетчер ядра инициализируется следующими событиями.
Поток готов к выполнению, например, он только что создан или вышел из состояния ожидания.
Поток прекращает выполнение, когда его квант истёк или поток завершается, или поток переходит в состояние ожидания.
Приоритет потока изменяется, например, в результате вызова системного сервиса.
Изменяется привязка к процессорам выполняемого потока.
В любом из этих четырёх случаев Windows должна определить, какой поток должен выполняться следующим.
Выбрав новый поток Windows включает CONTEXT, текущее содержание регистров процессора переписывается в структуру CONTEXT, которая находится в TDB (ETHREAD).
Планирование в Windows осуществляется на уровне потоков, то есть не важно какому процессу принадлежит поток.
Пример. Если у процесса А – 12 потоков, а у В – 2 потока, и все 14 потоков имеют один и тот же приоритет, то каждый поток получит 1/14 времени процессора. Windows не будет делить поровну время процессора между двумя процессами.
Уровни приоритета.
В Windows поддерживается 32 уровня приоритета от 0 до 31. Все приоритеты делятся на четыре класса. Класс приоритета присваивается процессу с помощью одного из флагов функции CreateProcess. Рассмотрим связь уровней приоритета с классами.
-
Класс
Описание
Флаг
Уровень приоритета
Idle
приостановлен
IDLE_PRIORITY_CLASS
4
Normal
нормальный
NORMAL_PRIORITY_CLASS
7-9
High
высокий
HIGH_PRIORITY_CLASS
13
RealTime
реального времени
REALTIME_PRIORITY_CLASS
24
Если при вызове процесса класс Normal, то система присваивает процессу класс Normal, если только родительский процесс не имел класс Idle.
Idle. Используется для системного потока, который обнуляет неиспользованные страницы памяти. Этот класс может использовать, например, ScreenSaver. Большую часть времени этот поток отсле-живает деятельность пользователя. Если он не использует компьютер, то хранитель экрана активи-зируется.
Normal. В основном все процессы работают с этим классом проиритета. Windows 95, 98 сама по-вышает уровень приоритета активного процесса.
High. Cледует использовать в случае крайней необходимости, напр., в Windows приоритет High имеет менеджер задач. Такой приоритет устанавливается, чтобы прервать любой поль-зовательский процесс, даже если он вышел в непрерывный цикл.
RealTime. Практически никогда не используется. В ранних версиях Windows этот класс отсут-ствовал. Его не стоит использовать, так как системные потоки, использующие клавиатуру и мышь имеют меньший приоритет. Его следует использовать в нескольких случаях.
в приложении напрямую общаться с оборудованием, например в драйверах устройств.
если приложение выполняет быстротечную операцию, которую нельзя прервать.
В базе данных каждого процесса хранится относительный приоритет потока. Когда поток только создаётся, то начальный уровень приоритета равен его классу.Например, если поток принадлежит процессу с классом HIGH, то при создании этого потока его уровень приоритета будет 13. Приоритет потока можно изменить с помощью функции SetThreadPriority(…). Изменение всегда производится относительно класса приоритета процесса, то есть относительно базового приоритета. В качестве параметров указывается дескриптор потока и относительный уровень приоритета.
Thread_Priority_Lowest – приоритет потока на 2 единицы меньше класса приоритета процесса. То есть, если у нас RealTime c приоритетом 24, то применив эту функцию приоритет станет 22.
Thread_Priority_Below_Normal – приоритет потока на 1 единицу меньше класса приоритета процесса.
Thread_Priority_Normal – приоритет потока становится равен приоритету процесса.
Thread_Priority_Above_Normal – приоритет потока становится на 1 единицу больше приоритета процесса.
Thread_Priority_Highest – приоритет потока становится на 2 единицы больше приоритета процесса.
Thread_Priority_Idle – в этом случае для процессов относящихся к классам Idle, Normal, High приоритет потока становится равным 1. Для процесса RealTime приоритет потока становится раным 16.
Thread_Priority_Time_Critical – для процессов Idle, Normal, High уровень приоритета равен 16, для RealTime – 31.
Относительный уровень приоритета потока хранится в базе данных потока. Функции не обладают кумулятивным действием, то есть, если функцию SetPriority(hThread, и несколько раз написать Thread_Priority_Lowest), то уровень приоритета потока уменьшится только на 2 единицы относительно базового.
