16.7 It effectively divides the namespace, and thus the load on any one or set of servers. It also allows local control of local domains (presumably the folks running the cs.washington.edu server know the most about the machines in *.cs.washington.edu). 16.9 Having it lower in the stack means you can use lower-level information to possibly improve performance (such as doing link-level retransmission), but it means that services higher up that don't need this functionality pay for it anyway. 16.15 The advantage is that everything works the same as it did before, and users don't have to consider the fact that the network exists and worry about maintaining it. The disadvantage is that if something goes wrong, users aren't aware of why it's going wrong and can't make intelligent decisions. 17.3 a) NFS is location transparent in the sense that the NFS mount can be anywhere in the file system, and the user has no notion of what server is backing that NFS mount. AFS is also location transparent, since users have no notion of servers at all, only of a shared namespace of files b) NFS is not location independent. Since each NFS mount is at a different location in the file system, if a file moves to a different server, it will be in a different part of the file system and thus its name has changed. AFS is location independent because clients do not know which server the file is on until they ask for it, and they ask for it by a consistent name within the shared namespace 17.7 Caching locally means that a hit in the cache avoids the network delay, and thus is faster. However, since this cache will only be for a limited user population (those users on the client machine), the hit rate will be much lower. In contrast, caching on the server means a higher hit rate, but with a larger cost for hits. A second issue is cache coherence: if we cache on the client side, we have to make sure these cache entries are invalidated when the info changes. This is easy to do on the server side since it's the server that knows when the entries change 17.8 a) Clients are clustered within a local LAN with a representative server, which keeps performance acceptable despite a growing network, and reduces network load. b) There is extensive use of caching at the client side, so that most operations can be performed locally with no server involvement c) Clients maintain the local namespace for files that can't or don't need to be managed in the shared namespace, further reducing the load on the servers 15.1 Better programming methodology, such as using functions that are not susceptible to buffer overflows and more stringent code review, reduces the number of buffer overflows that exist in a given program. Hardware methods include hardware support to note and prevent out-of- bounds memory access or protect key data structures, like the return address on the stack, reducing the possibility that an exploit of a buffer overflow bug will lead to a compromise. As always, the combination of these two methods provides the best defense. 15.7 If they had correctly written a set of firewall rules that only allowed out expected traffic (from explicitly installed services, say), then even if a worm infected a system, it could not spread to others via the system, limiting its effectiveness. This limits the flexibility of users within the system. If they run an unexpected service, even if benign it will prevented from running until the firewall rules are changed.