1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
|
OSKIT 0.50 July 12, 1996
First version released to the public.
OSKIT 0.60 September 1, 1996
Significant changes from above, publically distributed.
OSKIT 0.95 June 29, 1998
Huge changes and additions.
Distributed to a few sites, but not widely.
OSKIT 0.96 December 18, 1998
Modest changes from above, publically distributed.
OSKIT 0.97 January 15, 1999
Many thread library fixes and improvements. CPU inheritance
scheduling is much more stable, as is the generic threads code.
Restructuring of the minimal C library and FreeBSD C libraries. The
syscall to COM layer was split out into a separate library (see the
posix directory). Both C libraries now use the posix library for the
COM layer calls.
Fixes to the FreeBSD ISA device drivers. Now operational, and can be
used to provide a proper console TTY device that does cooked input.
See the example program console_tty.c in examples/x86/extended,
which demonstrates how to initialize a console TTY device and have
the FreeBSD C library make use of it. (was patch1)
Changes to how boot options are handled; OSKit programs no longer
see booting-options, such as "-h" or "-d", in argv. These are now
stored in the oskit_bootargv array. This is to make porting Unix
programs to the OSKit easier since they do not need to have special
OSKit code to tweak argv. Syntax is documented at the end of the
Intro chapter.
Small stuff, including:
-Changes to support Kaffe.
-Add a #define for _OSKIT_VERSION in oskit/version.h.
-Some new files in preparation for importing secure filesystem and
networking components.
-Doc arg syntax for mk*image scripts, in their comments.
Various bug fixes, including:
-Fixed remote GDB code so function calls from GDB work correctly.
-Linux ext2fs fixes
-lmm assert fix
-fix sleep record leak in linux/dev
-mklinuximage upgraded to match other mk* scripts
-Bad linuxboot.bin.good replaced with good uuencoded linuxboot.bin.uue.
Snapshot oskit-990402 April 2, 1999
The main reason we're making this snapshot is to get out the new
support for running OSKit kernels in emulation mode on top of Linux
(previously it only ran on FreeBSD). Linux users with their own
OSKit kernels please give it a whirl and report back.
See doc/unix-support.tex for details; search for "Linux".
A number of modest changes and fixes are contained in this snapshot:
Unix Mode emulation:
-Added support for building and running the unix emulation
package on Linux (ELF) and Freebsd 3.0 (a.out and ELF).
-Simplified the libraries and link lines in the makefiles so
that building an oskit kernel under Unix mode is easier to do.
-Added code to several of the example kernels (socket_bsd,
http_proxy) to demonstrate the use of Unix mode options.
Netboot kernel:
-Speed improvements: Overlap requests of several blocks of data at
a time from the network, instead of serially in 1K chunks.
-Added support for building a GRUB-style DOS boot floppy image
containing the GRUB boot loader and a netboot kernel.
Moved the bmod filesystem code out of the kernel library and into
its own library (liboskit_memfs). See memfs/memfs_com.c. The memory
file system is now completely independent of the multiboot and bmod
parsing code, allowing easier creation of multiple memory file
systems. The support code to populate a memfs from a multiboot bmod
is now part of the startup library. See startup/start_fs_bmod.c for
example usage.
Creating kernels: added a new perl script for creating
MultiBoot images, "mkmb2". Works the same as mkmbimage, but
runs much faster on large kernels.
Cleaned up the NetBSD glue code. Removed the fs library support
code, and replaced it with different glue code that uses the osenv_
routines in the device library (just as the Linux and Freebsd
drivers already did).
Pthread library changes: Implementation of pthread_kill() and
pthread_sigmask(). Conformant pthread_cleanup_push/pop; now
lexically scoped. A number of name changes to make the distinction
between API functions and local additons clear.
Assorted minor bug fixes.
Snapshot oskit-990721 July 21, 1999
We are making this snapshot to get out a large amount of new code for
testing before making an official release of it. Much has changed,
including some changes to how OSKit kernels should initialize themselves.
Please take a look at the example programs in examples/x86 to see what
needs to be done. As a companion to this release, there are two new
substantial demonstration kernels available from the OSKit web page; an
"fsck" kernel FreeBSD disk partitions, and a kernelized version of the
popular "rsync" program.
Rework of the C and POSIX libraries to remove all linktime external
dependencies. All external interfaces are now accessed via a
services database that is provided to the C/POSIX library when the
kernel is initialized. The clientos library (described below) is
responsible for setting up the services database, as well as the C
library environment object that contains an assorted collection of
interfaces that only the C/POSIX library are interested in (such as
the console stream, the filesystem namespace, the memory allocator
for malloc, the sleep interface to give up the CPU in select,
etc.).
Addition of a new "ClientOS" library to encapsulate and initialize
many of the interfaces that an application program is dependent on,
typically through the C/POSIX library. The clientos is a mandatory
library that is responsible for initializing certain core
interfaces, such as the memory object (lowest level allocator), the
global registry, the C library environment object, and the default
console stream object. See the Client Operating System
(doc/clientos.tex) chapter in the documentation, as well as the
example programs for the new initialization sequence (notably, the
requirement of a call to oskit_clientos_init() in all OSKit
kernels).
Addition of a new Dynamic Linker/Loader (RTLD) library to allow ELF
format OSKit kernels to dynamically load ELF format shared
libraries (.so) files. This code is imported from the FreeBSD 3.0
rtld-elf library, and is contained in the rtld directory. See the
RTLD chapter in the documentation, (doc/rtld.tex) and the
demonstration kernel in examples/dyntest.
Lots of improvements and additions to the "startup" library.
Although still undocumented, the startup library is intended to
insulate the application program from the details of initializing
many devices and subsystems, and to aid in setting up the client
operating system. All of the example programs (sans one or two
maybe) now use the startup library for most of their device and
subsystem initialization. See the example programs in examples/x86.
Completion of the "services database" COM interface and
implementation. The services database is a registry that maps GUID
to COM object instantiation. Its original implementation allowed
for a single global registry accessed by global functions. The
implementation is now complete, and allows per-object
instantiation. The global registry is now an instantiation of such
an object, but for backwards compatibility, is still accessible
through the original global function calls. See the Interface
Registration (doc/register.tex) chapter in the documentation.
Addition of a new filesystem namespace component. All pathname
translation has been moved out of the POSIX library and into the
oskit_fsnamespace component, which also encapsulates mount/unmount
and mountpoint traversal. Also does symlink traversal. See
oskit/fs/fsnamespace.h. In addition, a pathname cache (much like
the "namei" cache in the unix FS) was added to prevent repeated
entry into the driver framework to do directory lookups. This
resulted in huge performance improvements (up to 6x) in programs
that make heavy use of pathname translation (eg: rsync). The
improvement was especially pronounced in multithreaded programs,
where each entry into the driver framework results in the process
lock being taken and released. See the fsnamespace chapter in the
documentation (doc/fsnamespace.tex), and the startup library
(startup/start_fs.c) for example usage.
Pthread library: Rework the mutex/condition code. Some general
clean up, and now allows statically allocated and initialized
mutexes and condition variables. A statically allocated mutex or
condition will be properly initialized the first time it is used if
the program does not arrange for that to happen explicitly. Also
added sigwait, sigwaitinfo, sigtimedwait and sigqueue to the
multithreaded version of the signal code. Add documentation for the
CPU Inheritance framework to the pthread chapter.
Add small amounts of support for rsync and fsck kernels. More
additions to the C (added stuff that was previously excluded) and
POSIX library (some tty ioctls, getpass, lots of trivial stubs to
allow linking). Added asyncio I/O support to the COM pipe
implementation since rsync uses pipes with select. Some fixes to
the network code to make sure that connections to a server get torn
before the oskit reboots, and to make sure a new initial segment
value gets chosen so that the server side is not confused by a new
connection with an old segment value. This was causing failed
connections from the rsync client to the rsync server when doing
quick reboots. Much improved versions of memset, bzero, bcopy,
memcpy, etc (from NetBSD). Make sure all open files are closed
before the oskit reboots, so that all files are flushed to disk and
the disk can be cleanly unmounted.
A number of GPROF fixes and improvements when using the FreeBSD C
library. Certain errors (such as no a.out file) no longer result in
a partly written gmon.out file. This allows postmortem dump of the
gprof data, rather than having it dumped out on the console. Also
added a start_gprof() entrypoint to get the gprof code running in
main, since it is often the case that you do not want to count the
initialization code, or even have to worry about it. See
examples/x86/hello.c for an example program that uses
start_gprof().
The memfs now understands internal vs. external links (akin to
internal and external inode link counts in UNIX), which allows more
precise cleanup semantics and fixes memory leaks in some usage
patterns. Several global variables were eliminated in favor of
per-instantiation variables. Stat now returns more accurate
information about the file.
The simple console now uses COM Stream wrappers for the console
drivers (direct, gdb, serial). Simplified base_console to use the
COM wrappers and separated out initialization into
base_console_init.c making it easier to override just the
initialization.
A fair amount of documentation reorganization, as well as some
additional chapters. The OSKit web page also reflects these
documentation changes (unlike the previous snapshot).
Osenv stuff. All of the "osenv" interfaces in the device library
have been COMified, and are exported to the device driver
libraries (Linux, Freebsd, Netbsd), which have been reworked to use
the dynamic interfaces, rather than static linktime dependencies on
the device library itself. These changes are not well documented
yet, but if you stick to using the "startup" library to initialize
your kernels, you should not have to worry about it much. Feel free
to ask us questions though.
|