Operating System Asynchronicity Research

The design

The design is under elaboration. Visit #ich on irc.oftc.net to participate in discussion.

Global architecture
Some definitions
  • privileged code : The privileged code references to both the kernel and the virtual machine engines. They run in IOPL 0.
  • isolated code : The isolated code references either restricted code and interpreted code.
  • interpreted code : The interpreted code is, as the name implies, interpreted by a virtual machine engine. It physically runs in IOPL 0, but is "safer" as it is interpreted by a considered safe managed environment.
  • kernel : the essential bare minimum required to run the system and glue together the VMs and restricted code in a somewhat coherent OS.
  • VMs : Virtual machine engines. Can be python, erlang, etc.
  • restricted code : Native code that runs in IOPL 3, for example legacy code ported to ich:os (not trusted enough to run in IOPL 0).
RAM as a cache The videotape metaphor

The kernel loads components in memory. When a component (or piece of information) is not used anymore, or because memory is required to load another component (or piece of information), the kernel writes the unused component on disk, AFTER any content, in a sequential order, just like a tape. If you look back to load some older components (or pieces of information), you could load what's around it too, since chances are that they are used in the same context of operation. But the kernel will not wait until you ask for them to get loaded... they will get loaded at once.


Each process has a message receive queue, which is registered with the messaging engine. A message can be sent to an integer value reference or named reference. The messaging engine checks if the integer value reference is a real pid or is the named reference is registered as a receiver. It then forwards the message to the appropriate receiver.

A message is always passed with its own structure, being generated by the programmer or by the interpreter/compiler. This structure can be used to validate a message structure against the receiver waited-for structure.

Data types

A string is an array of integers. Integers are of variable size.
Example of Integer representation: <number of bytes><bytes>
Example of Array: <number of items><items>, while items could be made of other int elements.

Todo list
  • task scheduler, lightweight thread engine
  • messaging system
  • basic memory manager
  • basic interrupt/irq redistribution

Last updated March 19, 2007
Sourceforge.net Logo