As a simple example, consider the procedure of Fig. 2-21 (a). It has three parameters, a character, a floating-point number, and an array of five integers. We might decide to transmit a character in the rightmost byte of a word (leaving the next 3 bytes empty), a float as a whole word, and an array as a group of words equal to the array length, precededby a word giving the length, as shown in Fig. 2-21(b). Thus given these rules, the client stub forfoobar knows that it must use the format of Fig. 2-21(b), and the server stub knows that incoming messages forfoobar will have the format of Fig. 2-21(b). Having the type information for the parameters makes it possible to make any necessary conversions.. 2.4.4. RPC Semantics in the Presence of Failures. [Картинка: any2fbimgloader46]. 16. In Fig. 2-23 thederegister call to the binder has the unique identifier as one of the parameters. Is this really necessary? After all, the name and version are also provided, which uniquely identifies the service.. 3.3. ELECTION ALGORITHMS. As a first example, consider thebully algorithmdevised by Garcia-Molina (1982). When a process notices that the coordinator is no longer responding to requests, it initiates an election. A process,P, holds an election as follows:. If process 7 is ever restarted, it will just send all the others aCOORDINATOR message and bully them into submission.. Being able to group these two operations in an atomic transaction would solve the problem. Either both would be completed, or neither would be completed. The key is rolling back to the initial state if the transaction fails to complete. What we really want is a way to rewind the data base as we could the magnetic tapes. This ability is what the atomic transaction has to offer.. Another problem with user-level thread packages is that if a thread starts running, no other thread in that process will ever run unless the first thread voluntarily gives up the CPU. Within a single process, there are no clock interrupts, making round-robin scheduling impossible. Unless a thread enters the runtime system of its own free will, the scheduler will never get a chance.. Let us consider the case of separate directory and file servers for the moment. In the normal case, the client sends a symbolic name to the directory server, which then returns the binary name that the file server understands. However, it is possible for a directory hierarchy to be partitioned among multiple servers, as
illustrated in Fig. 5-7. Suppose, for example, that we have a system in which the current directory, on server 1, contains an entry,a, for another directory on server 2. Similarly, this directory contains an entry,b, for a directory on server 3. This third directory contains an entry for a filec, along with its binary name.. Obviously, such systems will need considerable redundancy in hardware and the communication infrastructure, but they will also need it in software and especially data. File replication, often an afterthought in current distributed systems, will become an essential requirement in future ones. Systems will also have to be designed that manage to function when only partial data are available, since insisting that all the data be available all the time does not lead to fault tolerance. Down times that are now considered acceptable by programmers and other sophisticated users, will be increasingly unacceptable as computer use spreads to nonspecialists.. 8. In Fig. 6-13(a) an example of a sequentially consistent memory is shown. Make a minimal change toP2 that violates sequential consistency.. Amoeba, Mach and Chorus have different histories and different philosophies. Amoeba was designed from scratch as a distributed system for use on a collection of CPUs connected by a LAN. Later, multiprocessors and WANs were added. Mach (actually RIG) started out as an operating system for a single processor, with multiprocessors and LANs being added afterward. Chorus began as a distributed operating systems research project quite far from the UNIX world, and went through three major revisions, getting closer and closer to UNIX each time. The consequences of these differing backgrounds are still visible in the systems.. The second problem relates to the standard library, most of whose procedures are not reentrant. It can happen that a thread is busy allocating memory when a clock interrupt forces a thread switch. At the moment of the switch, the memory allocator’s internal data structures may be inconsistent, which will cause problems if the newly scheduled thread tries to allocate some memory.. The XDS interface is amazingly small, only 13 calls (versus 101 calls and a 409-page manual for DCE RPC). Of these, five set up and initialize the connection between the client and the directory server. The eight calls that actually use directory objects are listed in Fig. 10-23..