Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 130стр.doc
Скачиваний:
95
Добавлен:
15.06.2014
Размер:
2.49 Mб
Скачать

25) Процессы и потоки в Win32. Приоритеты. Планирование процессорного времени. Функции работы с процессами и потоками.

Процесс обычно определяют как экземпляр выполняемой программы. В Win32 про­цессу отводится 4 Гб адресного пространства. Win32-npoцeccничего не исполняет — просто владеет четырехгигабайтовым адресным пространством, содержа­щим код и данные ЕХЕ-файла приложения. В это же пространство загружаются код и дан­ные DLL-библиотек, если того требует ЕХЕ-файл. Кроме адресного пространства, процессу принадлежат такие ресурсы, как файлы, динамически выделяемые области памяти и потоки. Ресурсы, создаваемые при жизни процесса, обязательно уничтожаются при его завершении.

Чтобы процесс что-нибудь выполнил, в нем нужно создать поток. Именно потоки отвечают за исполнение кода, содержащегося в адрес­ном пространстве процесса. В принципе, один процесс может владеть несколькими потока­ми, и тогда они «одновременно» исполняют код в адресном пространстве процесса. Для этого каждый поток должен располагать собственным набором регистров процессора и собственным стеком, а каждый процесс — минимум одним потоком. Чтобы все эти потоки работали, операционная система отводит каждому из них оп­ределенное процессорное время. Выделяя потокам отрезки времени (называемые квантами) по принципу карусели, она создает тем самым иллюзию одновременного выполнения пото­ков.

При создании Win32-npoцeccaпервый (точнее, первичный) поток создается системой автоматически. Далее этот поток может породить другие потоки, те в свою очередь — новые и т. д.

Организация взаимодействия процессов и потоков в Win32.

В среде, позволяющей исполнять несколько потоков одновременно, очень важно синхро­низировать их деятельность. Для этого в операционных системах, базирующихся на Win32, предусмотрен целый ряд синхронизирующих объектов. В данной главе мы рассмотрим пять таких объектов: критические секции, объекты-мьютексы, семафоры, события и ожидаемые таймеры. Но существуют и другие, часть из них описана в прочих главах книги.

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

Все перечисленные объекты, за исключением критических секций, принадлежат ядру. Таким образом, критические секции не управляются низкоуровневыми компонентами опе­рационной системы, и в работе с ними описатели не используются. Критическая секция — простейший синхронизирующий объект, его-то мы и рассмотрим в первую очередь. Но сначала обсудим общую концепцию синхронизации потоков.

Несколько слов о синхронизации потоков

В общем случае поток синхронизирует себя с другим так: он засыпает, и операционная сис­тема, не выделяя ему процессорного времени, приостанавливает его выполнение. Но прежде чем заснуть, поток сообщает системе, какое особое событие должно произойти, чтобы его исполнение возобновилось. Как только указанное событие произойдет, поток вновь получит право на выделение ему процессорного времени, и все пойдет своим чередом. Таким образом, отныне выполнение потока синхронизировано с определенным событием.

По ходу дела я покажу, как задается такое событие и как поток, уведомив систему о необходимости слежения за особым событием, «отправляется спать».