
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем 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: назначение, организация, доступ
31. Функция ожидания
Для более сложных методов синхронизации, в том числе между потоками различных процессов, используются т.н. функции ожидания: WaitForSingleObject, WaitForSingleObjectEx, SignalObjectAndWait, WaitForMultipleObjects, WaitForMultipleObjectsEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx. Их действие основано на использовании глобальных (контролируемых ядром системы) объектах, состояния которых могут интерпретироваться как “signaled” (приблизительно можно переводить как "установлено", "открыто", фактически означает "свободность", т.е. "не-занятость" объекта) и “non-signaled” (означает "занятость"). Вызов функции ожидания применительно к объекту в состоянии “signaled” дает немедленное успешное завершение, причем состояние объекта может быть изменено в зависимости от его типа, а в состоянии “non-signaled” – перевод вызвавшего процесса в состояние ожидания (блокировки) до "освобождения" объекта. Практически любые объекты ядра (процессы, файлы, транспортеры и т.д.) могут выступать в роли синхронизирующих, однако существует набор объектов, специально предназначенных для синхронизации потоков – т.н. InterprocessSynchronizationObjects (ISO). Отметим, что файловые объекты, выступая в качестве синхронизирующих, выполняют важную функцию – обеспечиваю работу асинхронного ввода-вывода (см. соответствующий раздел).
Все объекты ISO идентифицируются их именами, причем из единого пространства имен, не пересекающегося с именами объектов файловой системы. Для доступа к ним служат описатели (тип HANDLE). Создание объекта выполняется вызовом Create... (можно выполнять его несколько раз, получая доступ к одному и тому же объекту), доступ к существующему – Open..., описатель объекта можно дублировать и наследовать, он удаляется явно функцией CloseHandle, либо автоматически – при завершении процесса-владельца. Объект существует, пока действителен хотя бы один его описатель.
Объекты Event ("Событие")
События – самая примитивная разновидность синхронизирующих объектов. Они порождаются функцией CreateEvetnt и бывают двух типов с “ручным” (manual) и с “автоматическим” сбросом. Объект "событие" может находиться в двух состояниях: “занят” (non-signaled) и “свободен” (signaled). Для перевода объекта событие в свободное состояние используется функция SetEvent, а для перевода в занятое – ResetEvent. С помощью любой из функций ожидания можно перевести вызвавший поток в состояние блокировки до освобождения объекта событие. Если объект событие является объектом “с автоматическим сбросом”, то функция ожидания автоматически переведет его в состояние занятого.
Объекты "событие" активно используются при асинхронном файловом вводе/выводе.
Объекты Mutex
Mutex – глобальный именованный объект ядра, который одновременно может принадлежать (быть используемым) только одному потоку: если объект Mutex захвачен каким-либо потоком, то остальные потоки не могут захватить его. С помощью объектов Mutex реализуется классический алгоритм критической секции. Доступ к объектам Mutex осуществляется посредством описателей. Общая схема такова: один из потоков порождает объект Mutex и присваивает ему глобальное имя при помощи функции CreateMutex. Остальные потоки могут использовать для получения описателя объекта OpenMutex или CreateMutex с тем же именем. Перед входом в критическую секцию поток вызывает одну из функций ожидания, передавая ей в качестве параметра описатель объекта Mutex. Если объект Mutex уже захвачен, то поток блокируется до освобождения объекта. Если не захвачен, то исполнение потока продолжается, а объект Mutex захватывается. Для освобождения объекта Mutex используется функция ReleaseMutex.
Объекты Semaphore ("Семафор")
С помощью объектов семафор реализуется классический механизм семафоров. При этом в качестве примитива P(S) выступает одна из функций ожидания (уменьшает счетчик на единицу, но не меньше нуля, или ждет такой возможности), а в качестве примитива V(S) – функция ReleaseSemaphore (увеличивает счетчик семафора на заданную величину). При создании семафора функцией CreateSemaphore можно определить максимально допустимое значение переменной S
Объекты Waitable Timer
Определены только в Windows NT.