This semester I was TA in a class called Building Database systems, Taught by Philippe Bonnet. The class had a strong systems design focus and the book that was used was Principles of Computer System Desing by Jerome H. Saltzer and M. Frans Kaashoek. In general I enjoyed the book. I think it has a unique and simple way of explaining key concepts in computer system design. With that said, I had some issues regarding some of the problems in the book. In general they were related with the consistency of the problem texts. This post is a list of the ones that I can remember. I’m not going to go very deep into the contents of the specific sections as I assume that you will buy/get the book if you are interested.
- Problem 2 (page 428): Question 2.1.B asks if “the insert RPC stub on the Web server sometimes returns OK without inserting the triple into the storage system”. Additionally the insert procedure is described as “adds the triple to the TSS if it is not already there and returns OK”. I think that this description fails to properly distinguish two things: first, when there is no triplet in the TSS and the RPC call fails to insert one; and second, when there is a triplet in the TSS and the call to insert the same triplet does not insert it because it’s already there. In this particular question this difference is very important because the answer changes depending on which you mean. If you are referring to the first one, then the answer is probably that 2.1.B is not seen. On the other hand if you are referring to the second one, then the answer is probably that 2.1.B is seen. (2.2.B has the same inconsistency)
- Problem 7 (page 443): There are some inconsistencies with the way the transfer block is handled throughout the problem. In the beginning (page443:4th paragraph) we are presented transfer as a block of memory and both the client and the service map to that address block. In the description of init_service we are again told that transfer is a block since it is called with the allocate_block function (Page 248 refers to allocate_block as returning the physical address of the block). The problem description continues to say “… copies the LRPC into the transfer page. …”; This passage hints that transfer is not a block and in fact is a page that needs to be translated into a block (page:246 numeral 1,2). On the same paragraph it continues to say “… writes the result parameters in the transfer block and transfers…”; this adds to the inconsistency referring to transfer as a block again. Finally en the 7.2 question on page 445 it asks “For the LRPC to work correctly, must the two virtual address transfer have the same value….”; this again refers to transfer as a virtual address adding to the inconsistency. My intuition here is that transfer is a block and should be referred to as a block through out all the problem 7.7.
- The answer to 7.7.A (page 446) requires making assumptions about receive, but the problem states that “(the code for the procedure at the address receive is not shown because it is not important for the questions)”, which hints at the answer being in another place. The question is inconsistent in telling you that you shouldn’t look for answers in receive, when in fact one of the answers is there. Notice that this also happens with 7.7.{B,C,D} but to a lesser degree.
- The answer to 7.7.A (page 446) requires assuming that receive copies whatever is in transfer to its private address space. But in the problem there is no place where this assumption is hinted at. Note that Return_LRPC copying the return statement from receive from transfer says absolutely nothing about how transfer is implemented.
These 4 are the ones that I have fresh in my memory :)