An alternative to blocking primitives arenonblocking primitives(sometimes calledasynchronous primitives). Ifsend is nonblocking, it returns control to the caller immediately, before the message is sent. The advantage of this scheme is that the sending process can continue computing in parallel with the message transmission, instead of having the CPU go idle (assuming no other process is runnable). The choice between blocking and nonblocking primitives is normally made by the system designers (i.e., either one primitive is available or the other), although in a few systems both are available and users can choose their favorite.. As we pointed out earlier, this particular example is a stateless server. For a UNIX-like server, one would have additional proceduresopen andclose, and different parameters forread andwrite. The concept of RPC itself is neutral, permitting the system designers to build any kind of servers they desire.. Process 0 sends everyone a request with timestamp 8, while at the same time, process 2 sends everyone a request with timestamp 12. Process 1 is not interested in entering the critical region, so it sendsOK to both senders. Processes 0 and 2 both see the conflict and compare timestamps. Process 2 sees that it has lost, so it grants permission to 0 by sendingOK. Process 0 now queues the request from 2 for later processing and enters the critical region, as shown in Fig. 3-9(b). When it is finished, it removes the request from 2 from its queue and sends anOK message to process 2, allowing the latter to enter its critical region, as shown in Fig. 3-9(c). The algorithm works because in the case of a conflict, the lowest timestamp wins and everyone agrees on the ordering of the timestamps.. 2. If no one responds,P wins the election and becomes coordinator.. A third approach to using local disks is to use them as explicit caches (in addition to using them for paging, temporaries, and binaries). In this mode of operation, users can download files from the file servers to their own disks, read and write them locally, and then upload the modified ones at the end of the login session. The goal of this architecture is to keep long-term storage centralized, but reduce network load by keeping files local while they are being used. A disadvantage is keeping the caches consistent. What happens if two users download the same file and then each modifies it in different ways? This problem is not easy to solve, and we will discuss it in detail later in the book.. [Картинка: any2fbimgloader99]. 1. Deterministic versus heuristic algorithms.. Minimizing systemwide knowledge and change is important for making the system scale. Hierarchical designs help in this respect.. 3. DIRTY — Memory is incorrect; only one cache holds the block.. 2. Accessing remote memory is slower than accessing local memory.. After passing the barrier, process 1 might start off, storing intoa. Then process 2 might try to store intoa, causing a page fault to fetch the page containing the array. After that, process 1 might try to store intoa, causing another fault, and so on. With a little bad luck, each of the stores might require a full page to be transferred, generating a great deal of traffic. . The first three parameters provide information about the header and buffer of the outgoing request. The last three provide the same information for the incoming reply. Thetrans call sends the request and blocks the client until the reply has come in. This design forces processes to stick closely to the client-server RPC communication paradigm, analogous to the way structured programming techniques prevent programmers from doing things that generally lead to poorly structured programs (such as using unconstrained GOTO statements).. The last three calls all work on uncommitted files. They allow the file to be changed by overwriting, inserting, or deleting bytes. Multiple calls can be made in succession. The last call can indicate via a parameter that it wants to commit the file.. 9.1.7. The Object-Oriented Subsystem. statement, but was forcibly restrained from doing so by his colleagues.) It can be argued that having per-thread global variables use procedure calls instead of language scoping rules, like locals and globals, is an emergency measure introduced simply because most programming languages do not allow the concept to be expressed syntactically..