Создание процесса. Завершение процесса
Операционные системы
Вопросы к экзамену
Процессы и потоки.
Основным понятием, связанным с операционными системами является процесс - абстрактное понятие, описывающее работу программы. Процессом по сути является программа в момент её выполнения. Все остальное базируется на этом понятии.
Все современные компьютеры умеют делать несколько дел одновременно. В многозадачной системе процессор переключается между программами, предоставляя каждой от десятков до сотен миллисекунд. При этом, в каждый момент времени процессор занят только одной задачей, но за секунду успевает поработать со многими задачами, создавая иллюзию многозадачности у пользователей. Это называется псевдопараллелизм, в отличие от настоящего параллелизма в многопроцессорных системах (два или более процессора, разделяющих между собой общую физическую память).
Модель процесса.
В связи с тем, что следить за работой параллельно идущих процессов достаточно сложно, разработчиками была разработана концептуальная модель последовательных процессов, упрощающая процесс слежения. В этой модели все функционирующее на компьютере программное обеспечение, иногда включая собственно саму операционную систему, организованно в виду последовательных процессов, или для краткости, просто процессов. Процессом является выполняемая программа, включая текущее значение счетчика счетчика команд, регистров и переменных. Реальный процессор переключается с процесса на процесс, но для простоты понимания легче рассматривать процессы, идущие параллельно (псевдопараллельно). Переключение процессора между процессами называется многозадачностью или мультипрограммированием.
На рисунке а) представлена схема компьютера, работающего с четырьмя программами. На рисунке б) представлены четыре процесса, каждый со своей управляющей логикой (то есть, логическим счетчиком команд), идущие независимо друг от друга. Разумеется, на самом деле существует только один физический счетчик команд, в который загружается логический счетчик команд текущего процесса. Когда время, отведенное процессу, заканчивается, физический счетчик команд сохраняется в логическом счетчике команд процесса в памяти. На рисунке в) видно, что за достаточно большой промежуток времени изменилось состояние всех четырех процессов, но в каждый конкретный момент времени в действительности работает только один процесс.
Различие между процессом и программой трудноуловимо, но тем не менее оно имеет принципиальное значение. Процесс - это активность некоторого рода. У него есть программа, входные и выходные параметры, а также состояние. Один процессор может переключаться между различными процессами, используя некий алгоритм планирования для определения момента переключения от одного процесса к другому.
Создание процесса. Завершение процесса.
Создание процесса.
Основные события, приводящие к созданию процесса:
○ Инициализация системы
○ Выполнение изданного работающим процессом системного запроса на создание процесса
○ Запрос пользователя на создание нового процесса
○ Инициирование пакетного задания
Обычно, при загрузке системы создаются несколько процессов, некоторые из которых являются высокоприоритетными, т.е. обеспечивающими взаимодействие с пользователем и выполняющими заданную работу. Остальные процессы являются фоновыми, они не связаны с конкретными пользователями, но выполняют особые функции. Некоторые из них активизируются только в определенный момент, по мере появления задач. Такие процессы называются демонами.
С технической точки зрения, во всех случаях новый процесс формируется одинаково: текущий процесс выполняет системный запрос на создание нового процесса. Текущим процессом может быть любой процесс, будь то системный или запущенный пользователем. Системный запрос заставляет создать новый процесс, а также содержит информацию о программе, которую нужно запустить в этом процессе.
В UNIX существует только один системный запрос, направленный на создание процесса: fork. Этот запрос создает дубликат вызываемого процесса. После выполнения запроса fork двум процессам - родительскому и дочернему - соответствуют одинаковые образы памяти, строки окружения и открытые файлы. Обычно, дочерний процесс выполняет системный вызов execve для изменения образа памяти и запуска новой программы.
В Windows вызов всего одной функции CreateProcess управляет и созданием процесса и запуском нужной в ней программы.
После создания нового процесса, родительский и дочерний процессы имеют собственные различные адресные пространства. В тоже время, созданный процесс может использовать одинаковые ресурсы с родительским процессом, например открытые файлы.
Завершение процесса
Основные события, приводящие к завершению процесса:
○ Обычный выход (преднамеренно)
○ Выход по ошибке (преднамеренно)
○ Выход по неисправимой ошибке (непреднамеренно)
○ Уничтожение другим процессом (непреднамеренно)
В основном, процессы завершаются по мере выполнения своей работы. После окончания компиляции программы, компилятор выполняет системный запрос, чтобы сообщить операционной системе о завершении работы. В UNIX этот запрос - exit, а в Windows - ExitProcess. Так же, причиной завершения процесса может служить выполнение другим процессом системного запроса на уничтожение процесса. В UNIX такой системный запрос - kill, а в Windows - TerminateProcess. В обоих случаях “киллер” должен обладать соответствующими правами к убиваемому процессу.
Иерархия процессов.
В некоторых системах родительский и дочерний процессы остаются связанными между собой определенным образом. Дочерний процесс также может, в свою очередь, создавать процессы, формируя иерархию процессов.Следует отметить, что в отличии от животного мира у процесса может быть только один родитель и сколько угодно “детей”.
В UNIX процесс, все его “дети” и дальнейшие потомки образуют группу процессов. Сигнал, посылаемый пользователем с клавиатуры, доставляется всем членам группы, взаимодействующим с клавиатурой в данный момент (обычно это все активные процессы, созданные в текущем окне). Каждый из процесс может перехватить сигнал, игнорировать его или выполнить другое действие, предусмотренное по умолчанию.
Рассмотрим в качестве примера иерархии процессов инициализацию UNIX при запуске. В образе загрузке присутствует специальный процесс init. При запуске этот процесс считывает файл, в котором находится информация о количестве терминалов. Затем процесс разветвляется таким образом, чтобы каждому терминалу соответствовал один процесс. Процессы ждут, пока какой-нибудь пользователь не войдет в систему. Если пароль правильный, то процесс входа в систему запускает запускает оболочку для обработки команд пользователя, которые, в свою очередь могут запускать другие процессы. Таким образом, все процессы в системе принадлежат к единому дереву, начинающемуся с процесса init. Напротив, в Windows не существует понятия иерархии процессов и все процессы равноправны. Единственное, в чем проявляется что-то вроде иерархии процессов - создание процесса, в котором родительский процесс получает специальный маркер (так называемый дескриптор), позволяющий контролировать дочерний процесс. Но марке можно передавать другому процессу, нарушая иерархию. В UNIX это невозможно.
Состояния процесса.
Существуют три возможных состояния процесса:
○ Работающий (в этот конкретный момент использующий процессор)
○ Готовый к работе (процесс временно приостановлен, чтобы позволить выполниться другому процессу)
○ Заблокированный (процесс не может быть запущен прежде, чем произойдет некое внешнее событие)
Как показано на рисунке, между тремя этими состояниями возможны четыре перехода. Переход 1 происходит тогда, когда процесс обнаруживает, что продолжение работы невозможно. Переходы 2 и 3 вызываются частью операционной системы, названной планировщиком процессов, так что сами процессы даже не знают о существовании этих переходов. Переход 2 происходит тогда, когда планировщик решил предоставить процессор другому процессу. Переход 3 происходит, когда все остальные процессы исчерпали свое процессорное время, и процессор возвращается к первому процессу. Переход 4 происходит с появлением внешнего события, ожидавшегося процессором (например, прибытие входных данных). Если в этот момент не запущен какой-либо другой процесс, то срабатывает переход 3. Иначе, процесс будет находиться в состоянии готовности еще некоторое время.
Таблица процессов.
Для реализации модели процесса операционная система содержит таблицу (массив структур), называемую таблицей процессов, с одним элементом для каждого процесса. (Эти элементы иногда называют блоками управления процессом.) Элемент таблицы содержит информацию о состоянии процесса, счетчике команд, указателе стека, распределении памяти, состоянии открытых файлов, об распределении и использовании ресурсов, а также всю остальную информацию, которую необходимо сохранять при переключении в состояние готовности или блокировки для последующего запуска - как если бы процесс не останавливался.
В таблице представлены некоторые наиболее важные поля типичной системы. Поля в первой колонке относятся к управлению процессом. Остальные колонки описывают управление памятью и файлами. Необходимо отметить, что от конкретной системы очень сильно зависит, какие именно поля будут в таблице процессов. Но таблица, представленная выше, дает общее представление о необходимой информации.