Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен Павлов.docx
Скачиваний:
61
Добавлен:
17.08.2022
Размер:
786.12 Кб
Скачать
  1. Модель процесса, Создание и завершение процесса

Модель процесса

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

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

Создание процесса

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

- инициализация системы;

- выполнение изданного работающим процессом системного запроса на создание процесса;

- запрос пользователя на создание процесса;

- инициирование пакетного задания.

С технической точки зрения во всех случаях новый процесс формируется одинаково: текущий процесс выполняет системный запрос на создание нового процесса. В UNIX существует только один системный вызов, направленный на создание нового процесса: fork (ветвление или вилка). Этот запрос создает дубликат вызываемого процесса. В Windows вызов функции CreateProcess интерфейса Win32 управляет и созданием процесса, и запуском в нем нужной программы. После создания нового процесса родительский и дочерний процессы имеют собственные различные адресные пространства.

Завершение процесса

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

- обычный выход (преднамеренно); - выход по ошибке (преднамеренно); - выход по неисправимой ошибке (непреднамеренно); - уничтожение другим процессом (непреднамеренно).

В основном процессы завершаются по мере выполнения своей работы.

1) В Unix системный вызов exit, в Windows – ExitProcess. 2) Неустранимая ошибка. 3) Ошибка, вызванная самим процессом, чаще всего связанная с ошибкой в программе. Пример: выполнение недопустимой команды, обращение к несуществующей области памяти, деление на ноль. 4) Выполнение другим процессом системного запроса на уничтожение процесса. В Unix – kill, в Win32 – TerminateProcess.

  1. Иерархии, реализация, состояния процессов

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

    1. Иерархии процессов

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

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

В качестве примера иерархии процессов можно рассмотреть инициализацию UNIX при запуске.

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

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

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