ULIX: Literate Unix
A diary documenting the implementation of ULIX-i386
Welcome to the ULIX blog.
Ulix (Literate Unix) is a Unix-like operating system developed at
University of Erlangen-Nürnberg.
I use D. E. Knuth's concept of
for the implementation and documentation. The goal was a fully working system which can be
used in operating system courses to show students how OS concepts (such as paging and scheduling)
can be implemented. Literate programs are very accessible because they can be read like a book;
the order of presentation is not enforced by program logic or compiler restrictions, but instead
is guided by the implementer's creative process.
Ulix is written in C and assembler for the Intel architecture. The literate programming
part is handled by noweb.
On this page I document my progress with the implementation.
|Having Fun with Minix (13.07.2013) |
As I wrote in the last entry, I have implemented (parts of) the
Minix filesystem. I used that one because Linux machines can
create and mount Minix filesystem images. However, I use a Mac
for development, and on those machines it is harder to access
Minix volumes. The MacFUSE-based "minixfs" command can mount a
Minix image, but only read-only, and I have not found software
that can mount them writeable on the Mac.
So I created a small VirtualBox VM with Debian inside, shared
the Mac's filesystem with the VM and created shell scripts
which mount the Minix image and modify it. I had to learn that
this approach doesn't work when the image resides on the
vboxsf shared folder: Files kept disappearing from the image.
The solution was to first physically copy the image into the
VM, mount it, make the changes, unmount it, and copy it back
to the Mac. It works now :)
[ Path: | persistent link ]
|v0.08: Floppies, Minix Filesystem (13.07.2013) |
Ulix reads and writes floppy disks (via the FDC controller),
it can handle parallel accesses from several processes (using
a mutex to synchronize things). There's a basic implentation
of the Minix (v2) filesystem: Via standard system calls, processes
can open, read, write, lseek files, and single indirection for
block numbers is possible. No double indirection, and currently
no sub-directories. (The Minix code replaces the older
simplefs filesystem which was a very basic FAT-type system.)
Next: Implementation of signals. There's already a kill()
function and the corresponding system call, but the scheduler
needs modification (for jumping into signal handlers when
signals are found).
[ Path: | persistent link ]
Copyright © 2011-2015 Hans-Georg Eßer;
Server: Debian Linux, Apache Web Server,
blog page powered by blosxom :: the zen of blogging,
Theme: Hazard Area 1.6 (modified),
created by Bryan Bell,
Copyright © 2000-2006 Weblogger.com.