It's a really cool microkernel. See www.qnx.com
What is a microkernel?
It's a very small kernel that can do almost nothing. The main
things a microkernel can do are
Things a microkernel typically cannot dothread services -- Neutrino provides the POSIX thread-creation primitives. signal services -- Neutrino provides the POSIX signal primitives. message-passing services -- Neutrino handles the routing of all messages between all threads throughout the entire system. synchronization services -- Neutrino provides the POSIX thread synchronization primitives. scheduling services -- Neutrino schedules threads for execution using the various POSIX realtime scheduling algorithms. timer services -- Neutrino provides the rich set of POSIX timer services. process management services -- the Neutrino microkernel and the process manager together form a unit (called procnto). The process manager portion is responsible for managing processes, memory, and the pathname space.
One sends a message to the server that can do these things.
Send-Recv Paradym
One easy thing is to make a message passing class look like a system call. You say
fd = open( ....)And it gets translated into
send( ...)Advantages of a Microkernel
recv(fd);
Mach has a "look up the service and get a port number then write to
the port number" thingie.
QNX has a "open up a file, but the file is really a process and might
even be a directory of processes" thingie.
What's This FileTable Things
It's a table of mount points. When you open a file, it finds the appropriate mount point, and redirects your request to that process. That process can allow, deny, or whatever. It can even export a directory instead of a file.
What to do with ls /net/http/*/index.html
What's the Right Process?
Suppose you get a request for /foo/bar, and you table says
/foo
process 12
/foo/bar
process 100
Do you want to search the entire table on every open? Do you want to return the first match, even if' it's dumb? (Tell Xenu story).