- •1) Определение операционной системы и ее функции. (виртуальная машина, управление ресурсами, задачи управления ресурсами)
- •1. Назначение и функции операционных систем
- •1.1.Основные понятия и определения
- •1.2.Управление ресурсами
- •3) Функциональные требования, предъявляемые к операционным системам и способы их реализации (расширяемость, переносимость, надежность, совместимость, безопасность, производительность).
- •5) Основные архитектуры операционных систем. (монолитные, многоуровневые, микроядерные, объектно-ориентированные, виртуальные машины)
- •Монолитные системы
- •Многоуровневые системы
- •Клиент – сервер (микроядро)
- •Объектно-ориентированный подход в проектировании ос.
- •Виртуальная машина (вм), Экзоядро
- •6) Абстракция процесса, управление процессами в многозадачной операционной системе. (определение процесса, диаграмма состояния, контекст, дескриптор, квантование, приоритетное планирование, нити)
- •7) Функциональные возможности многозадачности в ос Windows. (способы использования многозадачности, решаемые задачи)
- •8) Планировщик ос Windows. (класс и уровень приоритета, переключение контекста, «неготовые» потоки, динамический приоритет)
- •9) Эффект инверсии приоритетов. (пример, способы преодоления)
- •10) Мультипроцессорная обработка в ос Windows. (термины, вызовы api, назначение)
- •11) Эффект гонки. (пример, способ преодоления)
- •12) Средства синхронизации в режиме пользователя в ос Windows. (interlocked-функции, объект «критическая секция»)
- •13) Задача о критической секции. Алгоритм Петерсона для двух процессов. (условия задачи, объяснение принципа алгоритма)
- •14) Эффект отталкивания (голодания). (пример, модификатор volatile)
- •15) Эффект ложного разделения переменных (влияния кэш линий). (пример)
- •16) Управление объектами ядра в ос Windows. (описатель объекта, таблица описателей объектов процесса, создание, наследование, именование, дублирование)
- •17) Средства синхронизации в режиме ядра в ос Windows. (события, семафоры, мьютексы)
- •18) Эффект взаимоблокировки (возникновение тупика). (определение, условия возникновения, моделирование)
- •19) Стратегия «обнаружение-устранение» для борьбы с взаимоблокировками. (с использованием графов Холта, матриц распределения ресурсов)
- •20) Стратегия избегания блокировок. Алгоритм банкира. (диаграмма траекторий ресурсов, алгоритм банкира для одного вида ресурсов)
- •21) Стратегии предотвращения блокировок. (исключение условий в определении блокировок)
- •22) Методы управления памятью без использования внешней памяти. (фиксированные, динамические и перемещаемые разделы)
- •23) Методы управления памятью с использованием внешней памяти. (сегментный, страничный, сегментно-страничный способ)
- •24) Свопинг. Кэширование. (назначение, принцип работы механизма)
- •25) *Реализация сегментного механизма управления памятью в процессорах семейства x86.
- •26) *Реализация страничного механизма управления памятью в процессорах семейства x86. (размер и основные поля структур данных, особенности реализации)
- •27) *Средства ос Windows для управления виртуальной памятью процесса. (VirtualAlloc, структурированная обработка исключений, файлы, отображаемые в память)
7) Функциональные возможности многозадачности в ос Windows. (способы использования многозадачности, решаемые задачи)
Многозадачность в Windows.
MSDN: Platform SDK documentation/base services/dll processes and threads
В Windows имеется 2 способа использования многозадачности: многозадачность на уровне процессов и на уровне потоков.
Если требуется изоляция адресного пространства и ресурсов, используется многозадачность на уровне процессов.
Пример: системные службы Windows – автономные процессы. Крах системной службы не приводит к краху других процессов.
Процесс может использовать несколько нитей для выполнения следующих задач:
управление вводом из нескольких окон (IE, который для каждой папки создаёт отдельный поток);
управление вводом из нескольких коммуникационных устройств (например, сервер, обслуживающий подключенных клиентов отдельными потоками);
различение задач различного приоритета (например, выполнение критичных по времени задач высокоприоритетным потоком);
сохранение интерактивности приложения при выполнении фоновой задачи.
Реализация многозадачности с использованием одного процесса и нескольких потоков предпочтительна по следующим соображениям:
более быстрое переключение контекста между нитями одного процесса;
нити одного процесса разделяют глобальные переменные;
нити одного процесса разделяют описатели системных ресурсов HANDLE (в Windows).
Win32API обеспечивает альтернативные нитям методы многозадачности:
асинхронный ввод/вывод;
порты завершения ввода/вывода (I/O Completion Port);
асинхронный вызовы процедур (APC);
возможность ожидать множества коммуникационных событий с использованием WaitForMultipeObjects().
Данные способы более быстрые, чем использование нескольких нитей, каждой ожидающей своего события с WaitForSingleObject().
Рекомендации по многозадачности: использовать как можно меньше потоков для одного приложения, т.к. требуются ресурсы для хранения контекста потока, для отслеживания нескольких активных потоков и, обычно, более сложная синхронизация.
8) Планировщик ос Windows. (класс и уровень приоритета, переключение контекста, «неготовые» потоки, динамический приоритет)
В документации MSDN не описывается конкретный алгоритм планирования, он может изменяться в разных версиях ОС. Основными средствами, влияющими на алгоритм планирования в API, является класс и уровень приоритета (Class и Level).
Класс указывается при создании процесса (используется функция CreateProcess()). Существует 6 классов приоритета:
IDLE_PRIORITY_CLASS – самый низкий уровень приоритета, его имеют хранители экрана, средства сбора диагностики.
BELOW_NORMAL_ PRIORITY_CLASS
NORMAL_ PRIORITY_CLASS – приоритет по умолчанию.
ABOVE_NORMAL_ PRIORITY_CLASS – приоритет по умолчанию.
HIGH_PRIORITY_CLASS – приоритет, непосредственно работающий с оборудованием.
REALTIME_PRIORITY_CLASS – более приоритетен, чем многие системные потоки, работает с диском, клавиатурой и мышью.
Класс приоритета определяется и задается с помощью функций GetPriorityClass() и SetPriorityClass().
Типичному процессу нужно гарантировать непрерывное выполнение некоторой операции, для этого кратковременно приоритет повышается, затем понижается.
Внутри процесса устанавливаются относительные приоритеты для нитей (уровни приоритета, levels):
THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE _NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL
Уровень приоритета нити определяется и задается с помощью функций GetThreadPriority() и SetThreadPriority().
Всем нитям по умолчанию назначается нормальный уровень приоритета.
Если возникает необходимость задать уровень приоритета при создании нити, то последовательность действий:
CreateThread(CREATE_SUSPE NDED)
SetThreadPriority(…)
ResumeThread(…)
Диспетчер системы планирует нити и ничего не знает о процессах, поэтому класс приоритета и уровень комбинируется в базовый приоритет. Windows использует 32 базовых приоритета (от 0 до 31).
Переключение контекста.
Windows использует следующую последовательность шагов:
сохранить контекст только что завершившегося потока;
поместить этот поток в очередь соответствующего приоритета;
найти очередь наибольшего приоритета, содержащую готовые потоки;
удалить дескриптор потока из головы этой очереди, загрузить контекст, приступить к исполнению.
Структуры данных планировщика:
Потоки, не являющиеся готовыми:
потоки, созданные флагом SUSPENDED;
остановленные командой SuspendThread();
ожидающие события синхронизации (WaitFor…Object) или ввод/вывод.
Причины вытеснения текущего потока:
истёк квант времени;
появился более приоритетный готовый поток;
ожидание события или ввод/вывод.
Динамический приоритет используется для продвижения потоков при наличии более приоритетных.
Windows кратковременно повышает приоритеты простаивающих готовых потоков.(Priority Boost) в случае, когда:
процесс, содержащий поток, переходит на передний план.
окно процесса получает событие от мыши и клавиатуры
наступило событие, которое ожидал поток или завершился ввод/вывод.
Также Windows может увеличить квант времени потока.
В любом случае динамический приоритет не может быть меньше базового приоритета. По истечению каждого кванта динамический приоритет уменьшается на 1 до тех пор, пока не достигнет базового приоритета.
Priority Boost получают потоки с базовым приоритетом, не превышающим 15.