Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

5.2.8. Сообщения и многозадачность

В Win16 цикл обработки сообщений, который принимает сообщения и перенаправляет их к соответствующим оконным функциям, играл и другую важную роль во взаимодействии приложения и операционной среды. А именно: он позволял приложению возвращать управление системе. Поскольку Win16 не является операционной системой с вытесняющей многозадачностью, она не “забирает” управление процессором от приложений и ждет, пока приложение само не освободит процессор. Следовательно, в Win16 возможен захват процессора неправильно работающим приложением, что вызывает “зависание” всей системы.

Для того чтобы обеспечить более равномерное разделение вычислительных ресурсов в Win16, функция GetMessage()автоматически передает управление системе при отсутствии сообщений в очереди приложения. Значит, если приложение в данный момент не задействовано, операционная система передает управление другому приложению. Однако, если приложение, например, производит большую вычислительную работу, другие задачи в Win16 не могут работать. Итак, корректная работа системы Win16 зависит от поведения приложений, а именно, часто ли они вызывают функции обработки сообщений.

В Win32 реализована вытесняющая многозадачность, когда сама операционная система делает переключение процессов, вне зависимости от текущего состояния исполняемого приложения. Казалось бы, приложения Win32 больше не нуждаются в своевременном возврате управления. Однако это не так, поскольку во время большой вычислительной работы ваше приложение выглядит “зависшим”, и пользователь не может им управлять.

5.2.9. Очереди сообщений

В Win16 операционная система поддерживает единственную очередь сообщений. Сообщения, генерируемые различными событиями операционной системы помещаются в общую очередь сообщений. При этом возможна ситуация, когда одно приложение пытается извлечь из очереди “свое” сообщение, а операционная система может выполнить переключение контекста и активизировать другое приложение, которого ожидают сообщения в очереди. В результате первому приложению не удается выбрать сообщение, и это “подвешивает” систему. Сообщения начинают накапливаться в очереди сообщений. Так как она имела фиксированный размер, в конце концов очередь переполняется. При поступлении каждого нового сообщения, которое не может быть помещено в очередь, Windows отвечала звуковым сигналом.

В Win32 механизм очереди сообщений более совершенен. В этих операционных системах с вытесняющей многозадачностью больше не гарантируется упорядоченное совместное выполнение конкурирующих задач или потоков. Два или более потока могут одновременно попытаться получить доступ к очереди сообщений. Кроме того, поскольку переключение задач больше не зависит от следующего доступного сообщения в очереди, нет гарантии, что задача будет получать только сообщения, адресованные ей.

Это одна из причин, по которой единая очередь сообщений в 32-х разрядных Windows была разделена на индивидуальные очереди для каждого потока.

5.2.10. Процессы и потоки

В однопоточных операционных системах наименьшей единицей выполнения является задача или процесс. Механизм распределения задач в этих операционных системах заключается в переключении между этими задачами.

В противоположность этому в многопоточной системе наименьшей единицей выполнения является поток, а не процесс. Задача или процесс могут состоять из более чем одного потока, при этом один из них определяется как главный поток. Организация нового потока требует меньше системных ресурсов, поскольку потоки одного процесса имеют доступ к одному адресному пространству, а переключение между потоками одного и того же процесса требует незначительных расходов ресурсов системы.