Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sp.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
215.95 Кб
Скачать

21. Состояния процессов (многозадачная среда). Состояния процессов (потоков)

Вычислительный процесс или его часть (в частности, в Win 32 – поток) может находиться в одном из состояний:

A – выполнение или активность (active) – процесс контролирует все свои ресурсы, включая выделенное ему процессорное время, т.е. выполняется;

R – готовность (ready) – процесс контролирует все ресурсы, кроме процессорного времени, по предоставлении которого немедленно активизируется;

W – ожидание или сон (wait) – процесс не имеет всех необходимых ресурсов и ожидает их предоставления, при наступлении соответствующих условий планируется активизация; помимо запросов на выделение тех или иных ресурсов, к этому состоянию, как правило, приводят и все прочие системные запросы, длительность выполнения которых заранее не определена;

P – пассивное (passive) – процесс не может выполняться в настоящее время, и его активизация не планируется (с точки зрения планировщика!);

Более специфические состояния, например т.н. зомби, здесь не рассматриваются, хотя в действительности, конечно, могут иметь место.

Как правило, состояние P – начальное (загрузка и инициализация не завершены) и конечное состояние процесса. Переход между состояниями A и R в системах с вытесняющей многозадачностью инициируется системным планировщиком задач и явным образом прикладными программами не контролируется. Переход из A в W связан с обращениями к системным функциям, из W в R – с их завершением либо с возникновением событий.

Особо следует коснуться состояния suspend (см. управление потоками). В этом состоянии вычислительный процесс обладает требуемыми ресурсами, может выполняться, но приостановлен – принудительно исключен из числа конкурирующих за процессорное время. Наиболее близко это соответствует пассивному состоянию P, с тем отличием, что активизация процесса возможна в любой момент.

С состояниями процесса тесно связаны понятия текущего режимов выполнения: режим системы (ядра) и режим пользователя (задачи, прикладной задачи). Как правило, выполнение системных вызовов связано с переключением в режим системы, состояние прикладной задачи до завершения вызова соответствует ожиданию.

Следует напомнить, что единицей планирования в Win 32 является поток, поэтому следует иметь в виду состояния именно потоков. Так, состояние однопоточного процесса фактически есть состояние его единственного потока, а в многопоточном процессе различ­ные потоки могут находиться в различных состояниях в общем независимо друг от друга.

Более подробно о переключении состояний и их использовании см. темы "Управление процессами и потоками...", "Синхронизация...".

22. Многозадачность в win32. Планирование и выполнения программ в win32

Операционная система с вытесняющей многозадачностью должна использовать тот или иной алгоритм, позволяющий ей распределять процессорное время между пото ками Здесь мы рассмотрим алгоритмы, применяемые в Windows 98 и Windows 2000. Б главе 6 мы уже обсудили структуру CONTEXT, поддерживаемую в объекте ядра "поток", и выяснили, что она отражает состояние регистров процессора на момент последнего выполнения потока процессором Каждые 20 мс (или около того) Windows просматривает все существующие объекты ядра "поток" и отмечает те из них, кото рые могут получать процессорное время. Далее она выбирает один из таких объек тов и загружает в регистры процессора значения из его контекста Эта операция на зывается переключением контекста (context switching) По каждому потоку Windows ведет учет того, сколько раз он подключался к процессору. Этот показатель сообща ют специальные утилиты вроде Microsoft Spy++ Например, на иллюстрации ниже показан список свойов одного из потоков. Обратите внимание, что этот поток под ключался к процессору 37379 раз.

Поток выполняет код и манипулирует данными в адресном пространстве своего процесса Примерно через 20 мс Windows сохранит значения регистров процессора в контексте потока и приостановит сго выполнение. Далее система просмотрит ос тальные объекты ядра "поток", подлежащие выполнению, выберет один из них, заг рузит его контскст в регистры процессора, и все повторится Этот цикл операций — выбор потока, загрузка его контекста, выполнение и сохранение контекста — начи нается с момента запуска системы и продолжается до cc выключения.

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

NOTE:  Меня часто спрашивают, как сделать так, чтобы поток гарантированно запус кался в течение определенного времени после какого-нибудь события — на пример, не позднее чем через миллисекунду после приема данных с последо вательного порта? Ответ прост: никак. Такие требования можно предъявлять к операционным системам реального времени, но Windows к ним не относит ся. Лишь операционная система реального времени имеет полное представле ние о характеристиках аппаратных средств, на которых она работает (об ин тервалах запаздывания контроллеров жестких дисков, клавиатуры и т. д.). А создавая Windows, Microsoft ставила другую цель обеспечить поддержку мак симально широкого спектра оборудования — различных процессоров, диско вых устройств, сетей и др. Короче говоря, Windows не является операционной системой реального времени.

Хочу особо подчеркнуть, что система планирует выполнение только тех потоков, которые могут получать процессорное время, но большинство потоков в системе к таковым не относится. Так, у некоторых объектов-потоков значение счетчика просто ев (suspend count) больше 0, а значит, соответствующие потоки приостановлены и не получают процессорное время. Вы можете создать приостановленный поток вызовомCreateProcess или CreateThread с флагом CREATESUSPENDED (В следующем разделе я расскажу и о таких функциях, как SuspendThread иResumeThread.)

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]