
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем Microsoft: семейства dos, Windows
- •Интерфейс прикладных программ (api). Apidos (программные прерывания) и Win32
- •Дисковая подсистема в архитектуре ibmpc
- •Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов.
- •Файловые системы на основе fat
- •X.2 Файловая система ntfs
- •Служебные структуры fat и их использование
- •Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) – dos, Windows Функции общего назначения
- •Файловый ввод-вывод
- •14. Адресное пространство процесса (задачи).
- •15. Приложения Windows (Win 32), разновидности. Структура оконных приложений
- •1. Основные определения
- •2. Особенности приложений Win 32.
- •3. Событийное управление
- •4. Структура приложения
- •16. Окно Win32: назначение, виды, свойства. Оконные классы.
- •17. Создание и управление окнами.
- •18. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windowsmessages): назначение, структура, отсылка, доставка, обработка Сообщения и очереди сообщений.
- •19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.
- •20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32
- •21. Состояния процессов (многозадачная среда). Состояния процессов (потоков)
- •22. Многозадачность в win32. Планирование и выполнения программ в win32
- •23. Процессы win32. Атрибуты и состояния процессов. Порождение процессов и управление ими. Основы управления процессами Win32
- •24. Потоки и многопоточные приложения. Порождение потоков, состояние потоков, управление ими. Основы управления потоками Win32
- •25. Нити – альтернативное управление выполнением программы Управление нитями
- •26. Распределение времени выполнения программ в многозадачной системе. Приоритеты. Распределение времени между потоками (управление приоритетами)
- •27. Приоритеты процессов и потоков win32. Управление приоритетами.
- •28. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •29. Реализация взаимного исключения. Механизм criticalsection.
- •30. Синхронизация при управлении процессами и потоками
- •31. Функция ожидания
- •32. Использование каналов и почтовых ящиков для обмена данными
- •33. Использование файловой системы для обмена данными
- •X.2.6. Использование сообщения wm_copydata
- •34. Графическая подсистема win32 – общая характеристика, основные принципы.
- •35. Основные объекты win32 gdi. Средства векторной и растровой графики
- •Растровая графика
- •36. Подсистема памяти. Основные задачи, функции, требования
- •37. Виртуальное адресное пространство, управление памятью.
- •38. Динамическое распределение памяти программами (heap). HeapApiWin32.
- •Функции работы с кучами (heap-область)
- •39. Подсистема памяти win32. Регионы(области) памяти. Группы функций api подсистемы памяти. Адресное пространство процесса.
- •40. Управление на уровне менеджера вирнуальной памяти. (vmm)
- •41. Отображение файлов в память Проецирование файлов в память
- •42. Системный реестр windows: назначение, организация, доступ
25. Нити – альтернативное управление выполнением программы Управление нитями
Как было отмечено, нить Win 32 сходна с потоком и также является динамическим объектом, претендующим на процессорное время. Нить стоит в иерархии ниже потока: поток может состоять из одной и более нитей. Для идентификации нити служит "указатель на нить" – указатель на внутреннюю структуру, которая эту нить описывает. С точки зрения ОС нить представлена потоком, который в данный момент ее выполняет, переключение таких потоков планировщиком осуществляется обычным порядком, нити внутри потока для него безразличны. В любой момент из всех нитей потока активной может быть лишь одна. Однако выбор активной нити среди прочих нитей потока производится самими нитями, вернее, активная в данный момент нить может передать управление любой другой, принадлежащей тому же потоку. Таким образом, вводится дополнительная возможность управления выполнением задачи, напоминающая невытесняющую (корпоративную) многозадачность и механизм "длинных переходов" (setjump() – longjump()), существовавший в классическом C.
Подобно потоку, нить порождается из функции с соответствующим форматом вызова. Нить-родитель создает новую нить с помощью функции CreateFiber(), но, в отличие от потока, новая нить всегда неактивна, активизировать ее можно только явно, поэтому выполнение нити-родителя не прерывается. Т.к. в передаче управления между нитями должны участвовать только нити, "первичная" нить создается путем преобразования потока с помощью функции ConvertThreadToFiber(), при этом выполнение текущего кода продолжается в естественном порядке, но уже "внутри" нити.
LPVOID ConvertThreadToFiber(LPVOID lpParam)
LPVOID CreateFiber(
DWORDdwStackSize, //размер стека для нити, 0 – стек по умолчанию
LPFIBER_START_ROUTINE lpStartAddr, //функция нити
LPVOIDlpParam //параметр функции нити
)
Обе функции возвращают "указатель на нить" типа LPVOID.
Типу функции нити FIBER_START_ROUTINE соответствует формат вызова:
VOID CALLBACK FiberRouting(LPVOID lpParam)
Управление нитями сводится к передаче управления между ними с помощью функции SwitchToFiber(), в результате чего выполнение текущей нити прерывается, и активизируется указанная нить. После возврата управления ранее прерванной нити ее выполнение продолжается сразу после точки прерывания.
VOIDSwitchToFiber(LPVOIDlpFiber)
Для получения указателя текущей нити служит функция:
PVOIDGetFiberData(VOID)
Нити могут быть использованы в основном как альтернатива нескольких синхронизируемых потоков, а также для имитации механизмов корпоративной многозадачности.
26. Распределение времени выполнения программ в многозадачной системе. Приоритеты. Распределение времени между потоками (управление приоритетами)
Помимо возможных состояний процесса (потока) и методов их переключения, функционирование системного планировщика описывается также и алгоритмом переключения состояний. Непосредственное влияние на него оказывают т.н. система приоритетов.
Процессорное время выделяется потокам в соответствии с их уровнем приоритета. Потоку с более низким приоритетом не выделяется время, если на него претендует поток с более высоким уровнем приоритета. Более того, процесс с более низким приоритетом прерывается до истечения кванта времени, если на процессор претендует поток с более высоким уровнем приоритета. Необходимо помнить, что в среде Windows основная “работа” потока состоит в ожидании события и реагировании на него. Это дает шанс на исполнения потокам с низким уровнем приоритета.
Уровни приоритетов варьируются в диапазоне от 0 (низший) до 31 (высший).
Действующий приоритет каждого потока образуют три составляющие:
– класс приоритета процесса (простаивающий, нормальный, высокий, реального времени);
– уровень приоритета потока внутри класса приоритета процесса (нижний, ниже нормального, нормальный, выше нормального, высший);
– динамический уровень приоритета.
Класс приоритета процесса и уровень приоритета потока внутри класса определяют базовый уровень приоритета потока.
Определены следующие классы приоритетов, которым соответствуют константы:
– Idle (простаивающий) – IDLE_PRIORITY_CLASS (4), процесс активизируется только при простое других процессов;
– Normal (нормальный) – NORMAL_PRIORITY_CLASS (7), большинство процессов в системе, в частности, все процессы пользователя; приоритет владеющего активным окном процесса повышается на 2 и составляет 9;
– High (высокий) – HIGH_PRIORITY_CLASS (13), системные процессы, реагирующие на соответствующие события;
– Real time (реального времени) – REALTIME_PRIORITY_CLASS (24), некоторые системные процессы в "особых случаях".
Внутри классов приоритетов процессов определены уровни приоритетов потоков:
– низший (THREAD_PRIORITY_LOWEST) – ‑2 отуровнякласса;
– пониженный (THREAD_PRIORITY_BELOW_NORMAL) – ‑1 отуровнякласса;
– нормальный (THREAD_PRIORITY_NORMAL) – равенуровнюкласса;
– повышенный (THREAD_PRIORITY_ABOVE_NORMAL) – +1 отуровнякласса;
– высший (THREAD_PRIORITY_HIGHEST) – +2 отуровнякласса;
– простаивающий (THREAD_PRIORITY_IDLE) – равен 16 для REALTIME_PRIORITY_CLASS и 1 дляостальныхклассов;
– реального времени (THREAD_PRIORITY_TIME_CRITICAL) – равен 31 для REALTIME_PRIORITY_CLASS и 15 для остальных классов.
Динамический уровень приоритета образуется повышением базового уровня потока на 2 единицы при поступлении сообщений в его очередь; по истечении некоторого времени восстанавливается исходное значение. Данное правило действует только для потоков с уровнем приоритета не выше 15.
Примечание. Очевидно, что и базовый, и динамический приоритет любого (даже простаивающего) потока процесса, отнесенного к классу Real-time, всегда будет выше, чем у любого потока любого другого процесса.
Так как в Win32 более приоритетные процессы и потоки жестко вытесняют с исполнения менее приоритетные, назначать приоритеты в своих программах следует с осторожностью, придерживаясь следующего правила: чем выше приоритет, тем за более короткое время задача должна либо завершаться, либо переходить в неактивное состояние; в противном случае, работа системы может быть практически остановлена.
Для управления приоритетами выполнения процессов и потоков служат следующие функции.
GetPriorityClass() – получение текущего класса приоритета для процесса.
SetPriorityClass() – установка класса приоритета для процесса.
GetThreadPriority() – получение текущего приоритета выполнения потока.
SetThreadPriority() – установка приоритета выполнения потока.