Исторически интерфейс устройств был статическим и простым. Устройства определялись при загрузке системы и впоследствии не изменялись. Типичный дисковый драйвер мог быть написан с использованием нескольких сотен строк кода. По мере развития системы сложность систем ввода/вывода возросла с добавлением новых возможностей. Устройства могли появляться, а затем исчезать при работе системы. С возрастанием сложности и разнообразия шин ввода/вывода маршрутизация запросов ввода/вывода стала сложной. Например, в многопроцессорной среде прерывания от устройств должны направляться на наиболее подходящий процессор, который может отличаться от того, который до этого обслуживал устройство.
Логические диски могут больше не ссылаться на раздел одного физического диска, а вместо этого могут объединить несколько участков (slices) и/или разделов для создания виртуального раздела, на котором должна быть построена файловая система, охватывающая несколько дисков. Объединение таким образом разделов физических дисков в виртуальный раздел называется управлением томами. Вместо встраивания всех этих возможностей во все файловые системы или дисковые драйверы, они были абстрагированы в уровень GEOM (геометрии).
Автоконфигурирование является процедурой, выполняемой системой для обнаружения и подключения аппаратных устройств, присутствующих в системе. Исторически автоконфигурирование осуществлялось лишь однажды при загрузке системы. В современных машинах, особенно в портативных компьютерах типа laptop, устройства регулярно подключаются и отключаются во время работы компьютера. Соответственно ядро должно быть готово конфигурировать, инициализировать и делать доступным подключаемое оборудование и не производить операции с отключенным оборудованием. FreeBSD использует для управления устройствами в системе инфраструктуру драйверов устройств, которая называется newbus.
Большинство действий, связанных с доставкой сигнала потоку, выполняется в контексте этого потока. Поток проверяет свое поле td_siglist на предмет наличия ожидающих сигналов по крайней мере один раз при входе в систему, вызывая cursigQ.
SLEEPING - Поток заблокирован в ожидании события. Если поток находится в состоянии непрерываемого сна, больше ничего не должно предприниматься. В противном случае ядро может предпринять действие - либо непосредственно, либо косвенно, - пробудив поток. Есть два действия, которые можно применить непосредственно. Для сигналов, вызывающих остановку процесса, все потоки в процессе помещаются в состояние STOPPED и родительский процесс уведомляется об изменении состояния посредством отправки ему сигнала SIGCHLD.
Реализация сигналов разделена на две части, первая из которых - отправка сигнала процессу, а вторая - распознавание сигнала и доставка его потоку назначения. Сигналы может отправлять любой процесс или код, который выполняется на уровне прерывания. Доставка сигнала обычно имеет место в контексте получающего потока. Но когда сигнал форсирует остановку процесса, действие может быть проведено для всех потоков, связанных с этим процессом в тот момент, когда сигнал был отправлен.
Сигналы первоначально были спроектированы для моделирования исключительных событий, таких, как попытка пользователя завершить вышедшую из-под контроля программу. Они не предназначались для использования в качестве общего механизма межпроцессного взаимодействия, поэтому не было сделано попытки сделать их надежными. В более ранних системах каждый раз при перехвате сигнала восстанавливалось его действие по умолчанию.
Описание сигналов указывается для каждого процесса. Если процесс не указал действие на сигнал, ему предоставляется действие по умолчанию которое может быть одним из следующих: