Programs call on the buffer manager when they need a block from disk.
Buffer manager does the following:
If the block is already in the buffer, return the address of the block in main memory
If the block is not in the buffer
Allocate space in the buffer for the block
Replacing (throwing out) some other block, if required, to make space for the new block.
Replaced block written back to disk only if it was modified since the most recent time that it was written to/fetched from the disk.
Read the block from the disk to the buffer, and return the address of the block in main memory to requester