In an example embodiment, an adaptive method of prefetching data blocks
from an input/output device comprises predicting the address of each read
operation reading a data block from the input/output device, the
prediction based on the address of the immediately preceding read
operation from the input/output device; tracking, for each read
operation, whether each read operation reads a block data from the same
address of the input/output device predicted for the read operation; and
prefetching a data block for a read operation from the input/output
device in accordance with the state of a state machine, the state of the
state machine depending upon whether immediately preceding read
operations read a data block from the same address of the input/output
device predicted for the read operations.