Synchronization Problems for a Cache
1. What if two processes try to get the same block concurrently, and the block is not resident?
2. What if a process requests to write block A while a put is already in progress on block A?
3. What if a get must replace a dirty block A in order to allocate a buffer to fetch block B?
This will happen if the block/buffer at the head of the free list is dirty.
What if another process requests to get A during the put?
4. How to handle read/write requests on shared files atomically?
Unix guarantees that a read will not return the partial result of a concurrent write, and that concurrent writes do not interleave.