Starting a prefetch too early might force us to evict blocks which are requested fairly soon so that we have to initiate more prefetches to avoid stalling for these blocks.
On the request to g, we start prefetching h and evict c and hence have to stall for one time unit before h is in cache.
To ensure that every block is in cache at its first reference, we require that the total fetch of a block on intervals before its first reference should be 1 and the total evict of the block on these intervals should be 0.
In interval I, we evict the block which is partially or completely in C whose next reference is furthest.
We can evict a instead of b in I and fetch back a in those intervals where b is fetched.
If I [element of] I is the interval associated with time t and a is the only block fetched and b the only block evicted in I, then we fetch a and evict b at time t.