Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!wuarchive!udel!brahms.udel.edu!gdtltr From: gdtltr@brahms.udel.edu (gdtltr@limbo.org (The Befuddled One)) Newsgroups: comp.os.misc Subject: Re: More questions about Amoeba and Capabilities Message-ID: <22151@brahms.udel.edu> Date: 15 Jun 91 19:23:19 GMT References: <2623@amix.commodore.com> Organization: Your Organization Could Be Here! Lines: 79 In article <2623@amix.commodore.com> skrenta@amix.commodore.com (Rich Skrenta) writes: =>Two questions for fans of Amoeba or other capability-based systems. => I am a fan, but I haven't actually had my hands on Amoeba, and it has been a few months since I have read the papers on it, so interpret my following remarks accordingly. =>Question #1: => =>An Amoeba server is only listening on a port if it is blocked in a =>get_request(port, ...) call. Does this mean that if the server runs =>out of threads executing get_requests that the service appears to vanish =>to prospective clients? A client trying to locate the service port might =>fail just because the service is busy. How is this dealt with in Amoeba? => => client does: => do_operation(port, ...); => => server does: => spawn_lightweight_threads(10); => for (;;) { => get_request(port, ...); => process_request(); => put_reply(...); => } => =>If all 10 lightweight threads are tied up in process_request(), the server =>won't be executing any get_requests on its port, and the client's do_operation =>will fail. => => I believe that the Amoeba kernel keeps a cache of ports that have been recently "get_request"ed. If an incoming request matches an entry in the cache but not an a waiting get_request, it is held in limbo for a certain amount of time. A get_request in that time will handle (one of) the waiting request(s). Otherwise, the request is discarded. =>Question #2: => =>The bullet file server returns a capability when you ask it to create a =>file. The capability must be presented to perform operations on the file =>such as read, write and delete. => => capability = create_file(...); => =>Presumably you're supposed to add this capability to a directory or otherwise =>responsibly manage it. But what if you "lose" it? => => capability = 0; => =>The capability is not stored anywhere, but the bullet file server doesn't =>know this. There is an unreferenced file on the file server with no =>way to "garbage collect" it. => =>It seems that during the development of even a simple program there would =>be potential to lose references to many files. Not even the programmer =>whose errant program had created these files could reclaim them. =>Is there a solution? => I believe that the BFS periodically consults the directory server and packs all the referenced files to the far ends of the disk. In this process, all files not referenced in the directory server are overwritten/freed. Ok, time for everyone to tell me how wrong I am. :-) =>Rich =>-- =>skrenta@amix.commodore.com Gary Duzan Time Lord Third Regeneration -- gdtltr@brahms.udel.edu _o_ ---------------------- _o_ [|o o|] To be is to be networked. [|o o|] |_o_| Disclaimer: I have no idea what I am talking about. |_o_|