BSD, Процессы, Управление

Отладка процессов

FreeBSD предусматривает упрощенную возможность управления и отладки выполнения процесса. Эта возможность, доступ к которой осуществляется посредством системного вызова ptrace, позволяет родительскому процессу контролировать выполнение порожденного процесса, манипулируя состоянием выполнения режимов пользователя и ядра. В частности, с помощью ptrace родительский процесс может выполнить в отношении порожденного процесса следующие операции:

Управление заданиями

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

Сеансы

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

Группы процессов и сеансы

Группа процессов является совокупностью связанных процессов, таких, как конвейер оболочки, каждому из которых присвоен один и тот же идентификатор группы про­цессов. Идентификатор группы процессов равен PID начального участника группы процессов; таким образом, идентификаторы группы процессов разделяют пространст­во имен идентификаторов процессов. Когда создается новая группа процессов, ядро выделяет структуру группы процессов, которая будет с ней связана. Эта структура группы процессов записывается в хеш-таблицу таким образом, чтобы ее можно было быстро найти.

Завершение процесса – системный вызов exit

Процессы завершаются либо добровольно - посредством системного вызова exit, либо непреднамеренно - в результате сигнала. В любом случае завершение процесса вызы­вает возвращение кода состояния родителю завершающегося процесса (если родитель все еще существует). Это состояние завершения возвращается посредством системно­го вызова wait4. Вызов wait4 дает приложению возможность запрашивать состояние как остановленных, так и завершенных процессов.

Создание процесса - системный вызов fork

В FreeBSD новые процессы создаются с помощью семейства системных вызовов fork. Системный вызов fork создает полную копию родительского процесса. Системный вызов rfork создает элемент нового процесса, который вместо копирования всего раз­деляет со своим родителем выбранный набор ресурсов. Системный вызов vfork отличается от fork в том, как рассматриваются ресурсы виртуальной памяти; vfork гарантирует также, что родитель не будет запущен до тех пор, пока порожденный про­цесс не выполнит системный вызов либо exec, либо exit.

Планировщик ULE детали работы

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

Планировщик ULE

Планировщик ULE был разработан как часть пересмотра FreeBSD для поддержки SMP. Новый планировщик был разработан по нескольким причинам.

Очереди выполнения потоков и переключение контекста

У ядра есть один набор очередей выполнения для управления всеми классами пла­нирования потоков. Вычисления приоритета планирования, используются для упорядочения набора потоков с разделением времени в диапазоне приоритетов между 160 и 223. Приоритеты потоков реального времени и ожидания устанавливаются самими приложениями, но их значе­ния ограничиваются ядром диапазонами от 128 до 159 и от 224 до 255 соответственно. Число очередей, используемых для хранения совокупности всех готовых к выполне­нию потоков в системе, влияет на стоимость управления очередями.

Планирование потоков с разделением времени

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

RSS-материал