Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций ОС.doc
Скачиваний:
31
Добавлен:
01.04.2025
Размер:
4 Мб
Скачать
☆

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), чтобы ускорить доступ к нужной информации (см. рисунок).