The Scheduler maintains the amount of idle time left for each group Gi. With a new request for object X, the scheduler retrieves from the catalog the record corresponding to X to determine its media type, MX. Next, it retrieves from the catalog the record corresponding to media type MX to determine B(MX). Starting with the current group Gi, the Scheduler compares the idle time of Gi with the disk service time to retrieve a block of size B(MX). The disk service time with Gi is:
Sdisk(Gi)=(B(MX))/(RD) + max rotational latency + seek(CYL)It assumes the maximum seek time (i.e., seek(CYL)) because the blocks to be retrieved during Gi have already been scheduled and the new request cannot benefit from the scan policy. Assuming that Gi is servicing n-1 requests and its idle time can accommodate Sdisk(Gi), its idle time is reduced by Sdisk(Gi). Prior to initiating the retrieval of blocks that belong to group Gi+1, the scheduler adjusts the idle time of group Gi to reflect that the active active requests can benefit from the scan policy. Thus, the idle time of Gi is adjusted as follows:
idle(Gi) = idle(Gi) - [seek(CYL)+(n-1) ×seek((CYL)/(n-1))]+[n ×seek((CYL)/(n))]The subtracted portion reflects the maximum seek time of the request that was just scheduled and the seek time of n-1 other active requests. The added portion reflects the n seeks incurred during the next time period by this group with each (CYL)/(n) cylinders apart.
If current group Gi has insufficient idle time, the Scheduler proceeds to check the idle time of other groups Gj where j=(i+1) mod g, 0 < j < g and j !=i. Assuming that Gj is servicing n-1 active requests, the disk service time with Gj is:
Sdisk(Gj)=(B(MX))/(RD) + max rotational latency + [n ×seek((CYL)/(n))] - [(n-1) ×seek((CYL)/(n-1))]If the idle time of Gj is greater than Sdisk(Gj), then the new request is assigned to Gj and its idle time is subtracted by Sdisk(Gj).
#