Opened 2 weeks ago
Allow arbitrary number of answerboxes per task
|Reported by:||jermar||Owned by:|
|Keywords:||ipc, ports, capabilities, async||Cc:|
|Blocker for:||Depends on:|
HelenOS has always used one main answerbox for task's IPC communication. The userspace async framework multiplexes this single communication endpoint for multiple logical connections. Besides of that, the kernel also uses other answerboxes internally such as the debugging kbox and a temporary kernel answerbox when a user page fault is being handled.
More recently, the async framework added the notion of async ports to ease writing multi-protocol components. However, async ports are still multiplexed over the main task's answerbox.
It would make a good sense to allow a task to create an arbitrary number of answerboxes and couple them with async ports. This would simplify the routing of IPC calls within the task as each logical IPC endpoint would use its own answerbox. Additionally, the realization of this idea would effectively turn HelenOS into a capability-based system (where a capability would be equal to an IPC connection, similar to how Hurd and Genode work with capabilities).
For example, the VFS now uses a complex security protocol to pass an open file from a parent task to its child. If VFS associated a port/answerbox with each open file, the parent task could pass its open files simply by connecting the child to those open files' respective answerboxes (e.g. by requesting a few callback connections from the child and forwarding them to VFS).