Manish,
(You were asking both the list and me, so I repeat here)
I am new to l4. Is it true that the allocation of tid is given to user. How
[...]
Kind of. As Espen said, the Microkernel provides no name space (except its namespaces for kernel resources such as threads, tasks and memory). This must be done at user level.
*One* scheme is to have names ("strings") for servers, and identify servers (their offered services) by these names. Then servers have to register their (string, thread_id) pair at a nameserver, and clients have to ask the nameserver for the (string -> thread_id) translation. Of course, the nameserver must somehow be found. In the case of DROPS (our OS on top of L4), this nameserver is registered at rmgr, and rmgr has a fixed and well-known threadid. Thus, name resolution works as follows: The client asks the rmgr (threadid 4.0 per definition) for the threadid of the nameserver, and then the nameserver for the threadid of the target server. The rmgr does not have the flexibility we need for dynamic name registering, therefore the nameserver.
*Other* policies could for instance be one hierarchical namespace, resolved by a root nameserver and client nameservers. The root nameserver (and the client nameservers) could provide mounting other namespaces. This way one could construct a namespace comparable to the UNIX filesystem namespace. Drivers could per definition be found under a name like '/dev/*'. A user-land file system could provide the part of the namespace for /home/, another for /proc/, and another for /usr/.
You should watch our seminar page, in a couple of weeks some slides about namespace issues should show up.
Regards, Jork