GAT(Give-And-Take): A Cooperative cache replacement policy for application-controlled file caching