
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем 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: назначение, организация, доступ
19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.
Типичный цикл обработки сообщений состоит из функций: GetMessage(), TranslateMessage(), и DispatchMessage().
while (GetMessage(&msg, (HWND) NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Принажатииклавиш Windows посылаетактивномуокнусообщения WM_KEYDOWN и WM_KEYUP. Эти сообщения содержат некоторые виртуальные коды клавиш, а не символы. Для анализа нажатий и порождения сообщений WM_CHAR, которые содержат символьные коды клавиш, используется функция TranslateMessage().
Для того, чтобы направить сообщение на обработку соответствующему окну, используется функция DispatchMessage().
(к чему бы это приспособить?) Приложение может завершить себя посылкой сообщения WM_QUIT. Для этого предназначена функция PostQuitMessage(). Обычно она вызывается в ответ на получение главным окном приложения сообщения WM_DESTROY.
За каждым окном закреплена специальная функция, так называемая процедура окна. Для уведомления окна о предназначенном ему вводе или о каком-либо другом событии Windows вызывает эту процедуру и передает ей в качестве параметра код события и другие параметры. Процедура должна произвести необходимые действия, соответствующие данному событию, и вернуть управление операционной системе.
Вызов функции окна называют передачей сообщения этому окну. В качестве обязательного параметра в функцию окна передается именованная константа, называемая кодом или идентификатором сообщения (message identifier)
Другие параметры определяют дополнительные данные, связанные с данным сообщением. Например, при нажатии левой кнопки мыши в тот момент, когда указатель мыши находится над клиентской областью окна, окну передается сообщение WM_LBUTTONDOWN. При этом в качестве параметров передаются координаты указателя и состояние других кнопок мыши и клавиш SHIFT и CTRL.
Структура MSG.
20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32
Вычислительный процесс в теории – загруженная в память и готовая к исполнению программа. Процесс (точнее, образ процесса в памяти) состоит из кода и данных, принадлежащих ему. Кроме того, процесс может быть временным владельцем различных системных ресурсов: открытые файлов, каналов (pipes), объектов синхронизации и т.д.
Синонимом термина вычислительный процесс обычно является термин задача. В дальнейшем по возможности будут использоваться именно он, т.к. в контексте Win 32 термин процесс имеет собственное специфическое значения. В свою очередь, задаче синонимично приложение, однако в контексте Win 32 под приложением чаще понимается конкретно оконное приложение (см. раздел окна и сообщения)
В многозадачной среде одновременно может выполняться более одной задачи (вычислительного процесса). Истинное параллельное выполнение задач возможно только на ЭВМ с соответствующей архитектурой – параллельных ЭВМ (см. раздел параллельные вычислительные системы). Для ЭВМ обычного (последовательного) типа доступно лишь псевдопараллельное выполнение задач, обычно реализуемое на основании квантования времени: каждой задаче выделяется определенный промежуток (квант) времени, в течение которого центральный процессор обслуживает именно эту задачу, затем управление передается следующей задаче. Все функции по переключению задач и контролю выполняются планировщиком задач, являющимся неотъемлемой частью многозадачной ОС. Решение о моментах и порядке передачи управления принимается на основании дисциплины планирования и системы приоритетов, специфичных для каждой конкретной ОС.
Выделяются 2 основных типа многозадачности:
1) истинная или вытесняющая (preemptive) – смена активной задачи производится по инициативе планировщика, независимо от "желания" задачи и, как правило, прозрачно для нее (естественно, выбор ограничивается только готовыми к исполнению задачами, см. состояния процесса);
2) корпоративная или невытесняющая (not-preemptive) – переключение на новую задачу возможно только в моменты, выбираемые текущей задачей.
Вытесняющая многозадачность естественна для Unix, OS/2, Win 32. Примерами ОС с корпоративной многозадачностью могут служить Win 16 и сетевые ОС NovellNetware. Вытесняющая многозадачность обеспечивает большую управляемость прикладных задач, но корпоративная может быть более эффективной.
В Win 32 определены два основных объекта, представляющих выполняющуюся задачу: процесс и поток.
Процесс (process) в терминах Win 32 – динамический объект, ассоциируемый с выполняющейся программой. Каждый процесс имеет свое собственное, изолированное от других процессов, виртуальное адресное пространство в 4 Гбайт, а также собственное пространство описателей объектов, которыми он владеет. Процесс – базовый объект, которому ОС (точнее, системные планировщики ресурсов) распределяют ресурсы.
Поток (thread) – динамический объект, ассоциируемый с последовательностью ("потоком") команд, выполняемой независимо и асинхронно по отношению к другим подобным последовательностям. Поток – базовый объект, которому ОС (точнее, системный планировщик задач) распределяет время центрального процессора.
Каждый процесс имеет как минимум один главный (первичный – primary) поток. Однако главный поток может порождать подчиненные (вторичные) потоки, которые будут выполняться одновременно с ним, равно как и с потоками прочих процессов.
Т.о., процесс в Win 32 является единицей планирования ресурсов, а поток – процессорного времени. Ресурсы процесса доступны (за редким исключением) всем его потокам, и все потоки одного процесса совместно используют его виртуальное адресное пространство, но процессорное время распределяется именно между потоками, а не между процессами. Следовательно, в дальнейшем, когда речь будет идти о диспетчировании, состояниях, синхронизации и т.д. процессовWin 32 (согласно сложившейся терминологии), следует иметь в виду, что все это относится в первую очередь к потокам этих процессов.
Многопоточность, свойственная Win 32 и ряду других современных ОС удачно дополняет их многозадачность и существенно повышает гибкость системы.
Помимо потоков, начиная с WindowsNT 3.51 (SP3) и Windows 98, введена еще один объект – т.н. нить (fiber). Нить, подобно потоку, также участвует в распределении процессорного времени, но принцип управления ими совершенно иной и напоминает реализацию т.н. корпоративной или невытесняющей многозадачности. Нити функционируют в рамках потоков, следовательно, потоки и нити не являются альтернативными механизмами.
В Windows 2000 была введена еще одна единица планирования вычислительных процессов – т.н. задание (JobObject), объединяющее несколько логически связанных и взаимодействующих задач. Более подробно задания в рамках настоящего курса пока не рассматриваются.
Примечание. В ранней русскоязычной литературе по Win 32 термин "thread" мог переводиться и как "поток", и как "нить", т.е. "поток" и "нить" считались синонимами. В связи с реальным появлением объекта "fiber", обладающего собственным набором свойств, подобная синонимичность стала некорректной. Применительно к OS/2 для того же термина употреблялся перевод "шаг".