The kernel provides a relatively complete set of program and device driver management services. These services include general kernel extension loading and binding services and device driver binding services. Also provided are services that allow kernel extensions to be notified of base kernel configuration changes, user-mode exceptions, and system-wide process state changes.
The following information is provided to assist you in in learning more about kernel services:
The kmod_load, kmod_entrypt, and kmod_unload services provide kernel extension loading and binding services. The sysconfig subroutine makes these services available to user-mode programs. However, kernel-mode callers executing in a kernel process environment can also use them. These services provide the same kernel object-file load, unload, and query functions provided by the sysconfig subroutine as well as the capability to obtain a module's entry point with the kernel module ID assigned to the module.
The kmod_load, kmod_entrypt, and kmod_unload services can be used to dynamically alter the set of routines loaded into the kernel based on system configuration and application demand. Subsystems and device drivers can use these services to load large, seldom-used routines on demand. Device driver binding services include the devswadd, devswdel, devswqry services, which are used to add or remove a device driver entry from the dynamically managed device switch table. They also query for information concerning a specific entry in the device switch table.
Some kernel extensions may be sensitive to the settings of base kernel runtime configurable parameters that are found in the var structure defined in the /usr/include/sys/var.h file. These parameters can be set during system boot or runtime by a privileged user performing system configuration commands that use the sysconfig subroutine to alter values in the var structure. Kernel extensions may register or remove a configuration notification routine with the cfgnadd and cfgndel kernel services. This routine is called each time the sysconfig subroutine is used to change base kernel tunable parameters found in the var structure.
In addition, the prochadd and prochdel kernel services allow kernel extensions to be notified when any process in the system has a state transition, such as being created, exiting, being swapped in or swapped out. The uexadd and uexdel kernel services give kernel extensions the capability to intercept user-mode exceptions. These user-mode exception handlers may use this capability to dynamically reassign access to single-use resources or to clean up after some particular user-mode error. The associated uexblock and uexclear services can be used by these handlers to block and resume process execution when handling these exceptions.
The pio_assist and getexcept kernel services are typically used by device drivers to obtain detailed information about exceptions that occur during I/O bus access. The getexcept service can also be used by any exception handler requiring more information about an exception that has occurred. The selreg kernel service is used by file select operations to register unsatisfied asynchronous poll or select event requests with the kernel. The selnotify kernel service replaces the traditional operating system's selwakeup kernel function and is used by device drivers supporting the poll or select subroutines when asynchronous event notification is requested. The iostadd and iostdel services are used by tty and disk device drivers to register device activity reporting structures to be used by the iostat and vmstat commands.
Finally, the getuerror and setuerror services can be used by kernel extensions that provide or use system calls to access the u t _error field for the current process thread's uthread structure . This is typically used by kernel extensions providing system calls to return error codes, and is used by other kernel extensions to check error codes upon return from a system call (since there is no errno global variable in the kernel).
The Kernel Program/Device Driver Management kernel services are:
|cfgnadd||Registers a notification routine to be called when system-configurable variables are changed.|
|cfgndel||Removes a notification routine for receiving broadcasts of changes to system configurable variables.|
|devdump||Calls a device driver dump-to-device routine.|
|devstrat||Calls a block device driver's strategy routine.|
|devswadd||Adds a device entry to the device switch table.|
|devswchg||Alters a device switch entry point in the device switch table.|
|devswdel||Deletes a device driver entry from the device switch table.|
|devswqry||Checks the status of a device switch entry in the device switch table.|
|getexcept||Allows kernel exception handlers to retrieve additional exception information.|
|getuerror||Allows kernel extensions to retrieve the current value of the u_error field.|
|iostadd||Registers an I/O statistics structure used for updating I/O statistics reported by the iostat subroutine.|
|iostdel||Removes the registration of an I/O statistics structure used for maintaining I/O statistics on a particular device.|
|kmod_entrypt||Returns a function pointer to a kernel module's entry point.|
|kmod_load||Loads an object file into the kernel or queries for an object file already loaded.|
|kmod_unload||Unloads a kernel object file.|
|pio_assist||Provides a standardized programmed I/O exception handling mechanism for all routines performing programmed I/O.|
|prochadd||Adds a systemwide process state-change notification routine.|
|prochdel||Deletes a process state change notification routine.|
|selreg||Registers an asynchronous poll or select request with the kernel.|
|selnotify||Wakes up processes waiting in a poll or select subroutine or the fp_poll kernel service.|
|setuerror||Allows kernel extensions to set the u_error field in the u area.|
|uexadd||Adds a systemwide exception handler for catching user-mode process exceptions.|
|uexblock||Makes a process nonrunnable when called from a user-mode exception handler.|
|uexclear||Makes a process blocked by the uexblock service runnable again.|
|uexdel||Deletes a previously added system-wide user-mode exception handler.|
The iostat command, vmstat command.