 What data do we fetch? The most interesting thing here is the locality. It turns out that if I request a piece of data, I'm likely to be interested in nearby data. That can be data that's local either in space or in time. Things that I've used recently, I'm likely to reuse again. Things that are close by my piece of data I'm likely to want to use as well. If you have an array of data, and I request the first piece of data out of an array, chances are I'm going to be back for the second element in that array. So if I'm going to fetch a bunch of data, I might want to just grab the entire array if I have that option. In general, we don't. We'll pull blocks or pages from higher level structures. We'll just pull whichever block or page contains the byte that we're immediately interested in. I want this byte, and I'm just going to grab it into all of the surrounding data. The memory is laid out so that the byte you've requested is just an element of a single block, so we grab that block and we copy that entire block. But this gives us spatial locality as well. We're not just pulling in the one byte you've requested. We're pulling in some related information.