Понятия о планировании и диспетчеризации процессов
Планирование процессов
2.
Планировщик –специальная программа, которая формирует порядок выполнения работ, т.е. порядок представления ресурсов этим работам. Иногда планировщик называют диспетчером. Планировщик определяет оптимальный порядок выполнения работ, а диспетчер – реализует этот порядок. Т.е. диспетчер осуществляет переключение с одной работы на другую. Он запоминает контекст текущего процесса и возобновляет работу прерванного процесса. Таким образом, контекст процесса предназначен для корректного возобновления прерванного процесса. Диспетчер при переключении процесса сохраняет контекст текущего процесса, загружает контекст нового процесса и запускает его на выполнение.
Контекст процесса зависит от архитектуры системы, и обычно включает в себя содержимое регистров общего назначения и регистров управления процессом, с указателями, например, на адресное пространство процесса.
В универсальных системах в отличие от специализированных, постоянно создаются и уничтожаются процессы, поэтому необходим способ создания и прерывания процессов по мере необходимости. Существуют четыре основных события, приводящие к созданию процессов: инициализация системы; выполнение существующим процессом системного запроса на создание процесса; запрос пользователя на создание процесса; инициирование пакетного задания. Создание процесса во всех случаях происходит по одинаковой схеме: текущий процесс выполняет системный запрос на создание нового процесса.
Обычно в вычислительной системе создается множество процессов. В UNIX для просмотра списка запущенных процессов используется программа ps, а в Windows можно воспользоваться диспетчером или планировщиком (scheduler) задач.
В UNIX существует только один системный запрос, направленный на создание нового процесса: fork (ветвление или вилка). Этот запрос создает дубликат вызываемого процесса. После выполнения запроса fork двум процессам — родительскому и дочернему — соответствуют одинаковые образы памяти, строки окружения и одни и те же открытые файлы. Обычно дочерний процесс выполняет системный вызов execve (или похожий) для изменения своего образа памяти и запуска новой программы.
В Windows же вызов всего одной функции CreateProcess интерфейса Win32 управляет и созданием процесса, и запуском в нем нужной программы. У этой функции 10 параметров: программа, которую нужно запустить, параметры командной строки этой программы, различные атрибуты защиты, биты, управляющие наследованием открытых файлов, приоритеты, спецификация окна, которое следует открыть для процесса, и указатель на структуру, в которой информация о созданном процессе возвращается вызывающей программе.
И в UNIX, и в Windows после создания нового процесса родительский и дочерний процессы имеют собственные различные адресные пространства. При изменении любым процессом слова в адресном пространстве это изменение незаметно для других процессов. В UNIX начальное адресное пространство дочернего процесса является копией родительского, но сами адресные пространства различны, и перезаписываемая память совместно не используется (некоторые приложения UNIX совместно используют текст программы, поскольку его нельзя модифицировать). В то же время созданный процесс может использовать совместно с родительским процессом некоторые другие ресурсы, например открытые файлы. В Windows адресные пространства родительского и дочернего процессов отличаются с самого начала.
Во время создания нового процесса операционная система, как правило, выполняет целую последовательность операций. Во-первых, процессы необходимо каким-то образом различать между собой — для этого каждому процессу присваивается идентификационный номер процесса(process identification number, PID). Затем система создает блок управления процессом(process control block, PCB), называемый также дескриптором процесса(process descriptor), в который помещается информация, необходимая операционной системе для управления процессом. В блоке управления процессом обычно содержится следующая информация:
• PID;
• текущее состояние процесса (выполняется, готов или блокирован);
• программный счетчик(program counter) или счетчик команд— определяющий, какую по счету команду программы процессор должен будет выполнить следующей;
• приоритет процесса;
• полномочия (данные, определяющие перечень ресурсов, к которым может иметь доступ данный процесс);
• указатель на родительский процесс(parent process), то есть процесс, создавший данный;
• указатели на дочерние процессы(child processes), то есть процессы, созданные данным процессом, если таковые имеются;
• указатели данных и инструкций процесса в памяти;
• указатели выделенных процессу ресурсов (например, файлов).
Кроме того, в блоке управления процессом хранится контекст процесса(processes context), который формируется в момент выхода процесса из состояния выполнения.
Блок управления процессом (РСВ):
Программный счетчик
Регистры
Состояние
Приоритет
Адресное пространство
Родительский процесс
Дочерние процессы
Открытые файлы ...
Другие флаги
Рисунок 2.1 - Таблица процессов и блоки управления процессами
При переходе процесса из одного состояния в другое, операционная система должна обновить информацию в блоке управления процессом. Как правило, операционная система хранит указатели на блоки управления процессами в системной либо пользовательской таблице процессов(process table), чтобы ускорить доступ к нужной информации (см. рисунок).
Завершение процесса
Процесс завершается в результате появления следующих событий:
1) обычный выход (преднамеренно);
2) выход по ошибке (преднамеренно);
3) выход по неисправимой ошибке (непреднамеренно);
4) уничтожение другим процессом (непреднамеренно).
В основном процессы завершаются по мере выполнения своей работы. После окончания программы выполняется системный запрос, чтобы сообщить операционной системе об окончании работы. В UNIX этот системный запрос — exit, а в Windows — ExitProcess.
Второй причиной завершения процесса может стать неустранимая ошибка. Например, если пользователь набрал на клавиатуре команду неправильную команду.
Третьей причиной завершения процесса является ошибка, вызванная самим процессом, чаще всего связанная с ошибкой в программе.
Четвертой причиной завершения процесса может служить выполнение другим процессом системного запроса на уничтожение процесса. В UNIX такой системный запрос — kill, а соответствующая функция Win32 — TernminateProcess.
По завершении работы процесса (добровольно либо принудительно со стороны операционной системы), ОС свобождает память процесса и другие занимаемые им ресурсы, удаляет информацию о нем из таблицы процессов, предоставляя память процесса и ресурсы для других процессов.