Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разорёнов 2008 full(Краткий конспект).doc
Скачиваний:
11
Добавлен:
21.04.2019
Размер:
1.33 Mб
Скачать

45 Окончание процесса (общие сведения)

Основные события, приводящие к завершению процесса:

  • естественное завершение (завершение работы);

  • планируемый выход по идентифицированной ошибке;

  • уничтожение другим процессом;

  • окончание по неисправимой ошибке в программе.

46 Состояния процесса

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

ВЫПОЛНЕНИЕ - активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором;

ОЖИДАНИЕ - пассивное состояние процесса, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса;

ГОТОВНОСТЬ - также пассивное состояние процесса, но в этом случае процесс заблокирован в связи с внешними по отношению к нему обстоятельствами: процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса.

В ходе жизненного цикла каждый процесс переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе. Типичный граф состояний процесса показан на рисунке 2.1.

В состоянии ВЫПОЛНЕНИЕ в однопроцессорной системе может находиться только один процесс, а в каждом из состояний ОЖИДАНИЕ и ГОТОВНОСТЬ - несколько процессов, эти процессы образуют очереди соответственно ожидающих и готовых процессов. Жизненный цикл процесса начинается с состояния ГОТОВНОСТЬ, когда процесс готов к выполнению и ждет своей очереди. При активизации процесс переходит в состояние ВЫПОЛНЕНИЕ и находится в нем до тех пор, пока либо он сам освободит процессор, перейдя в состояние ОЖИДАНИЯ какого-нибудь события, либо будет насильно "вытеснен" из процессора, например, вследствие исчерпания отведенного данному процессу кванта процессорного времени. В последнем случае процесс возвращается в состояние ГОТОВНОСТЬ. В это же состояние процесс переходит из состояния ОЖИДАНИЕ, после того, как ожидаемое событие произойдет.

47 Уровни планирования процессов

Существует 3 уровня планирования процессов:

1. На верхнем уровне – выбор заданий пользователем. Эту работу выполняет системный компонент – планировщик.

2. Планирование на нижнем уровне (диспетчеризация) – выбор готового процесса для выполнения. Выполняет системный компонент – диспетчер процессов.

3. Планирование на промежуточном уровне – определяется, каким процессам будет разрешено состязаться за ресурс ЦП и какие процессы будут временно остановлены.

48 Диспетчеризация процессов

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

- приоритет, присвоенный задаче, может являться величиной постоянной

- приоритет задачи может изменяться в процессе её решения.

Диспетчеризация с динамическими приоритетами требует дополнительных расходов на вычисление значений приоритетов исполняющихся задач, поэтому во многих ОС реального времени используются методы диспетчеризации на основе статических (постоянных приоритетов).

// получаем кадр всех процессов в системе

hS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

PROCESSENTRY32 PS;

// устанавливаем размер структуры

PS.dwSize = sizeof(PROCESSENTRY32);

if (Process32First(hS, &PS))

do

{ // выводим информацию о каждом процессе

…..

_itoa(PS.pcPriClassBase, szStrVal, 10);

strcat(szStrPr, szStrVal);

SendMessage(hListProcs, LB_ADDSTRING, 0, (LPARAM)szStrPr);

…..

} while (Process32Next(hS, &PS));

CloseHandle(hS); // удаляем кадр