Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
30-35.docx
Скачиваний:
9
Добавлен:
26.09.2019
Размер:
125.43 Кб
Скачать

35. Процессы в системах Unix (Linux). Атрибуты процесса. Жизненный цикл процесса.

Сигналы. Получение списка процессов. Приоритет и nice-число

Основные информационные структуры, используемые процессами

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

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

Информация дескриптора

  • слово состояния процесса;

  • приоритет;

  • величина кванта времени, выделенного системным планировщиком;

  • степень использования системным процессором;

  • признак диспетчеризации;

  • идентификатор пользователя, которому принадлежит процесс;

  • эффективный идентификатор пользователя (от имени кого запущен процесс);

  • реальный и эффективный идентификаторы группы;

  • группа процесса;

  • идентификатор процесса и идентификатор родительского процесса;

  • размер образа, размещаемого в области подкачки;

  • размер сегментов кода и данных.

Атрибуты процесса

  • PID - уникальный идентификационный номер - подобно номеру карточки социального страхования, фактическое значение PID большой роли не играет.

  • РРID - идентификатор своего родительского процесса – в UNIX новый процесс создается путем клонирования одного из уже существующих процессов, после чего текст клона заменяется текстом программы, которую должен выполнять процесс.

  • UID – это идентификационный номер пользователя, создавшего данный процесс.

  • EUID – это «эффективный» UID процесса. ЕUID используется для того, чтобы определить, к каким ресурсам и файлам у процесса есть право доступа. У большинства процессов UID и ЕUID будут одинаковыми. Исключение составляют программы, у которых установлен бит смены идентификатора пользователя.

  • GID – это идентификационный номер группы данного процесса.

  • EGID -это «эффективный» GID процесса - связан с GID так же, как ЕUID с UID.

  • Приоритет - от приоритета процесса зависит, какую часть времени центрального процессора он получит. Выбирая процесс для выполнения, ядро находит процесс с самым высоким «внутренним приоритетом».

  • Значение nice - это число показывает степень «уступчивости» процесса.

Жизненный цикл процесса

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

    1. у нового процесса свой PID;

    2. PPID нового процесса равен PID родителя;

    3. учетная информация нового процесса обнулена;

    4. у нового процесса имеется свой собственный экземпляр дескрипторов файлов.

  2. Процессы, выполняющие разные программы, образуются благодаря применению имеющихся в стандартной библиотеке Unix функций «семейства exec»: execl, execlp, execle, execv, execve, execvp. Эти функции отличаются форматом вызова, но в конечном итоге делают одну и ту же вещь: замещают внутри текущего процесса исполняемый код на код, содержащийся в указанном файле.

  3. Когда процесс завершается, он вызывает подпрограмму _exit, чтобы уведомить ядро о своей готовности «умереть». В качестве параметра подпрограмме _exit передается код завершения – целое число, указывающее на причину завершения процесса. По соглашению нулевой код завершения означает, что процесс был «успешным».

  1. Код завершения необходим родительскому процессу, поэтому ядро должно хранить его, пока родительский процесс не запросит его системным вызовом wait. Дело в том, что когда процесс завершается, его адресное пространство освобождается, время центрального процессора этому процессу не выделяется, однако в таблице процессов ядра запись о нем сохраняется. Процесс в этом состоянии называют «зомби».

Сигналы (необходимость использования)

  • прекращение выполнения программы в результате ошибочного действия, неправильного исходного параметра или если программа больше не нужна;

  • временная остановка процесса;

  • получение информации для системной программы, например, об изменении важного файла;

  • пересылка сообщения между двумя процессами, один из которых сообщает второму, что он закончил выполнение какого-то определенного задания.

Реакция на сигнал

  • игнорировать сигнал (Все работает так, как будто ничего не случилось);

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

  • интерпретировать сигнал согласно процедурам, установленным по умолчанию (Чаще всего процесс должен прекратить работу. В большинстве случаев это означает немедленное его завершение, но сигналы STOP, TSTP, ТТIN, ТТОU только задерживают его работу, которая может быть продолжена сигналом СОNT).

Пример сигналов: HUP-Hangup. Этот сигнал получает программа, которая запускается сразу же при входе пользователя в систему, если пользователь выходит из системы или прерывается связь с терминалом. Эта программа отправляет сигнал HUP всем процессам, которые находятся под ее контролем и затем сами закрываются.

Получение списка процессов: ps aux

  • PID(Process ID) - ID процесса, или номер процесса – внутренний идентификатор текущей программы.

  • TTY - управляюший терминал процесса. Выдаются только последние буквы имени файла устройства без начальной части (dev/tty).

  • STAT - статус (аналог состояния) процесса:

    • R - процесс в состоянии выполнения;

    • S - процесс в состоянии ожидания;

    • D - непрерываемое ожидание;

    • T - выполнение процесса остановлено сигналом;

    • Z - зомби;

    • W - процесс временно полностью выгружен из памяти;

    • N - процесс сниженного приоритета.

  • TIME - потребовавшееся на данный момент время расчета. Не учитываются периоды ожидания ввода данных и время, затребованное планировщиком для работы других процессов.

Команда nice (установка приоритета процесса)

Синтаксис:

nice [-n приоритет] [-приоритет] команда [аргумент]]

Команда nice увеличивает значение niсе value на 10 (или другое заданное значение приоритета) и запускает команду, которой и передается указанный аргумент.

Пример. В BSD Unix значение приоритета является целым числом от -20 до +20: -20 относится к самым приоритетным процессам, а +20 - к процессам наименьшей приоритетности. Умалчиваемое значение приоритета (если не используется nice) равно 0.

Изменение приоритета процесса:

renice +[-]значение PID_процесса

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]