Fig. 2-4. The ATM reference model.. Just assend can be blocking or nonblocking, so canreceive. A nonblockingreceive just tells the kernel where the buffer is, and returns control almost immediately. Again here, how does the caller know when the operation has completed? One way is to provide an explicitwait primitive that allows the receiver to block when it wants to. Alternatively (or in addition towait), the designers may provide atest primitive to allow the receiver to poll the kernel to check on the status. A variant on this idea is aconditional_receive, which either gets a message or signals failure, but in any event returns immediately, or within some timeout interval. Finally, here too, interrupts can be used to signal completion. For the most part, a blocking version ofreceive is much simpler and greatly preferred.. Although RPC is a step forward above raw message passing, it has its own problems. The correct server has to be located. Pointers and complex data structures are hard to pass. Global variables are difficult to use. The exact semantics of RPC are tricky because clients and servers can fail independently of one another. Finally, implementing RPC efficiently is not straightforward and requires careful thought.. 2. If the receiver is already in the critical region, it does not reply. Instead, it queues the request.. 23. Is it possible to determine the priorities that the rate monotonic algorithm would assign to the processes in the preceding problem? If so, what are they? If not, what information is lacking?. On mainframes, however, many types of files exist, each with different properties. A file can be structured as a sequence of records, for example, with operating system calls to read or write a particular record. The record can usually be specified by giving either its record number (i.e., position within the file) or the value of some field. In the latter case, the operating system either maintains the file as a B-tree or other suitable data structure, or uses hash tables to locate records quickly. Since most distributed systems are intended for UNIX or MS-DOS environments, most file servers support the notion of a file as a sequence of bytes rather than as a sequence of keyed records.. 5.2.2. System Structure. Although server caching eliminates a disk transfer on each access, it still has a network access. The only way to get rid of the network access is to do caching on the client side, which is where all the problems come in. The trade-off between using the client’s main memory or its disk is one of space versus performance. The disk holds more but is slower. When faced with a choice between having a cache in the server’s main memory versus the client’s disk, the former is usually somewhat faster, and it is always much simpler. Of course, if large amounts of data are being used, a client disk cache may be better. In any event, most systems that do client caching do it in the client’s main memory, so we will concentrate on that.. If the system does not have reliable broadcasting (or does not have any broadcasting at all), the update is done using a two-phase, primary copy algorithm. The process doing the update first sends a message to the primary copy of the object, locking and updating it. The primary copy then sends individual messages to all other machines holding the object, asking them to lock their copies. When all of them have acknowledged setting the lock, the originating process enters the second phase and sends another message telling them to perform the update and unlock the object.. 9. In Fig. 6-14, is 001110 a legal output for a sequentially consistent memory? Explain your answer. . Case Study 2: Mach. Fig. 9-6. The three kinds of processes in Chorus.. [Картинка: any2fbimgloader239]. 9.6.3.The COOL Generic Runtime System. To maximize performance, the server understands about token compatibility. It will not simultaneously issue two write tokens for the same data, but it will issue two read tokens for the same data, provided that both clients have the file open only for reading..