
- •Модель программного интерфейса ос windows. Понятие объекта ядра и описателя объекта ядра операционной системы Windows. Нотация программного интерфейса.
- •Понятие пользовательского режима и режима ядра операционной системы Windows. Модель виртуальной памяти процесса в пользовательском режиме и в режиме ядра операционной системы Windows.
- •Обзор архитектуры и основных модулей операционной системы Windows.
- •Системный реестр операционной системы Windows.
- •5. Основные элементы программ с оконным пользовательским интерфейсом. Минимальная программа для ос Windows с окном на экране. Создание и отображение окна.
- •Понятие оконного сообщения. Источники сообщений. Очередь сообщений. Цикл приема и обработки сообщений. Процедура обработки сообщений.
- •8. Вывод информации в окно. Механизм перерисовки окна.
- •9. Принципы построения графической подсистемы ос Windows. Понятие контекста устройства. Вывод графической информации на физическое устройство.
- •10. Рисование геометрических фигур. Графические инструменты. Управление цветом. Палитры цветов.
- •11. Растровые изображения. Вывод растровых изображений. Значки и курсоры. Вывод растровых изображений с эффектом прозрачного фона.
- •12. Вывод текста. Логические и физические шрифты.
- •13. Системы координат. Трансформации. Режимы масштабирования.
- •14. Понятие ресурсов программ. Виды ресурсов. Работа с ресурсами. Меню. Окна диалога.
- •15. Понятие динамически подключаемой библиотеки. Структура dll-библиотеки. Создание dll-библиотеки. Использование dll-библиотеки в программе. Статический и динамический импорт.
- •16. Отображение файлов в память.
- •17. Организация многозадачности в операционной системе Windows. Понятие процесса и потока. Контекст потока. Создание и завершение процессов и потоков.
- •18. Механизм приоритетов в операционной системе Windows. Класс приоритета процесса. Относительный приоритет потока. Базовый и динамический приоритеты потока.
- •19. Синхронизация потоков в пределах одного процесса. Критические секции. Спин-блокировки. Interlocked-функции.
- •20. Синхронизация потоков разных процессов. Объекты синхронизации: флаги, семафоры, события, ожидаемые таймеры, именованные и неименованные «трубы» (каналы).
- •21. Синхронизация потоков при создании общих данных с помощью двойных проверок (double-checked locking).
- •22. Синхронизация потоков с помощью мониторов Хоара.
- •24. Структуры данных общего назначения в режиме ядра. Представление строк стандарта Unicode. Представление двусвязных списков.
- •25. Понятие прерывания, исключения и системного вызова.
- •26. Аппаратные и программные прерывания. Таблица обработчиков прерываний. Понятие процедуры обработки прерываний (isr).
- •27. Программируемый контролер прерываний. Уровни прерываний. Механизм вызова прерываний. Функция KeBugCheckEx.
- •28. Исключения. Механизм обработки исключения.
- •29. Системные вызовы. Выполнение системного вызова.
- •30. Понятие отложенной процедуры (dpc). Назначение отложенных процедур.
- •31. Понятие асинхронной процедуры (apc). Назначение асинхронных процедур. Асинхронные процедуры режима ядра и пользовательского режима.
- •32. Понятие рабочего элемента ядра (Work Item). Назначение рабочих элементов.
- •33. Пулы памяти. Пул подкачиваемой памяти, пул неподкачиваемой памяти, пул сессии, особый пул. Тегирование пулов. Структура данных пула.
- •34. Оптимизация использования оперативной памяти с помощью списков предыстории (look-aside lists).
- •35. Блокирование страниц в памяти. Списки описателей памяти (mdl) и их использование
- •36. Представление объекта ядра в памяти. Менеджер объектов.
- •37. Структура драйвера операционной системы Windows. Точки входа в драйвер.
- •38. Объект, описывающий драйвер. Объект, описывающий устройство. Объект, описывающий файл. Взаимосвязь объектов.
- •39. Запрос ввода-вывода (irp). Схема выполнения ввода-вывода в стеке драйверов.
- •40. Структура api ядра ос Windows: Kernel api, Windowing api, Messaging api. Функции ZwXxx/NtXxx в пользовательском режиме и в режиме ядра.
- •42. Перехват функций ос Windows api в пользовательском режиме. Интерфейсный модуль ntdll.Dll.
- •43. Перехват вызова функций ос Windows в режиме ядра. Встроенная защита от перехвата в новейших версиях ос Windows.
22. Синхронизация потоков с помощью мониторов Хоара.
Монитор – это набор процедур и информационных структур, которыми процессы пользуются в режиме разделения, причем в фиксированный момент времени им может пользоваться только один процесс.
Отличительная особенность монитора в том, что в его распоряжении находится некоторая специальная информация, предназначенная для общего пользования, но доступ к ней можно получить только при обращении к этому монитору.
Монитор не является процессом, это пассивный объект, который приходит в активное состояние только тогда, когда какой-то объект обращается к нему за услугами. Часто монитор сравнивают с запертой комнатой, от которой имеется только один ключ. Услугами этой комнаты может воспользоваться только тот, у кого есть ключ. При этом процессу запрещается оставаться там сколь угодно долго. Другой процесс должен ждать до тех пор, пока первый не выйдет из нее и передаст ключ.
В качестве примера программы-монитора может выступать планировщик ресурсов. Действительно, каждому процессу когда-нибудь понадобятся ресурсы и он будет обращаться к планировщику. Но планировщик одновременно может обслуживать только один ресурс.
Иногда монитор задерживает обратившийся к нему процесс. Это происходит, например, в случае обращения за занятым ресурсом. Монитор блокирует процесс с помощью команды "ЖДАТЬ", а в случае освобождения ресурса выдает команду "СИГНАЛ". При этом освободившийся ресурс предоставляется одному из ожидавших его процессов вместе с разрешением на продолжение работы. Управление передается команде монитора, непосредственно следующей за операцией "ЖДАТЬ".
В ранних реализациях монитора (известных как семантика Хоара), оповещение условной переменной немедленно активизирует ждущий процесс и восстанавливает блокировку, тем самым гарантируется, что условие всё ещё истинно.
Мониторы более гибки, чем семафоры. В форме мониторов сравнительно легко можно реализовать различные синхронизирующие примитивы, в частности семафоры и почтовые ящики. Кроме того, мониторы позволяют нескольким процессам совместно использовать программу, представляющую собой критический участок.
24. Структуры данных общего назначения в режиме ядра. Представление строк стандарта Unicode. Представление двусвязных списков.
Каждый символ в Unicode состоит из двух байтов. С одной стороны, это позволяет преодолеть все сложности по искусственному представлению символов двумя байтами. С другой стороны, это позволяет расширить набор допустимых символов до 65 536 символов. Разница с 256 символами ANSI достаточно ощутима, не так ли?
Windows NT – это первая операционная система, полностью построенная на Unicode. Если функции передается ANSI-строка, она преобразуется в Unicode. Если программа пользователя ожидает результат в виде ANSI-строки, то перед возвращением строка Unicode преобразуется в ANSI.
Необходимо явно объявлять строку, как состоящую из символов _UNICODE. TCHAR* pszMyString = L"This is my string"; Буква L перед строкой указывает компилятору, что строка состоит из символов Unicode.
Структура LIST_ENTRY
FLink – forward, BLink – back.
При добавлении в список, каждый объект должен содержать в себе структуру LIST_ENTRY. FLink указывает не на начало объекта, а на начало структуры LIST_ENTRY. Благодаря этому все списки любых объектов выглядят одинаково.
Пустой список: BLink = FLink.