The Implementation of the ULIX Literate Operating System








Blaue Links: intern
Rote Links: extern

Suche Linux-Bücher bei

Subscribe 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 Literate Programming 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.

Navigation: 2015 | 2014 | 2013 | 2012 | 2011

Redoing the scheduler and init / exec code; floppy access (19.11.2012)

Today I started rewriting the code for scheduling and process initialization (via fork() or load_from_disk()). The new code uses the fact that all handler functions (which includes system call handlers) can read the register contents of the process in user mode (before the interrupt occurred or the system call was initiated with int 0x80).

Also new in Ulix: I can now access a floppy drive. Reading and writing sectors works fine in both system mode (during the OS initialization) and in user mode (through sys calls). For testing stuff, there's also a rudimentary FAT-like filesystem (including a makefs command that creates new floppy images and fills them with files, a bit like genisoimage).

Since so many things depend on one another, there's also a usermode library (ulixlib) which allows Ulix programs to be (cross-) compiled with gcc. So it is now possible to write C programs that open() a file on the floppy disk and then read() from and write() to it.

[ 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.