1. A method for decomposing a data access request from a file system into a plurality of lower-level I/O tasks, comprising: representing a logical combination and configuration of one or more physical storage components of said file system as a hierarchical set of objects; generating a parent I/O task from a first object in said hierarchical set of objects in response to said data access request from the file system; generating a child I/O task from a second object in said hierarchical set of objects to implement at least a portion of said parent I/O task; suspending the parent I/O task until said child I/O task is completed; executing said child I/O task in response to an occurrence of an event that a resource required by the child I/O task is available, such that scheduling of said child I/O task is not conditional on execution of said parent I/O task; and resuming the parent I/O task upon an event indicating the completion of said child I/O task, said event indicating to the parent I/O task that the child I/O task has completed.