Реализация системного вызова jail проста. Выделяется и заполняется предоставленными аргументами структура данных prison}. Структура prison связывается со структурой процесса вызывающего процесса. Значение счетчика ссылок структуры prison устанавливается в единицу, и для установки корневого каталога тюрьмы осуществляется системный вызов chroot. После своего создания структура prison не может быть изменена.
Ловушки в коде, реализующем создание и разрушение процесса, поддерживают счетчик ссылок на структуру prison и освобождают ее при освобождении последней ссылки. Любые новые процессы, созданные процессом в тюрьме, унаследуют ссылку на структуру prison, что помещает новый процесс в ту же самую тюрьму.
Потребовались некоторые изменения для ограничения видимости и взаимодействия процессов. Интерфейсы ядра, сообщающие о работающих процессах, были изменены, чтобы сообщать лишь о процессах, находящихся в той же самой тюрьме, что и запрашивающий процесс. Определение того, может ли один процесс отправить сигнал другому, основывается на значениях UID и GID отправляющего и получающего процессов. При наличии тюрьмы ядро добавляет требование, чтобы получающий процесс находился в той же самой тюрьме, если отправляющий процесс заключен в тюрьму.
Несколько изменений было добавлено в реализацию работы в сети.
Потребовалось изменить драйверы устройств для совместно используемых устройств, такие, как драйвер псевдотерминала, чтобы обеспечить невозможность доступа к определенному терминалу в одно и то же время более чем из одной тюрьмы.
Простейшим, но наиболее утомительным изменением была проверка всего ядра на предмет наличия мест, допускавших дополнительные привилегии суперпользователя. Лишь 35 из 300 проверенных в FreeBSD 5.2 были открыты для заключенных в тюрьму процессов, работающих с привилегиями суперпользователя. Поскольку по умолчанию находящиеся в тюрьме суперпользователи не получают привилегий, новый код или драйверы автоматически оказываются осведомленными о тюрьме: они будут отвергать привилегии суперпользователей, находящихся в тюрьме
Вычисления приоритета, использованные в алгоритме кратковременного планирования, разбросаны в различных частях системы. Периодически запускаются две процедуры, schedcpuQ и roundrobinQ. SchedcpuQ пересчитывает приоритеты потоков раз в секунду, используя формулу 4.2, и обновляет значение kg_slptime для потоков, заблокированных вызовом sleepQ. Процедура roundrobinQ запускается 10 раз в секунду и заставляет систему перепланировать потоки в (непустой) очереди с самым высоким приоритетом в режиме карусели, что дает каждому потоку квант времени в 100 миллисекунд.
Система поддерживает простую форму учета использования ресурсов. По завершении каждого процесса учетная запись, описывающая использованные этим процессом ресурсы, записывается в системный файл учета.
FreeBSD реализует возможность setgid путем установки в нулевом элементе массива дополнительных групп процесса, который выполняет программу setgid, значения группы этого файла. После этого можно проверять права доступа, как если бы это был обычный процесс. Из-за дополнительной группы программа setgid может иметь возможность доступа к большему количеству файлов, чем процесс пользователя, запускающий программу без этой особой привилегии.
Часто пользователю нужно предоставить дополнительные ограниченные привилегии. Например, пользователь, который хочет отправить сообщение, должен иметь возможность добавить сообщение в почтовый ящик другого пользователя. Разрешение записи в почтовый ящик назначения для всех пользователей дало бы возможность пользователю, не являющемуся владельцем ящика, изменять в нем сообщения (злонамеренно или неумышленно). Чтобы решить эту проблему, ядро допускает создание программ, которым предоставляются при их выполнении дополнительные привилегии.
Часто желательно на всех машинах сети поддерживать одно и то же время. Можно также поддерживать более точное время, чем возможно от базовых часов процессора. Например, без труда доступно оборудование, прослушивающее ряд радиостанций, рассылающих в Соединенных Штатах синхронизирующие сигналы UTC. Когда процессы на различных машинах приходят к соглашению относительно общего времени, им нужно изменить часы процессора своего хоста, чтобы согласовать их с сетевым значением времени.