In BSD, these parameters are generally objects in a
management information base (MIB) that describe tunable limits such as the size of a shared memory segment, the number of threads the operating system will use as an
NFS client, or the maximum number of processes on the system; or describe, enable or disable behaviors such as
IP forwarding, security restrictions on the
superuser (the "securelevel"), or debugging output. In
OpenBSD and
DragonFly BSD, sysctl is also used as the transport layer for the
hw.sensors framework for
hardware monitoring, whereas
NetBSD uses the
ioctl system call for its
sysmon envsys counterpart. Both sysctl and ioctl are the two
system calls which can be used to add extra functionality to the
kernel without adding yet another
system call; for example, in 2004 with OpenBSD 3.6, when the
tcpdrop utility was introduced, sysctl was used as the underlying system call. In
FreeBSD, although there is no sensors framework, the individual temperature and other sensors are still commonly exported through the sysctl tree through
Newbus, for example, as is the case with the aibs(4) driver that's available in all the 4 BSD systems, including FreeBSD. In BSD, a
system call or system call wrapper is usually provided for use by programs, as well as an administrative program and a configuration file (for setting the tunable parameters when the system
boots). This feature first appeared in
4.4BSD. It has the advantage over hardcoded constants that changes to the parameters can be made dynamically without
recompiling the kernel. Historically, although kernel variables themselves could be modified through sysctl, the elements comprising the
MIB of the sysctl tree were hardcoded at compile time, and as of 2019, it's mostly still the case in OpenBSD (with some exceptions like
hw.sensors, which manages and provides its own dynamic subtree). FreeBSD has had "sysctl internal magic" for dynamic sysctl tree management since 1995; NetBSD has had its own implementation of a dynamic sysctl tree since December 2003. ==Linux==