1. A method for decomposing a data access request from a storage operating system of a storage 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 the storage operating system as a hierarchical set of objects; generating a parent I/O task from a first object in the hierarchical set of objects in response to the data access request from the storage operating system; generating a child I/O task from a second object in the hierarchical set of objects to implement at least a portion of the parent I/O task; suspending the parent I/O task until the child I/O task is completed; executing the child I/O task in response to a first event indicating a resource of the storage system required by the child I/O task is available, such that scheduling of the child I/O task is not conditional on execution of the parent I/O task; and resuming the parent I/O task in response to a second event indicating to the parent I/O task the completion of the child I/O task.