in general terms, the operation of the system as it appears to the client application is very similar to working with a normal monolithic kernel. although the results passed back might come from a third party handler, this was essentially invisible to the client. servers handling these requests operated in a similar fashion to the clients, opening connections with the kernel to pass data. however, servers generally spawned new threads as required to handle longer-lasting requests. when these were handled and the responses posted, the thread could be de-allocated and the servers could go into a "receive mode" awaiting further requests.