(If anyone can give me photographic credits for the background image, please do so ! I found it in a web search, but no credits were given and the name at the bottomleft corner is too small for me to read…)
So, the OS|periment is celebrating its second birthday today, and like the last time this happened, I’d like to celebrate by doing a quick review of what has happened to this project during 2011.
- First, the bad news : not much to announce on the implementation front this year. It was mostly about minor things such as fixing a very annoying bug in debug code, switching from deprecated floppy images to ISO 9660 CD images, and adding pooled memory allocation capabilities to the kernel’s memory allocator. I also tried to complete memory management testing code early in the year, then gave up and moved on to more theoretical things. 2011, overall, will have been a year of theoretical discussions.
- Between March and June, I have been working on an important milestone of kernel functionality, namely interrupt handling. I have asked the knowledgeable people at OSnews how interrupts work on various architectures, then summed up the results in a couple of posts. From this knowledge, I derived an interrupt handling model that should be easily portable to most computer architectures.
- From interrupt handling, I slowly drifted into the subject of interprocess communication, which in microkernel OSs is a strongly related subject. I proposed an imperative view of IPC in which processes give order to each other asynchronously, called nonblocking RPC, as my main IPC mechanism. This design, and especially its massively multithreaded initial workflow, met a significant amount of deserved skepticism, which led it to slowly evolve throughout the months until it reached its current form. A specific criticism which was yet to be answered at that point was one of speed : may such a high-level communication be implemented in a way that’s fast enough. To answer this concern, I designed and implemented a toy RPC prototype in a corner of my kernel codebase, that attempted to mimick the overhead of a real RPC call. As it turned out, it worked well enough for infrequent system calls, with what would be an overhead of microseconds on current hardware without much optimization.
- As the end of the year came near, I started to explore how all the various kernel functionality that has been designed so far could be seen as different facets of the process abstraction. Then I set out to design the various remaining kernel components and their kernel-mode interfaces so that implementation may begin later this year. The components which have currently received this treatment are the process manager, the RPC manager, and the scheduler. Noticeable design work has been done in the process on scheduling and interrupt management.
- In parallel, I also explored higher-level topics of desktop and mobile user experience, such as less annoying computer trashes, user- and battery-conscious multitasking, software distribution methods, desktop environments and overall GUI design, backups, file management, device-independent user interfaces, and the target audience of this project. I also spent a great deal of time discussing graphics stacks and multi-monitor display setups.
- In meantime, I also ranted on several subjects of the current computing world, such as the tablet imposture, current touchscreens, some flawed views which too many technical-minded people exhibit of usability and design, notifications and popups, the security of managed code, excessive use of ACPI sleep to compensate bad OS design, iOS multitasking, Mac OS X 10.7 “Lion” (rather positive review for a rant though), and the abuse of web technologies in some modern software.
So that’s it for 2011. I’m far from having achieved my tentative goal of having the kernel done and running on real hardware, but it’s not as if I had spent all my time wanking working on physics stuff either. Kernel-side design work left includes writing the interface to an “Interrupt manager” kernel component (which is almost done), and fully designing an “I/O manager” kernel component whose task is to manage bidirectional communication between the CPU and external hardware through such things as I/O ports and memory-mapped registers. I have already asked the wise minds of OSnews about this and drafted something on paper, now it just needs a lot of polish and a bit of spare time to become an article on this blog.
For now, though, three things are going in my way as far as OS development is concerned :
- I have some exams left and I still have to do great at them.
- Work continues on that other project mentioned earlier. As said before, you’ll hear about it soon, once it’s ready.
- I also have to find a flat for my next internship, which takes place in one of the most student-crowded city of France and begins in March. Hurry is in order.