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:
Here follows a list of the modules currently contained in (a special case of) the boot image as needed to run A2 programs:
|Trace.Mod||Low-level trace output based on KernelLog|
|I386.Machine.Mod||Bootstrapping, configuration and machine interface|
|Heaps.Mod||Heap management and garbage collector|
|Modules.Mod||Modules and types|
|Objects.Mod||Active object runtime support|
|Kernel.Mod||Implementation-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.Mod||Runtime support for interfaces|
Most likely you want this modules, too:
|KernelLog.Mod||Trace output for booting and debugging (imported by Traps.Mod)|
|Streams.Mod||I/O buffering and formatted writing and reading|
|Traps.Mod||Trap 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.Mod||Plugin object management (since imported by Disks)|
|Disks.Mod||Abstract disk driver|
as, for example, an ATA disk...
|I386.PCI.Mod||PCI bus interface|
|I386.ATADisks.Mod||ATA/ATAPI disk driver|
the module loader...
|Commands.Mod||Commands and parameters|
|Files.Mod||Aos file system base|
|Loader.Mod||Active Oberon module loader plugin|
and access to a file system...
|Caches.Mod||Generic disk cache (since imported by DiskVolumes)|
|DiskVolumes.Mod||Generic disk-based volume|
|Clock.Mod||Real-time clock driver (since imported by DiskFS)|
|DiskFS.Mod||Aos disk file system|
Using the boot console you can specify commands as config string (e.g. Boot1=...).
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.
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 (C) 2007 ETH Zürich
September 19, 2008, at 03:28 PM