Skip to content
Hans-Georg Eßer edited this page Dec 30, 2015 · 1 revision

The following is a list of Ulix features

  • Ulix is a classical Unix-like operating system which features processes with separate address spaces, threads, paging, a virtual filesystem (currently supporting floppies and hard disks, with Minix as the primary filesystem) and synchronization via kernel mutexes and semaphores.
  • It has a preemptive scheduler (implementing a simple Round Robin strategy) and allows for the integration of new interrupt and system call handlers at run- time. Ulix supports up to ten text mode terminals.
  • It works on 32-bit Intel-compatible CPUs and provides system calls (via the classical int 0x80) and corresponding user mode library functions which are compatible to other Unix systems, e. g. fork, execv, exit, waitpid, signal, and kill for process control, some of the pthread_* and pthread_mutex_* functions for thread control [IEE95], open, read, write, lseek and close for file access, brk for dynamic memory (heap) management etc.
  • There are also a few user mode programs (cat, chgrp, chown, chmod, clear, cp, df, diff, free, grep, hexdump, kill, ls, man, mkdir, ps, readelf, rm, rmdir, stat, sync, touch, vi and wc), and some more commands are implemented as shell built-ins of the Ulix shell sh, e. g. cd and pwd.
  • A login mechanism asks for user name and password and checks these against entries in /etc/passwd (where the passwords are stored in plaintext and world-readable since hashing and encryption are not available in Ulix), and authenticated users can only access files for which they have the required access permissions. Also, signaling other processes via the kill function or program requires the user to own the targeted process (or have administrator privileges).
  • Redirection of standard input, standard output and standard error are supported via closing one of the file descriptors 0, 1 or 2 and opening a new file (which will reuse that descriptor). The shell understands the <, > and 2> syntax for starting programs with redirections, and it can also use the feature to execute shell script files (via sh <script.sh).
  • Ulix uses a buffer cache for disk read and write operations so that repeated access to the same data on disk is faster than first access.
  • A swapper process runs in the background and checks whether physical memory fills up too much: if so, it will pick parts of memory and write them to disk in order to increase the available memory. If such a “paged-out” memory area is accessed later, it will be “paged in” again before the program that wants to use it can continue.
  • The system can be run inside a virtual machine using qemu and it writes a kernel log to a (virtual) serial port; you can save this output in a file for later analysis.
  • The simple shell can launch user mode programs (which need to be compiled outside Ulix). Such programs are stored using the ELF executable format [TIS95]. Ulix expects to have 64 MByte of RAM and maps that physical RAM to a fixed address space region for easy access to the physical memory.
  • POSIX threads are somewhat limited in that each thread has a fixed-size stack (whereas the primary or only thread has a stack which automatically increases its size as needed).

References

[IEE95] IEEE. IEEE 1003.1c-1995: Information Technology — Portable Operating System Interface (POSIX) - System Application Program Interface (API) Amendment 2: Threads Extension (C Language). IEEE Computer Society Press, 1109 Spring Street, Suite 300, Silver Spring, MD 20910, USA, 1995. http://www.ansi.org/.

[TIS95] TIS Committee. Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2, May 1995.

Clone this wiki locally