Comp111: Operating Systems
Classroom Exercise 12
Hashes, Caches, and Addressing
Fall 2017

group member 1: ____________________________ login: ______________
group member 2: ____________________________ login: ______________
group member 3: ____________________________ login: ______________
group member 4: ____________________________ login: ______________
group member 5: ____________________________ login: ______________
group member 6: ____________________________ login: ______________
group member 7: ____________________________ login: ______________
group member 8: ____________________________ login: ______________

  1. The description of the elaborate scheme for IA64 user-space addressing:

    omits how segments -- as used in C programs -- relate to the addressing scheme. How would one represent C program segments in this page scheme, and why?

  2. Since the IA64 processor does away with the concept of segments, why does the Linux OS still maintain this concept? What would happen if we stopped organizing pages in segments in the OS?

  3. I claim that -- on average -- the map from page addresses for a segment to page table elements for a segment is dense for page addresses, while the active pages for a segment are sparse for page addresses. Why?
  4. The hardware IA64 Translation Lookaside Buffer does not behave like a standard hash in several ways.
    1. It is never a complete hash of all pages. Why?

    2. It has no collision resolution strategy. What happens if two TLB references collide in the hash?

    3. One concern with the TLB design is that processes can "thrash" by continually forcing new elements into the TLB, thus effectively livelocking all processes. How can this happen, and why?

  5. (Advanced) One of the last security holes in linux -- that is very difficult to patch -- is that processes can read TLB entries for other processes. What can one learn from that, and why is it a security problem?