Lucy | A POSIX API server for the sel4 microkernel
Posted: Wed Oct 04, 2017 5:43 pm
While reading the documentation of sel4 and some discussion here about how microkernels for a POSIX subsystem are unsuitable, I was curious about if it's possible to write a POSIX API for a microkernel with low overhead and removing the obvious problems such as synchronous calls.
I've come to the conclusion that by giving the POSIX API less control over the execution flow these problems could be solved (the UNIX server behaving asynchronously despite the demands by the POSIX API) preserving the benefits of the microkernel.
I'm going to start with writing a pthreads implementation first but it'll progress into more and more things. I'll have a sample POSIX threads app dynamically linked with liblucy in QEMU and do some benchmarks. The features I have in mind right now:
process isolation
translation of POSIX calls into an optimized form of sel4 calls
emulation of certain UNIX interfaces such as the /dev folder, groups, signals, and other things
IPC management on behalf of the applications
At the end of the day I'm looking for a fast UNIX server that takes over alot of the things that would be done by the POSIX kernel.
Thoughts?
I've come to the conclusion that by giving the POSIX API less control over the execution flow these problems could be solved (the UNIX server behaving asynchronously despite the demands by the POSIX API) preserving the benefits of the microkernel.
I'm going to start with writing a pthreads implementation first but it'll progress into more and more things. I'll have a sample POSIX threads app dynamically linked with liblucy in QEMU and do some benchmarks. The features I have in mind right now:
process isolation
translation of POSIX calls into an optimized form of sel4 calls
emulation of certain UNIX interfaces such as the /dev folder, groups, signals, and other things
IPC management on behalf of the applications
At the end of the day I'm looking for a fast UNIX server that takes over alot of the things that would be done by the POSIX kernel.
Thoughts?