FreeBSD предусматривает упрощенную возможность управления и отладки выполнения процесса. Эта возможность, доступ к которой осуществляется посредством системного вызова ptrace, позволяет родительскому процессу контролировать выполнение порожденного процесса, манипулируя состоянием выполнения режимов пользователя и ядра. В частности, с помощью ptrace родительский процесс может выполнить в отношении порожденного процесса следующие операции:
Управление заданиями является возможностью, впервые предоставленной оболочкой С, а сегодня предоставляемой большинством оболочек. Оно позволяет пользователю управлять деятельностью групп процессов, называемых заданиями (jobs). Наиболее важными средствами, предоставляемыми управлением заданиями, являются возможности приостанавливать и повторно запускать задания и осуществлять мультиплексирование доступа к терминалу пользователя. Управление терминалом в одно и то же время предоставляется лишь одному заданию, которое может читать с терминала и записывать в него.
Сеанс является набором одной или более групп процессов и может быть связан с устройством терминала. Основным использованием для сеансов является соединение в одно целое оболочки регистрации пользователя и заданий, которые он запускает, и создание изолированного окружения для процесса демона и его потомков. Любой процесс, не являющийся уже лидером группы процессов, может создать сеанс, используя системный вызов setsid и становясь лидером сеанса и единственным членом сеанса.
Группа процессов является совокупностью связанных процессов, таких, как конвейер оболочки, каждому из которых присвоен один и тот же идентификатор группы процессов. Идентификатор группы процессов равен PID начального участника группы процессов; таким образом, идентификаторы группы процессов разделяют пространство имен идентификаторов процессов. Когда создается новая группа процессов, ядро выделяет структуру группы процессов, которая будет с ней связана. Эта структура группы процессов записывается в хеш-таблицу таким образом, чтобы ее можно было быстро найти.
Процессы завершаются либо добровольно - посредством системного вызова exit, либо непреднамеренно - в результате сигнала. В любом случае завершение процесса вызывает возвращение кода состояния родителю завершающегося процесса (если родитель все еще существует). Это состояние завершения возвращается посредством системного вызова wait4. Вызов wait4 дает приложению возможность запрашивать состояние как остановленных, так и завершенных процессов.
В FreeBSD новые процессы создаются с помощью семейства системных вызовов fork. Системный вызов fork создает полную копию родительского процесса. Системный вызов rfork создает элемент нового процесса, который вместо копирования всего разделяет со своим родителем выбранный набор ресурсов. Системный вызов vfork отличается от fork в том, как рассматриваются ресурсы виртуальной памяти; vfork гарантирует также, что родитель не будет запущен до тех пор, пока порожденный процесс не выполнит системный вызов либо exec, либо exit.
Как уже было сказано, планировщик ULE создает набор из трех очередей для каждого процессора в системе. Одна из очередей является очередью простоя, в которой размещаются все простаивающие потоки. Следующие две очереди определены как текущая и следующая. Потоки отбираются на выполнение в порядке приоритетов из текущей очереди, пока она не станет пустой, в этот момент текущая и следующая очереди меняются местами и планирование начинается снова.
Планировщик ULE был разработан как часть пересмотра FreeBSD для поддержки SMP. Новый планировщик был разработан по нескольким причинам.
У ядра есть один набор очередей выполнения для управления всеми классами планирования потоков. Вычисления приоритета планирования, используются для упорядочения набора потоков с разделением времени в диапазоне приоритетов между 160 и 223. Приоритеты потоков реального времени и ожидания устанавливаются самими приложениями, но их значения ограничиваются ядром диапазонами от 128 до 159 и от 224 до 255 соответственно. Число очередей, используемых для хранения совокупности всех готовых к выполнению потоков в системе, влияет на стоимость управления очередями.
Алгоритм планирования FreeBSD с разделением времени основан на многоуровневых очередях с обратной связью. Система регулирует приоритет потока динамически, чтобы отражать потребности в ресурсах (например, блокирование в ожидании события) и объем потребляемых потоком ресурсов (например, время процессора). Потоки перемещаются между очередями выполнения, основываясь на их приоритетах планирования (отсюда слово обратная связь в названии многоуровневая очередь с обратной связью).