Структуры данных процесса
Кроме того в Linux имеется команда, клонирующая существующий процесс. Однако при вызов clone (), в отличие отfork (), новый процесс независим от его процесса-родителя, но может разделять некоторые его ресурсы. Системный вызов clone () используется, например, когда необходимо реализовать некоторый поток (threads). Информация о статусе ввода/вывода (I/O status information). Содержит список… Читать ещё >
Структуры данных процесса (реферат, курсовая, диплом, контрольная)
При создании каждого процесса создается некоторая структура данных, называемая РСВ (Process Control Block) и иногда — таблицей процессов (Process Table), содержащая информацию, специфицирующую данный процесс. Эта таблица содержит информацию о состоянии процесса, программный счетчик, указатель стека, расположение памяти, статус открытых файлов, информацию о планировании выполнения и в обязательном порядке информацию о том, что необходимо сохранять при переключении контекста — при выгрузке процесса и что должно восстанавливаться при возобновлении процесса.
Эта информация разделяется на две категории: информация о состоянии процесса (Process State Information) и информация, управляющая процессом (Process Control Information), а именно:
- • уникальный идентификатор процесса (pid), а также указатель на pid родительского процесса, а если есть другие дочерние процессы, то и их идентификаторы;
- • состояние процесса (process state). Эта переменная может принимать значения: новый (new), готов (ready), работа (running), ожидание (waiting), остановлен (halted) и др.;
- • программный счетчик (program counter). Счетчик показывает адрес следующей команды, которую должен выполнить процесс;
- • значения регистров процессора (CPU registers). В зависимости от архитектуры процессора это могут быть значения аккумулятора, индексных регистров, указателя стека, содержание общих регистров и некоторая информация о состоянии процессора;
- • информация о планировании (CPU-scheduling information). Эта информация включает приоритет процесса, указатель на очередь планирования и т. д.;
- • информация об используемой памяти (Memory-management information). Включает в себя значение используемой и максимальной памяти, таблицу страниц, используемой памяти или таблицу сегментов в зависимости от организации памяти в ОС;
- • учетная информация (accounting information). Содержит данные о количестве CPU и их реальном времени занятости, размеры квантов времени, числе работающих процессов и т. п.;
- • информация о статусе ввода/вывода (I/O status information). Содержит список устройств I/O, занимаемых процессом, и список открытых файлов. Состав и структура такой таблицы зависят от конкретной ОС. В некоторых ОС эта информация расположена в нескольких связанных структурах данных.
Алгоритмы реализации системного вызова forkQ для ОС с пейджингом и свопингом незначительно различаются. Для успешного вызоваfork () должны быть свободная оперативная память, достаточная для размещения порожденного процесса, и другие необходимые ресурсы. Если свободных ресурсов недостаточно, то вызов fork () завершается неудачно. В следующем фрагменте кода показан пример создания дерева из семи процессов:
#include
#include
#include int main ()
{.
char pid[255]; fork (); fork () fork ();
sprintf (pid, «PID: %d «, getpid()); write (STDOUT_FILENO, pid, strlen (pid)); exit (O);
}.
Кроме системного вызоваfork () в UNIX имеется команда ехес (), однако при ее вызове работающий процесс (например, интерпретатор bash) заменяется на другой, указанный в параметре ехес (). Иными словами, загружается другая программа, но так как здесь не создается новый процесс, то предыдущая программа должна быть дублирована, с использованием вызова fork (), а затем уже вызов ехес () создает дополнительное приложение в системе.
Кроме того в Linux имеется команда, клонирующая существующий процесс. Однако при вызов clone (), в отличие отfork (), новый процесс независим от его процесса-родителя, но может разделять некоторые его ресурсы. Системный вызов clone () используется, например, когда необходимо реализовать некоторый поток (threads).
Как было отмечено выше, процессы-зомби возникают в том случае, когда процесс окончил свою работу, а запись в таблице процессов осталась. Например, процесс-родитель приостанавливает свое выполнение посредством функции waitQ. Согласно описанию этой функции, она возвращает некоторый сигнал от процесса-потомка. Однако если родительский процесс игнорирует сигнал или по каким-то причинам не получил этого сигнала, то процесс-потомок переходит в состояние зомби, когда он не может возобновиться. Возникновение таких процессов приводит к падению эффективности работы ОС, а при полностью заполненной таблице процессов может привести к невозможности создания новых процессов и краху ОС. Поскольку процессы-зомби не могут принимать сигналы, то их нельзя убить с помощью вызова kill. Убрать их может родительский процесс либо его завершение.
Кроме процессов-зомби в ОС UNIX могут возникать висячие процессы, или процессы-сироты (orphan process), для которых родительский процесс был завершен аварийно, без подачи соответствующего сигнала о завершении работы. Поскольку процессы-сироты используют системные ресурсы, то их необходимо уничтожать. Это может быть сделано посылкой специальных сигналов в методе уничтожение (extermination) либо попыткой «воскрешения» родителей или поиска других, например, более старших родителей, как в методе перевоплощение (reincarnation). Наконец, может быть использован метод лимита времени (expiration), при котором процессу урезается временная квота до момента принудительного удаления. В UNIX-подобных системах все процессы-сироты усыновляются процессом с идентификатором, равным 1, обычно это системный процесс «init». Эта операция еще называется переподчинением (reparenting) и происходит автоматически.
Анализ состояний процессов
С помощью изучения состояний, в которых находятся процессы, можно исследовать ОС. Разработчики операционных систем па основе этого анализа предложили следующую теорему.
Теорема. Эффективность ОС может быть неявно измерена или определена в результате наблюдения распределения процессов по состояниям.
Из этой теоремы вытекают следствия.
Следствие 1. Система называется ограниченной по вводу/выводу (I/O), если большое число процессов пребывает в ожидании доступа к файлам или устройствам либо ожидает завершения операций I/O.
Следствие 2. Система называется ограниченной по быстродействию, если большая часть процессов находится в очереди на выполнение, а меньшая часть в очереди к устройствам I/O.
Таким образом, сбалансированная система обладает равномерным распределением процессов по состояниям. Наблюдая состояния процессов, можно сделать вывод о том, как работает система и что необходимо сделать для оптимизации ее работы.