next up previous contents index
Next: 1.2.3 Component Libraries Up: 1.2 Road Map Previous: 1.2.1 Interfaces

1.2.2 Function Libraries

The OSKit's function libraries provide basic low-level services in a traditional C-language function-oriented style. For example, the OSKit provides libraries exporting kernel bootstrap support, standard C library functions, and executable program loading. These libraries are designed to be usable and controllable in a very fine-grained manner, generally on a function-by-function basis, allowing the client OS to easily use particular library functions while leaving out or individually overriding other functions. The dependencies between library functions are minimized, as are dependencies of library functions on other libraries; where these dependencies inevitably exist, they are well-defined and explicitly exposed to the OS developer. In general, the implementation details of these libraries are intentionally exposed rather than hidden. The function libraries make only minimal use of the OSKit's object-oriented COM interfaces, instead generally defining their own function-oriented interfaces in ordinary C header files. This design strategy provides maximum power and flexibility to the OS developer at the cost of increasing the dependence of the client OS on the implementation details of the libraries; we have found this to be a good design tradeoff for the low-level OSKit facilities which usually must be customized extensively in order to fit into any particular OS environment.

Following is a summary of the function libraries currently provided by the OSKit along with the chapter numbers in which each is described:

9
liboskit_c: A simple, minimal C library which minimizes dependencies with the environment and between modules, to provide common C library services in a restricted OS environment. For example, this library provides many standard string, memory, and other utility functions, as well as a formatted I/O facility (e.g., printf) designed for easy use in restricted environments such as kernels.

10
liboskit_kern: Kernel support code for setting up a basic OS kernel environment, including providing default handlers for traps and interrupts and such. This library includes many general utilities useful in kernel code, such as functions to access special processor registers, set up and manipulate page tables, and switch between processor modes (e.g., between real and protected mode on the x86). Also includes facilities for convenient source-level remote debugging of OS kernels under development.

11
liboskit_smp: More kernel support code, this library deals with setting up a multiprocessor system to the point where it can be used by the operating system. Also (to be) included are message-passing routines and synchronization primitives, which are necessary to flush remote TLBs.

4
liboskit_com: Utility functions for handling COM interfaces, and a suite of generic wrapper components. These wrappers map one OSKit COM interface to another, or implement simple functionality such as synchronization by creating proxy COM objects that wrap the COM objects provided by more primitive components.

6
liboskit_dev: This library provides default implementations of the ``glue'' functions required by device drivers and other ``large'' encapsulated components (networking, filesystems) imported from other operating systems, running in the OSKit Device Driver (née ``fdev'') framework. (The framework's current name reveals its heritage; today, a more accurate name would be the ``OS Environment'' framework.) The default implementations of these functions are designed for simple kernels using liboskit_kern; for more elaborate kernel (or user-mode) environments, the client OS will have to override some or all of the functions in this library.

The following four libraries are provided mainly for convenience; they are not as general or as well documented as the other libraries but are still useful. See the source directories and READMEs for details.

liboskit_startup: Contains functions to start up and initialize various OSKit components, making it easier to write OSKit programs.

liboskit_unsupp: Contains various unsupported hacks and utilities.

liboskit_unix: Provides the necessary support to debug and run certain OSKit components on FreeBSD in user-mode. One can tweak this to run on Linux.

liboskit_fudp: Provides a ``Fake UDP'' implementation: a restricted send-only no-fragmenting version of UDP. This can be useful with the hpfq library (in Chapter  28).


next up previous contents index
Next: 1.2.3 Component Libraries Up: 1.2 Road Map Previous: 1.2.1 Interfaces

University of Utah Flux Research Group