Volkmar,
Thanks very much for your response !
On Mon, 22 Feb 1999, Volkmar Uhlig wrote:
> The bookkeeping is done by the kernel. this is necessary, because the
> sender (e.g. pager) does not know, if the receiver of the page maps it to
> other address spaces. Therefore the flush operation must be asynchronus.
> Example: A is pager and maps a page to B. B maps it to C, D, E, and F. if A
> flushes the page, it is removed from B, C, D, E and F.
So, multiple mappings are in fact possible (that's what I wanted to know).
I was aware that the bookkeeping would have to be in the kernel, otherwise
flush couldn't work as described in the manual. Only, how does it work ?
Theoretically, each task could map each of it's pages to up to 2047 other
tasks. So, the kernel would need to maintain ~2K entries per mapped page
and task. This can't be! The only explanation I can think of right now
is that the kernel allocates room for entries dynamically, assuming that
the actual number of required entries will always be far less than
the theoretical limit. But that would mean you can break the system
simply by doing a big enough number of mappings.
> In the current L4-implementation of Jochen Liedtke, one mapping entry is 16
> Bytes.The Alpha implementation (done by me) needs 32 Bytes per entry (64
> bit address space - and a lot of trix). The Fiasco kernel does not use
> lists. They need about 4 Bytes per entry + an some overhead per frame (I
> left bevore it was finished)
>
I am getting the distinct feeling that I am missing something
very simple :-(. So, at the risk of looking like a complete fool:
How do you keep track of up to 2K tasks in a 16 Byte entry ?
Thanks for your response
Rob
----------------------------------------------------------------
Robert Kaiser email: rkaiser(a)sysgo.de
SYSGO RTS GmbH
Carl-Zeiss-Str. 41 phone: (49) 6131 9138-80
D-55129 Mainz / Germany fax: (49) 6131 9138-10