computer systems: a programmer's perspective (3rd ed.). randal bryant and david o'hallaron (prentice hall).