Hi,
I've been adding mapping trees to my implementation of L4 and I have a question...
The L4 reference manual states that address spaces are constructed recursively. Up 'till now I'd assumed that this was merely notional and that in real systems address spaces would be strictly n-ary trees, not graphs with cycles.
Thinking it through however it's obvious that a task A can map a page P to task B which can then map it back to task A at a different virtual address. Is this allowed in L4? (I assume it is) Is it useful? Could I get away with not allowing it? I ask because my initial implementation includes a quick index from a taskid to a node in the mapping tree (to avoid recursion rather than for speed) but this requires that each task has only a single entry.
Additionally, what effect should an unmap have: if task A unmaped P from task B, would the second mapping in task A disappear? I'd imagine that it would indeed remove the second mapping.
I've had a look at the Fiasco souce and it wasn't clear to me where these situations are handled.
Thanks.