| 1 | = HelenOS as a Genode platform = |
| 2 | |
| 3 | This document is inteded to help understand the Portation of the Genode |
| 4 | Operating System Framework to HelenOS by pointing out major differences |
| 5 | in the design, implementation and used terms of both platforms and describing |
| 6 | how these differences has been solved. \\ |
| 7 | Corresponding Ticket: #419 \\ |
| 8 | Code base: https://github.com/kurbel/genode/tree/base-spartan |
| 9 | |
| 10 | # \\ |
| 11 | # TODO: brief introduction to Genode in general \\ |
| 12 | # |
| 13 | |
| 14 | |
| 15 | == General Tasklayout == |
| 16 | |
| 17 | === Initial Tasks |
| 18 | |
| 19 | === Task Creation |
| 20 | |
| 21 | |
| 22 | == IPC == |
| 23 | |
| 24 | === Design |
| 25 | |
| 26 | || ||= HelenOS offers =||= Genode requires =|| |
| 27 | ||= IPC End Points =|| task to task communication\\ * fibrils used as userspace threads\\ * one answerbox per task || thread to thread communication\\ * uses kernel primitives for threading || |
| 28 | ||= IPC Routing =|| By global naming service (first task to be loaded in userspace)\\ * every new created task has an initial ipc connection to the naming service\\ * namimg service has to asked for at least first connection\\ * calls are being forwarded at will || parent of each single task / thread identified by a unique parent capability\\ * new created tasks have a connection to its parent\\ * parent has to be asked for every connection\\ * call is routed through the task"tree" until destination is reached || |
| 29 | ||= Connection Identification =|| by phone handle (simple int value) || by Capability, consisting of a platform specific argument and a global or local id for identifiaction || |
| 30 | ||= IPC Messages =|| different lenghts possible\\ * short messages using max 6 unsigned long arguments in a short call submitted directly\\ * longer messages submitted via copying memory from one task to another\\ * longer messages submitted via shared memory\\ * requesting or sharing a connection requires an extra ipc call for every single phone handle || variable\\ * messages have user defined maximum length \\ * capabilities can be send within each message (more than one is possible) || |
| 31 | |
| 32 | === Implementation |