QNX!!!

What is is?

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
 

  • thread 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.
  • Things a microkernel typically cannot do So, how does one do these things on a microkernel?

    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( ...)
    recv(fd);
    Advantages of a Microkernel Disadvantages of a Microkernel How Does IPC work in a Microkernel

    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).