An I/O Separation Model and its Applications to On-Demand I/O on Commodity Platforms