Homework must be submitted electronically to
<csci555@usc.edu>.
It should have a subject of “Homework
1.” You must submit ASCII text without
embedded formatting commands or markup. That means, among other things,
no postscript, no Microsoft Word, no PDF, no FrameMaker, no TeX, no
groff, no DocBook, no HTML, no XML, and no JavaDoc. Do not submit your
homework as an attachment to your e-mail. Do not base 64 encode it. Do
not Rot13 encode it. Plain ASCII text. You may PGP sign it, but are
not required to do so. Do not PGP encrypt it. If you submit something
that is not unmarked-up ASCII, it is functionally the same as turning
nothing in.
Homework turned in on the due date is not penalized, one day late is 25% off (that is the grade will be multiplied by 0.75), 2 days late is 50% off, and 3 days late is 75% off. No work will be accepted more than 3 days late. I will generally use the Date: line of the mail, but should the situation merit it, I am not above looking through mail system logs to confirm the submission time. I should not have to mention it, but forging a Date: line to avoid a late deduction is grounds for an F.
Do the work yourself. Computer science is a collaborative science, and I encourage you to talk over the ideas in the homework with other students. However, the final submission, that is, the text of the homework, must be composed individually by each student. If you hand in homework that is identical to another student, you risk failing the class. (In fact the only way that you would not fail the class in such a circumstance would be if one student had copied another student without the knowledge of the copied student; the copied student would not be penalized.) That is an awfully large risk for 10% of your total grade. Do the work yourself.
As with all work for csci555, this work is subject to the USC code of Student Conduct. Read it, learn it, live it. Should you have any questions on how to apply the code, do not hesitate to contact me or the Office of Student Judicial Affairs and Community Standards. Should it prove possible, do not plagiarize work from sources outside the class. Plagiarizing homework is grounds for failing the class. It is perfectly all right to properly cite external sources, should you find some that are useful.
Answers will not be graded on their beauty of expression. Answers will be graded on whether they show a logical approach and sensible explanation. Short, simple sentences are fine. What is important is that your ideas are clear to the reader, and that they answer the question. Of course, no answer will be penalized because it is beautifully expressed, either.
Each question has equal weight.
| 1. | A good hash function maps its input to its output in such a way that small changes to the input result in large changes to the output that are difficult to predict. For example, changing a few bits of a file can result in a very different value when it is hashed. Decentralized systems like CAN[Ratnasamy01] and FreeNet[Clarke00] use hashing to assign data to nodes. Explain why a hash function used for this purpose (in other words, why are the properties of hashes useful in this domain?). Explain a centralized alternative implementation that accomplishes the same thing. Your centralized alternative does not need to provide equivalent performance or resilience, just provide the same data distribution function. |
| 2. | Consider the binding process in Birrell and Nelson's RPC system[Birrell84] in terms of the vocabulary of naming introduced by Sollins[Sollins03]. Starting from the (type, instance) pair describe the namespaces that a client must traverse in order to get the information needed to send a request. Describe each namespace in terms of structure (what do the names look like?), and what knowing a name in each space allows a process to do. |
| 3. | On page 239 of the Li & Hudak paper[Li89] (in Section 3.3), the authors provide assessments of the message overhead of page invalidations on machines using individual, broadcast, and multicast implementations. Explain how they arrive at these numbers, and explain why they count messages the way they do. |
| 4. | Sketch a monitor[Lampson80] implementation in Linda[Carriero85]. Describe the tuples needed for a static monitor and associated condition variables; explain how to acquire a monitor lock, wait on a condition variable, and broadcast to release all processes waiting on the condition in your implementation. You may initialize the tuple space however you would like. |
[Ratnasamy01] “A scalable content-addressable network,” SIGCOMM 2001, ACM Press, 2001, 161-172,
[Clarke00] “Freenet: A Distributed Anonymous Information Storage Retrieval System,” ICSI Workshop on Design Issues in Anonymity and Unobservability, July 2000,
[Birrell84] “Implementing Remote Procedure Calls,” ACM Transactions on Computer Systems, ACM, vol. 2, no. 1, February 1984, 39-59,
[Sollins03] “Effective Design of Naming Systems for Networks,” unpublished draft, February 2003,
[Li89] “Memory Coherence in Shared Virtual Memory Systems,” ACM Transactions on Computer Systems, ACM, vol. 7, no. 4, November 1989, 321-359,
[Lampson80] “Experiences with Processors and Monitors in Mesa,” Communications of the ACM, vol. 23, no. 2, February 1980, 105-117,
[Carriero85] “The S/Net's Linda Kernel,” ACM Transactions on Compututer Systems, ACM Press, vol. 4, no. 2, 1986, 110-129,