double arrow

Глава 5 (лекции № 7-8)

Диспетчирование (планирование) и организация диспетчеров

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

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

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

Диспетчер обычно – фундаментальный элемент ядра ОС, однако в принципе обязанности диспетчера могут выполняться на более высоком уровне ОС, либо самими прикладными программами

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

Основные параметры планирования: а) производительность — кол-во процессов, которые завершают выполнение за единицу времени; б) время ожидания — время, которое процесс ожидает в очереди готовности; в) время отклика — время, которое проходит от начала запроса до первого ответа на запрос.

В средах вычислений реального времени, например, на мобильных устройствах, предназначенных для автоматического управления в промышленности (например, робототехника), планировщик задач должен обеспечить отработку процессов в течение заданных временны́х промежутков (время отклика); это критично для поддержания корректной работы системы реального времени.




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

Основные функции диспетчера:

создание процессов для функциональных задач;

создание обработчиков событий;

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

Процесс диспетчирования в основных чертах предусматривает выполнение следующих действий:

сохранение информации о состоянии прерывающейся программы с целью обеспечения возможности последующего ее продолжения;

выборку очередей программы для выполнения;

- определение способности выбранной программы к выполнению;



- запуск программы с соответствующего места;

Процесс - одна или совокупность программ, выполнение которых планируется отдельно.

Построение диспетчеров. Известны два типа построения диспетчера: с запуском задач по расписанию (Time Triggered) и с запуском задач по событиям (Event Triggered). Запуск задач по расписанию обычно строится на базе часов реального времени, либо по прерываниям от внешнего источника тактирующих импульсов. Так как часы реального времени, как правило, строятся на базе аппаратного таймера, вызывающего прерывания с заданным периодом повторения, можно считать первый тип разновидностью второго.

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

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

Как видим, каждый процесс может находиться как минимум в двух состояниях: процесс исполняется и процесс не исполняется. Диаграмма состояний процесса в такой модели изображена на рисунке 5.1.

Рис 5.1. Простейшая диаграмма состояний процесса.

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

Такая модель является очень грубой. Она не учитывает, в частности то, что процесс, выбранный для исполнения, может все еще ждать события, из-за которого он был приостановлен, и реально к выполнению не готов. Для того чтобы избежать такой ситуации, разобьем состояние «процесс не исполняется» на два новых состояния: «готовность» и «ожидание» (рисунок 5.2).

Рис. 5.2. Более подробная диаграмма состояний процесса.

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

либо он заканчивает свою деятельность;

либо он не может продолжать свою работу, пока не произойдет некоторое событие, и операционная система переводит его в состояние ожидание;

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

Наша новая модель хорошо описывает поведение процессов во время их жизни, но она не акцентирует внимания на появлении процесса в системе и его исчезновении из системы. Для полноты картины нам необходимо ввести еще два состояния процессов: рождение и закончил исполнение (см. рисунок 5.3).

Рис. 5.3. Диаграмма состояний процесса, принятая в курсе.

Теперь для появления в вычислительной системе процесс должен пройти через состояние рождение. При рождении процесс получает в свое распоряжение адресное пространство, в которое загружается программный код процесса; ему выделяются стек и системные ресурсы; устанавливается начальное значение программного счетчика этого процесса и т. д. Родившийся процесс переводится в состояние готовность. При завершении своей деятельности процесс из состояния исполнение попадает в состояние закончил исполнение.

Т.о., каждый конкретный процесс в любой момент времени может находиться в одном из нескольких состояний. Считается, что активный процесс находиться в состоянии выполнения, а процесс, ожидающий передачи управления - в состоянии готовности. Если процесс не может продолжить работу до наступления некоторого события, то говорят, что он заблокирован. Процесс может быть заблокирован по нескольким причинам, в частности он может ожидать:

- завершение операций в/в;

- открытия семафора;

- окончания работы другого процесса (например, для использования информации, подготовленной этим процессом);

- завершения операций страничного обмена (в машинах со страничной организацией памяти) и др.

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

В конкретных операционных системах состояния процесса могут быть еще более детализированы, могут появиться некоторые новые варианты переходов из состояния в состояние. Так, например, модель состояний процессов для операционной системы Windows NT содержит 7 различных состояний, а для операционной системы UNIX — 9. Тем не менее, в принципе, все операционные системы подчиняются изложенной выше модели.






Сейчас читают про: