Finally, we come to our last and most difficult problem: How are pointers passed? The answer is: only with the greatest of difficulty, if at all. Remember that a pointer is meaningful only within the address space of the process in which it is being used. Getting back to ourread example discussed earlier, if the second parameter (the address of the buffer) happens to be 1000 on the client, one cannot just pass the number 1000 to the server and expect it to work. Address 1000 on the server might be in the middle of the program text.. A second problem is weakly-typed languages, like C. In a strongly-typed language, like Pascal, the compiler, and thus the stub procedure, knows everything there is to know about all the parameters. This knowledge allows the stub to marshal the parameters without difficulty. In C, however, it is perfectly legal to write a procedure that computes the inner product of two vectors (arrays), without specifying how large either one is. Each could be terminated by a special value known only to the calling and called procedure. Under these circumstances, it is essentially impossible for the client stub to marshal the parameters: it has no way of determining how large they are.. The use of transactions in computer systems goes back to the 1960s. Before there were disks and online data bases, all files were kept on magnetic tape. Imagine a supermarket with an automated inventory system. Every day after closing, a computer run was made with two input tapes. The first one contained the complete inventory as of opening time that morning. The second one contained a list of the day’s updates: products sold to customers and products delivered by suppliers. The computer read both input tapes and produced a new master inventory tape, as shown in Fig. 3-14.. So far we have tacitly assumed that a pool ofn processors is effectively the same thing as a single processor that isn times as fast as a single processor. In reality, this assumption is justified only if all requests can be split up in such a way as to allow them to
run on all the processors in parallel. If a job can be split into, say, only 5 parts, then the processor pool model has an effective service time only 5 times better than that of a single processor, notn times better.. 1. Fail-silent faults.. Is this system schedulable on one CPU?. [Картинка: any2fbimgloader136]. Fig. 6-1. (a) A single-chip computer. (b) A hypothetical shared-memory multiprocessor.. Fig. 6-2. (a) A multiprocessor. (b) A multiprocessor with caching.. However, researchers have spent a considerable amount of effort looking at alternative designs that do not require elaborate caching schemes. One such architecture is theNUMA (NonUniform Memory Access)multiprocessor. Like a traditional UMA(Uniform Memory Access)multiprocessor, a numa machine has a single virtual address space that is visible to all CPUs. When any CPU writes a value to locationa, a subsequent read of a by a different processor will return the value just written.. Other standard servers are present for handling object replication, starting processes, monitoring servers for failures, and communicating with the outside world. User servers perform a wide variety of application-specific tasks.. The RESTRICT call generates a new capability for the object, with a subset of the current rights, as described above.. Mach’s approach is the Cthreadspackage. this package is intended to make the kernel thread primitives available to users in a simple and convenient form. It does not have the full power that the kernel interface offers, but it is enough for the average garden-variety programmer. It has also been designed to be portable to a wide variety of operating systems and architectures.. The unit of sharing between multiple machines is the segment. Segments are split up into fragments of one or more pages. At any instant, each fragment is either read-only, and potentially present on multiple machines, or read/write, and present only on one machine.. CallDescriptionsgReadRead data from a segmentsgWriteWrite data to a segmentsgStatRequest information about a page cachesgFlushRequest from a mapper to the kernel asking for dirty pages.