I am, therefore I design code. Sometimes I write code too.
I have various projects, including (but not limited to) a programming language, and an operating system.
One can reach me in the Mega-Tokyo forums, or send me email at
tvoipio@cc.hut.fi.
I also have currently somewhat out of date
web page.
My OSProject: µNeon
This is currently the "official" µNeon web presence. I will migrate it to a real server at some point.
The reason I'm putting this here now, is that local target audience, is also my target audience.
Latest public µNeon "release" can be found at
http://www.cs.hut.fi/~tvoipio/files/neon/.
Data:
- target architecture is Intel Pentium and upwards (so far should run on 486 too)
- memory model is flat 32-bit virtual memory model, about 16MB required (runs with less)
- symmetric multiprocessing will be supported in the future, distributed computing hopefully at some point
- most of the system is theoretically portable (no ports planned anytime soon)
µNeon goals:
- Support transparent resource virtualization at any level. Let anyone host a virtual system with minimal effort.
- Support strong capability security without centralized control (other than trusted kernel messaging).
- Try to make it as hard as possible for unrelated processes to cause damage to each other.
- Accept failure, but always try to keep it local.
- Provide flexible, but easy to use asynchronous programming model, with limited queueing.
- Try to get kernel deal more with practicalities than system policies. Being 'fair' is a non-goal.
- Design for persistent interactive sessions that user can access from anywhere.
In short, try to combine simplicity, security, and freedom.
System:
My approach is pretty prototypical example of Eleanore Semaphore.
Current µNeon design is based on an asynchronous message passing microkernel design, which allows the above quite naturally. Many system services can work in exactly the same way whether inside or outside kernel. At present those run outside for some extra safety and flexibility (easier to update or restart on the fly, for example).
Rest of the system (and parts of the kernel too) are structured as objects sending each other messages. There is a tool called 'nifgen' that serves the purpose of interface generator, but it really does the absolutely minimum: generates hash-codes for interfaces and interface methods, and adds a few bits of type information into those, so that system messaging can figure out what kinds of message needs to be copied.
Currently two types are supported: pulses (just two immediates), and full messages (specified as user pointer and length). Full messages have a fixed maximum length (currently 1024 bytes). All messages can also transfer one handle. Handles are used to specify the target of the message, and are both secure and opaque: they can't be forged, but just by holding a handle it's impossible to tell who implements the service the handle names. This also hold the other way: a service will only know which handle was used to access it, never who holds the handle.
Alternative method of communication is using shared memory, which is rather involved, because any object can act as memory provider, but doesn't require the memory user to trust the memory provider. Because of this, page fault handling is somewhat...funny. From application programmers point of view it is quite straightforward, though.
As a whole, I'm currently very happy with the system, with the hardest problems mostly solved (properly).
Finally, in the future a set of high priority threads can hopefully run as if they where running on an RTOS, since there isn't really any non-constant-time non-preemption-safe code in the kernel, even if the kernel currently runs much of the time interrupts disabled.
For more complete description of various system services and their design history, search forums for 'neon'.
Status:
The microkernel is practically finished. The only thing missing from kernel is support for process-to-process memory mappings, and some process control interfaces.
Development is shifting outside the kernel, mainly into base system services and drivers. Following have priority (in no particular order):
- Networking drivers and TCP/IP stack
- Console service consisting of graphics and HID drivers (text-mode virtual consoles will probably exist first).
- Basic user session manager and then window manager to allow interaction with the system.
Next release is scheduled when I consider the kernel "good enough for now", which is hopefully this summer 2006. No promises though.
Other OS related stuff:
I've also written a (concept level) virtual memory tutorial, which is at
http://www.cs.hut.fi/~tvoipio/memtutor.html,
and a synchronization minitutorial (both kernel and userlevel) which is at
http://www.cs.hut.fi/~tvoipio/threads.html.
Maybe those are useful?
Comments:
You are welcomed to leave your comments below.
