Source: https://people.computing.clemson.edu/~yfeaste/modules1/BlockIO.pdf