Footnotes


1 The 1965 prediction called for a doubling each year for the next ten years. In 1975, Moore adjusted the rate to one doubling every eighteen months.


2 Note that modularity is independent of whether a system is monolithic or not. Even though UNIX uses a monolithic kernel, it is relatively modular in that it has well-defined kernel-internal interfaces that make it easy to add new file systems, network protocols, or device drivers.


3 This example is more practical than it may seem at first glance: oftentimes, a network connection is local, meaning that the source and destination communicate through a loop-back device. Since the network protocol processing above the loop-back layer will cancel out, that protocol processing can, at least in principle, be removed from the path processing.


4 One possible mechanism to determine the starting module will be presented later in Chapter .


5 Work conserving is often used in the context of queueing theory, but that use is only indirectly related to the way we employ the term here. The commonality is that in both contexts, the term means that no additional work is created inside a system itself.


6 Note that the Scout implementation of the path model that will be presented in Chapter does not support protection domains. But this does not mean that the path model could not be applied to systems with multiple protection domains.


7 Note that, strictly speaking, since the UDP protocol identifier is stored in the IP header, in this particular example it would be possible to classify the packet to path p1, but this is only because the example is artificially simple. In a more realistic scenario, path p1 would extend beyond UDP, meaning that the fragment could not be classified to p1.


8 Scout's rule of disallowing ambiguity is different from most packet filters, which typically adopt the semantics of delivering a message to every matching path in the case of ambiguity.


9 This is indeed a common restriction. For example, while the x-kernel [] does not explicitly enforce such a restriction, it is unable to guarantee proper demultiplexing if a connection exists with an active key in a layer beneath a layer that uses a passive key.


10 The exact algorithm is to give each scheduling policy a fixed percentage of scheduling opportunities, which is equivalent to CPU percentages if each thread uses up its alloted time slice.


11 The traces are available at http://www.cs.arizona.edu/scout/tcpip/.


12 The current version of Scout implements reference counting at the path level instead of the module level, so this problem has become less of an issue.


13 Numbers is this range have been reported in the literature for FDDI and ATM controllers [].


14 In computing this percentage, it is important to keep in mind that the number of b-cache accesses due to the i-cache is given by the number of b-cache accesses minus the number d-cache/write-buffer misses. This is typically greater than the number of i-cache misses since a miss may lead to another i-cache block being prefetched, thus resulting in two b-cache accesses.


15 Ignoring the anomalous RPC case PIN->ALL and using a conversion factor of 175 cycles/µs.


16 Round-robin instead of realtime scheduling is used for the video path since the current Scout scheduler cannot automatically determine the correct CPU percentage to allocate to the realtime policy. Using a higher round-robin priority compared to the ICMP path has this effect and is sufficient for the purpose of this demonstration.