Understanding cache abstraction