Oberon Community Platform

Edit Page
Printable View


The Active Object System Kernel (A2) is a lean multiprocessor kernel developed in the spirit of the ETH Oberon Project. It is the base of the Bluebottle system and provides a runtime environment for the Active Oberon language, which supports active objects directly, and enables the construction of efficient active object-based systems that run directly on the hardware. Above the kernel layer is a flexible collection of modules providing generic abstractions for devices and services, e.g., file systems, user interfaces and networking.

The A2 kernel is currently implemented for Intel IA32 SMP multiprocessor and singleprocessor systems and severals StrongARM-based computers.

An overview of the kernel is presented in:

  • P. J. Muller, The Active Object System - Design and Multiprocessor Implementation, PhD thesis, Institute of Computer Systems, ETH Zurich, 2002 (pdf)

Here follows a list of the modules currently contained in (a special case of) the boot image as needed to run A2 programs:

Trace.ModLow-level trace output based on KernelLog
I386.Machine.ModBootstrapping, configuration and machine interface
Heaps.ModHeap management and garbage collector
Modules.ModModules and types
Objects.ModActive object runtime support
Kernel.ModImplementation-independent kernel interface

This is the absolute minimum set of modules you need to run A2 programs.

If you use DEFINITIONS (interfaces) in your code, you also need

Interfaces.ModRuntime support for interfaces

Most likely you want this modules, too:

KernelLog.ModTrace output for booting and debugging (imported by Traps.Mod)
Streams.ModI/O buffering and formatted writing and reading
Traps.ModTrap handling and symbolic debugging

With the modules above, the question is: how would your program get control? Answer: You would have to link it into the boot image as last module. The module body would then be the entry point.

To be able to dynamically load modules, you would need at least access to some disk device...

Plugins.ModPlugin object management (since imported by Disks)
Disks.ModAbstract disk driver

as, for example, an ATA disk...

I386.PCI.ModPCI bus interface
I386.ATADisks.ModATA/ATAPI disk driver

the module loader...

Commands.ModCommands and parameters
Files.ModAos file system base
Loader.ModActive Oberon module loader plugin

and access to a file system...

Caches.ModGeneric disk cache (since imported by DiskVolumes)
DiskVolumes.ModGeneric disk-based volume
Clock.ModReal-time clock driver (since imported by DiskFS)
DiskFS.ModAos disk file system

Using the boot console you can specify commands as config string (e.g. Boot1=...).

BootConsole.ModBoot console

From now on, you can load modules dynamically from disk.

To see what modules are included in a boot image, link it and have a look at Linker.Log. There is a section that shows you the layout of the boot image.

Example: IDE.Bin


    109CC8H Trace
    10CA28H Machine
    114068H Heaps
    11B2D8H Modules
    117728H Objects
    108F78H Kernel
    127408H KernelLog
    128638H Streams
    1222C8H Traps
    137078H Plugins
    138658H Disks
    13A4F8H PCI
    12E9A8H ATADisks
    13F438H Caches
    145948H Commands
    1409D8H Files
    13D928H DiskVolumes
    14F488H Clock
    148848H DiskFS
    154A58H Loader
    151B18H BootConsole


Copyright © 2007 ETH Zürich
Page last modified on September 19, 2008, at 03:28 PM