Next: 1.3 Overall Design Principles
Up: 1.2 Road Map
Previous: 1.2.2 Function Libraries
Finally, the OSKit's component libraries
provide generally higher-level functionality
in a more standard, coarse-grained, object-oriented
``black box'' design philosophy.
Although the OSKit's ``components''
are also packaged into ordinary link libraries by default,
their structure represents more of a component-oriented design
than a traditional C function-oriented design.
In contrast with the OSKit's function libraries,
the component libraries
typically export relatively few public entrypoints
in comparison to the amount of functionality provided.
For example, in the Linux and BSD device driver component libraries
(see Chapters 29 and 30),
each entire device driver is represented by
a single function entrypoint
which is used to initialize and register the driver as a whole.
The client OS generally interacts with these components
through the OSKit's object-oriented COM interfaces,
allowing many components and instances of components
to coexist and interact as defined by the OS developer.
This design strategy has proven to be most appropriate
when incorporating large chunks of existing code
from existing systems such as BSD and Linux,
where it is more important
to hide the details of the original environment
than to provide the most flexibility.
Following is a summary of
the component libraries currently provided by the OSKit
along with the chapter numbers in which each is described:
- POSIX emulation and libraries
- 13
- liboskit_freebsd_c:
Complete POSIX-like C library derived from FreeBSD,
providing both single- and multithreaded configurations.
This library is an alternative to the minimal C library
liboskit_c (above), intended for programs that use
substantial POSIX-like functionality or need thread-safety.
The FreeBSD ``system call'' layer is replaced with glue code
that uses the OSKit COM interfaces, while the higher-level
code is mostly unchanged from that found in FreeBSD.
- 14
- liboskit_freebsd_m:
Complete standard math library (taken from FreeBSD's libm).
The functions in this library will commonly be needed by programs
that use floating point.
- Memory management
- 15
- liboskit_lmm:
A flexible memory management library
that can be used to manage either physical or virtual memory.
This library supports many special features needed by OS-level code,
such as multiple memory types, allocation priorities,
and arbitrary alignment and placement constraints for allocated blocks.
- 16
- liboskit_amm:
The Address Map Manager library manages collections of resources
where each element of a collection has a name (address) and some set of
attributes.
Examples of resources that might be managed by address maps include
swap space and process virtual address space.
- 17
- liboskit_svm:
The Simple Virtual Memory library uses the AMM library
to define a simple virtual-memory interface for a single
address space that can provide memory protection and paging
to a block device such as a disk partition.
(unsupported/redzone.c provides a stack redzone
for single-threaded kernels, without all of SVM.)
- Threads, synchronization, and scheduling
- 18
- liboskit_threads:
This library provides support for multithreaded kernels,
including POSIX threads, synchronization, scheduling,
and stack guards.
Scheduling policies are the standard POSIX Round-Robin
and FIFO.
Experimental support for CPU inheritance scheduling, a hierarchical
framework for arbitrary scheduling policies, is also provided,
although not integrated or robust. Provided policies include
rate-monotonic, stride (WFQ), and lottery scheduling.
- Development aids
- 19
- liboskit_memdebug:
This library provides debugging versions of malloc et al that
check for a variety of bugs related to memory-allocation (overruns,
use of freed blocks, etc).
- 20
- liboskit_gprof:
Run-time support code for an OSKit kernel to collect profiling
data about itself and report it at the end of a run. Profiling
data can be collected for kernel code compiled with the ``-pg''
option (as for use with Unix gprof),
and profiled ``_p'' versions of all OSKit libraries are provided
to profile OSKit code used by the application kernel.
- Simple disk/file reading and loading
- 21
- liboskit_diskpart:
A generic library
that recognizes various common disk partitioning schemes
and produces a complete ``map'' of the organization of any disk.
This library provides a simple way for the OS
to find relevant or ``interesting'' disk partitions,
as well as to easily provide high-level access
to arbitrary disk partitions through various naming schemes;
BSD- and Linux-compatible naming mechanisms are provided as defaults.
- 22
- liboskit_fsread:
A simple read-only file system interpretation library
supporting various common types of file systems
including BSD FFS, Linux ext2fs, and MINIX file systems.
This library is typically used
in conjunction with the partition library
to provide a convenient way for the OS
to read programs and data off of hard disks or floppies.
Again, this functionality is often needed at boot time
even in operating systems that otherwise would not require it.
This code is also extremely useful in constructing boot loaders.
- 23
- liboskit_exec:
A generic executable interpreter and loader
that supports popular executable formats such as a.out and ELF,
either during bootstrap or during general operation.
(Even microkernel systems,
which normally don't load executables,
generally
must have a way to load the first user-level program;
the OSKit's small, simple executable interpreter
is ideally suited to this purpose.)
- Filesystem implementations
- 24
- liboskit_linux_fs:
Encapsulated Linux 2.0.29 filesystem code.
Includes the Linux VFS layer supporting
ext2fs, the primary Linux filesystem,
as well as numerous other PC filesystems supported under Linux.
- 25
- liboskit_netbsd_fs:
Encapsulated NetBSD 1.2 filesystem code.
Includes the BSD VFS layer supporting the local FFS
filesystem.
- Networking implementations
- 26
- liboskit_freebsd_net:
Encapsulated FreeBSD 2.1.7.1 networking code.
Includes socket layer and protocol support
wrapped to use the OSKit's framework.
- 27
- liboskit_bootp:
This library provides a simple interface for performing the BOOTP
protocol (RFC 1048/1533) on Ethernet devices to retrieve a
canonical set of parameters from a server, based on the client's
Ethernet hardware address.
- 28
- liboskit_hpfq:
This library provides hierarchical proportional-share control
of outgoing network link bandwidth, described in the Bennet/Zhang
SIGCOMM'96 paper.
- Device driver implementations
- 29
- liboskit_linux_dev:
Encapsulated Linux 2.0.29 device driver set.
Currently includes over 50 block (SCSI, IDE) and network drivers
wrapped to use the OSKit's device driver framework.
See the source file linux/dev/README for a list of devices and
their status.
- 30
- liboskit_freebsd_dev:
Encapsulated FreeBSD 2.1.7.1 device driver set.
Currently includes eight TTY
(virtual console and serial line, including mouse) drivers
wrapped to use the OSKit's device driver framework.
- Video and window manager implementations
- 31
- liboskit_wimpi:
Simple hierarchical windowing system based on MGR, with only simple
drawing and window management operations.
- 32
- liboskit_*video*:
Basic video support, with two implementations: one encapsulating
all of SVGALIB 1.3.0, and one based on XFree86 3.3.1, but with only the
S3 driver currently supported.
We also provide support for X11 clients.
Next: 1.3 Overall Design Principles
Up: 1.2 Road Map
Previous: 1.2.2 Function Libraries
University of Utah Flux Research Group