ПРОЦЕСС. МОДЕЛЬ ПРОЦЕССА




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

СОЗДАНИЕ ПРОЦЕССОВ

В универсальных ОС способ создания и прерывания процессов происходит по мере их необходимости. Есть 4 основных события, приводящие к созданию процессов:

1) Инициализация системы.

2) Выполнение изданного работающим процессом системного вызова на создание нового процесса. 3) Запрос пользователя на создание процесса.

4) Инициирование пакетного задания. Обычно при загрузке ОС создаются несколько процессов. Некоторые из них являются высокоприоритетными, т.е. обеспечивающими взаимодействие с пользователем и выполняющие заданную работу. Остальные процессы являются фоновыми, они не связаны с конкретными пользователями, но выполняют особые функции. Напр., фоновый процесс может быть предназначен для обработки приходящей почты, активизируясь только по мере появления писем. Такие фоновые процессы, связанные с почтой, новостями, web-страницами, выводом на печать, называются демонами. Процессы могут создаваться не только в процессе загрузки системы, но и позже. Напр., новый процесс м.б. создан по просьбе текущего. Во всех перечисленных случаях новый процесс формируется одинаково, а именно: текущий процесс выполняет системный запрос на создание нового процесса. В роли текущего процесса может выступать процесс, запущенный пользователем, системный процесс, инициируемый клавиатурой, мышкой и т.д. В любом случае этот процесс всего лишь выполняет системный запрос, а также прямо или косвенно содержит информацию о программе, которую нужно запустить в этом процессе. В Unix-подобных ОС существует только один системный запрос, направленный на создание нового процесса – fork. Этот запрос создает дубликат выполняемого процесса. После выполнения процесса fork двумя процессами (родительский и дочерний) соответствуют одинаковые обр. памяти, строками окружения и одними и теми же открытыми файлами. Далее обычно дочерний процесс выполняет системный вызов для изменения своего образа в памяти и запуска новой программы.

ЗАВЕРШЕНИЕ ПРОЦЕССА

Рано или поздно процесс завершает свое существование. Чаще всего это происходит благодаря одному из следующих событий:

1) Обычный выход (преднамеренно).

2) Выход по ошибке (преднамеренно).

3) Выход по неисправимой ошибке (не преднамеренно).

4) Уничтожение другим процессом (не преднамеренно).

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

3) Ошибка, вызванная самим процессом. Чаще всего она связана с ошибкой в программе. Напр., выполнение недопустимой команды, обращение к несуществующей области памяти и др. В некоторых ОС, напр. Linux, процесс может информировать ОС о том, что он сам обрабатывает некоторые ошибки. В этом случае процессу посылается сигнал (процесс прерывается при появлении ошибки).

4) Выполнение другим процессом системного запроса на уничтожение определенного процесса (kill – Unix, Terminate Process – Windows 32). В обоих случаях процесс, который выбивает другой процесс, должен обладать соответствующими полномочиями. В некоторых ОС при завершении процесса преднамеренно или нет – все процессы, созданные этим процессом завершаются.

ИЕРАРХИЯ ПРОЦЕССОВ

В некоторых ОС, в частности Linux, родительские и дочерние процессы остаются связанными (не автономные). Дочерний процесс также может в свою очередь создавать процессы, формируя иерархию процессов. В Unix все эти дальнейшие потомки образуют группу процессов. Сигнал, посылаемый пользователем с клавиатуры, поставляется всем членам группы, взаимодействующим с клавиатурой в данный момент. Обычно это все активные процессы, созданные в текущем окне. Каждый из процессов может перехватить сигнал, игнорировать его или выполнить другое действие, предусмотренное по умолчанию. В образе загрузки Unix присутствует специальный процесс – init. При запуске он считывает файл, в котором имеется информация о количестве терминалов. Терминал (консоль) – это устройство ввода и вывода. Затем процесс развивается таким образом, чтобы каждому терминалу соответствовал один процесс. Если пароль правильный – процесс входа в систему запускает оболочку для обработки команд пользователя, которые в свою очередь могут запускать процессы. Т.О. все процессы в системе принадлежат одному дереву, начинающемуся с процесса init. В Windows не существует понятия иерархии процессов, все они равноправны. Единственным инструментом, напоминающим подобие иерархии является возможность создания процесса со специальным маркером, который называется дескриптером. Дескриптер (маркер) позволяет контролировать дочерний процесс. Но маркер можно передать другому процессу, нарушая иерархию. В Unix это невозможно.

СОСТОЯНИЯ ПРОЦЕССОВ

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

 

 


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

1 переход – процесс блокируется, ожидая входных данных.

2 переход – планировщик выбирает другой процесс.

3 переход – планировщик выбирает этот процесс.

4 переход – доступны входные данные. Первые два состояния похожи. В обоих случаях процесс может быть запущен. Только во втором случае процессор недоступен. Третье состояние отличается тем, что запустить процесс невозможно, независимо от того загружен процессор или нет.

Переход 1 происходит тогда, когда процессор обнаруживает, что продолжение работы невозможно. В некоторых ОС процесс должен выполнить системный запрос, напр., block или pause, чтобы оказаться в заблокированном состоянии. В других системах (Unix) процесс автоматически блокируется, если он не в состоянии считать из специального файла или канала данные. Переход 2 и 3 вызываются частью ОС, называемой планировщик процессов. Переход 2 происходит, если планировщик решил предоставить процессор другому процессу. Переход 3 происходит, когда все остальные процессы уже исчерпали свое процессорное время и процессор снова передается первому процессу. Переход 4 происходит с появление внешнего события, ожидавшего процессор, напр., прибытие входных данных. Если в этот момент не запущен никакой другой процесс, то срабатывает переход 3 и процесс запускается. В противном случае процессу придется некоторое время находиться в состоянии готовности, пока не освободится процессор.

ПЕРЕКЛЮЧЕНИЕ ПРОЦЕССОВ

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

1 группа параметров относится к управлению процессами.

2 группа описывает используемую процессом память.

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

На начальной стадии этого процесса работают аппаратные средства процессора:

1) Аппаратно запоминается счетчик команд.

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: