l4-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Boot protocol


From: Matthieu Lemerre
Subject: Boot protocol
Date: Sat, 06 Aug 2005 19:10:14 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Hi,

I really want your advice on this because I'm not sure of having found
a good solution, and writing a solution for this problem would be
quite long.  Let me expose the problem:

I have a basically working libhurd-cap-server for L4ng here, and I'd
like to use it in replacement in all servers.  This complicates a lot
the bootstrap procedure, because sharing a capability requires the cap
server to be running.

The current boot protocol is the following: 

* physmem is launched by wortel.  It starts up, and create a bucket.

* physmem asks wortel for all the frames containing the modules,
  creating the necessary container and giving the cap handle.

* physmem calls bootstrap_final, and wortel starts the other servers like this:

* a startup code is booted in the new address space, which requests
  physmem to map the memory in the containers.

* Then the task initialize its pager and memory management stuff.

* Then initialize its bucket, and respond to wortel askings, and so on.

There are many problems when introducing the cap server:

-You can't create a bucket when cap isn't running, nor injecting them.
 You can't create capabilities, in fact :).

-So, cap must boot on memory provided by physmem, without using
 regular RPCs.  So, physmem must provide memory to the cap
 server... This suggest for me that we have to use physmem as the
 initial pager, as was planned from what I can see.  Except that it
 can't use a special container or anything: instead the pager should
 keep track of every memory it has given, and when cap is boot up, it
 should put all this in a container and give it to cap.

-Once cap is booted, physmem would make wortel_cap_request/reply like
 calls to cap, and cap will forward them to wortel. Then, cap could
 create a cap buffer for every server, containing all the cap boxes a
 server need.  

-When the other servers boot, they make a call to cap to acquire their
 capabilities on the already-booted servers, then bootup, make their
 cap_request/reply calls to cap, then asks for the rest of the
 capabilities.  They could have a special container for using physmem
 as a pager.


What do you think of this?  Is it worth implementing this right now,
or a hack would be sufficient for now, because having this new
libhurd-cap-server is quit urgent (I guess that with capability
passing, we could begin work on swap servers or so on?)

Thanks,
Matthieu




reply via email to

[Prev in Thread] Current Thread [Next in Thread]