Материал: 6261

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

166

SIGQUIT Сигнал 3 — QUIT — выход; при нажатии Ctrl-\.

SIGTERM Сигнал 15 — TERMinate — прекратить: требует немедленного прекращения работы процесса.

SIGKILL Сигнал 9 — KILL — убить: ни одна программа не может перехватить или игнорировать этот сигнал.

Для просмотра номеров PID и состояний процессов используются ряд утилит.

ps

Process status — состояние процессов. Выводит на консоль список

 

процессов, включая PID. Формат вывода зависит от используемых ключей.

top

Интерактивная программа, соответствующая вызову ps -aux, отображающая

 

процессы в порядке уменьшения потребляемого ими процессорного

 

времени. Перед списком процессов выводится статистика различных

 

характеристик задач и потребляемых ими ресурсов ЭВМ.

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

Пользователь может изменять приоритет выполняемых процессов используя уровни тактичности.

Тактичность — целочисленное значение влияющее на количество процессорного времени, выделяемого процессу относительно других процессов.

В Linux, значения тактичности лежат в пределах от -20 до +20: -20 — максимальный приоритет; +20 — минимальный приоритет.

Обычный процесс при запуске получает приоритет 0.

Чтобы запустить процесс с измененной тактичностью, используется команда:

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

Для изменения приоритетов запущенных процессов, используется команда:

renice приращение [[ -p ] PID... ] [[ -g ] PGRP...] [[ -u ] username]

Замечание

Повышать приоритет процессов может только пользователь root.

Для управления процессами также используются команды: прерывания — нажатие клавиш Ctrl-Z;

bg — перевод процесса в фоновый режим;

fg — перевод процесса в приоритетный режим.

167

6.9 Системные вызовы ОС по управлению процессами

Изучив управление процессами на макроуровне, что позволяет нам успешно использовать системные и прикладные средства работы с ОС, рассмотрим основные возможности самого процесса влиять на себя и другие процессы.

Сам процесс самостоятельно способен реализовать лишь некоторый набор алгоритмов по обработке данных, которые ему доступны непосредственно: объявленные переменные, массивы, структуры и подобное.

Максимально, самостоятельные возможности процесса можно расширить до уровня возможностей всех библиотек, которые он использует.

Весь другой функциональный потенциал процесса обеспечивается:

•напрямую, посредством системных вызовов к ядру ОС;

•косвенно, посредством взаимодействия с другими процессами, которое также

осуществляется через ядро ОС.

Таким образом, управление процессом из него самого:

•осуществляется посредством системных вызовов к ядру ОС;

•определяется свойствами самого процесса в системе.

Основные свойства процесса:

•уникальная идентификация (PID) и наличие контекста в ядре ОС;

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

•существование в оперативной памяти ЭВМ, выделенной для пользовательского режима работы ОС;

•сегментация структуры: сегмент кода, сегменты инициализированных и не-

инициализированных данных, а также по одному сегменту стека на каждую нить (thred) процесса.

Воздействуя на каждое из свойств процесса, можно управлять им.

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

Чтобы упорядочить и, по возможности, минимизировать тупиковые ситуации между поцессами, системные вызовы к ядру ОС группируются, как было ранее показано на рисунке 6.2, на три большие части:

•планировщик, отслеживающий контест процесса и его «жизненный цикл»;

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

•подсистему взаимодействия процессов, в которую кроме сигналов включа-

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

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

168

Системный вызов fork(…) - обеспечивает порождение нового (дочернего процесса). В случае неудачи, возвращает -1.

Дочерний процесс получает 0.

Родительский процесс получает PID дочернего процесса. Системный вызов:

#include <unistd.h> pid_t fork(void);

Системный вызов _exit(…) - обеспечивает завершение процесса, вызвавшего его, удаляет PID процесса из таблицы (списка) процессов и передает родительскому процессу значение статуса завершения.

#include <unistd.h> void _exit(int status);

Системный вызов wait(…) - используется родительским процессом для ожидания завершения дочернего процесса и получения его PID.

#include <sys/types.h>

#include <sys/wait.h> pid_t wait(int *status);

Системный вызов exec(…) - обеспечивает различные варианты вызовов для модификации процесса.

#include <unistd.h> extern char **environ;

int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg,

..., char * const envp[]);

int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[],

char *const envp[]);

Замечание

Внешняя переменная (двойной указатель) environ обеспечивает доступ к переменным среды пользователя.

169

6.10Подсистема управления оперативной памятью

Вактивной форме (выполняться) процесс может только в оперативной памяти ЭВМ или ОЗУ.

ОЗУ — оперативное запоминающее устройство, которое часто называют основной памятью (ОП) ЭВМ.

Причина такой ситуации хорошо продемонстрирована на рисунке 6.8, где показано, что процессор:

•может выполнять только команды, находящиеся в оперативной памяти ЭВМ;

•взаимодействует с ОП через блок управления памятью (MMU).

MMU — Memory Managment Unit — устройство управления памятью.

Рисунок 6.8 — Управление памятью ЭВМ

Замечание

В ЭВМ, которые не имеют аппаратной реализации MMU, выполняется эмуляция его работы программой, находящейся в некоторой области ОП.

Назначение MMU — преобразование для процессора логических адресов ОП в

физические и — обратно.

Цель функционирования MMU — создание для нужд процессора виртуального (относительного) пространства памяти, в котором он работает.

Необходимость подобной аппаратной (или программно-эмулируемой) архитектуры ЭВМ вызвана потребностью:

•реализации для ОС мультипрограммного режима работы, требующего переносимости в адресном пространстве ОП кода и данных процессов;

•использования для целей программирования языков высокого уровня, например, языка С, которые используют символьные имена переменных не привязанных к абсолютным адресам ОП.

170

Относительность физической адресации ОП обеспечивается ее сегментной или

страничной организацией и в данной части дисциплины не рассматривается.

Относительность логической адресации процессора обеспечивается, например, для процессоров x86, наличием:

•сегментных регистров CS, DS, ES и SS, которые ссылаются на строки дескрипторных таблиц памяти, содержащих адреса начала сегментов памяти;

•регистров смещений IP, AX, BX, CX и других, адресующих ОП относитель-

но начала соответствующих сегментов

Относительность логической адресации процесса обеспечивается, как показано на рисунке 6.9:

•транслятором исходного текста программы, создающим объектный код программы с относительной адресацией;

•перемешающим загрузчиком, привязывающим части кода и данных процесса к конкретным адресам ОП.

Рисунок 6.9 — Виртуальные адреса процесса

Замечание

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

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

Источник: https://studfile.net/preview/16438529/