Advances in processor design mean that the computing power available to users on their workstations is considerable. In general users utilise only a fraction of the processing capacity of their workstations, and frequently leave them idle for significant periods of time; according to Mutka and Livny [#MutkaSRPCI##1#] only 30 of the capacity of a group of workstations was used. Whilst this is the general case, there are occasions when a user wishes to execute jobs which exceed the effective capacity of their workstations. In this case they must either wait for excessive periods of time and suffer poor response times for interactive tasks or they must employ some form of distributed scheduling. There are two components in any scheduling policy [#KruegerACOPA##1#]:
  • The local scheduling component. This determines how the local resources at a single node are allocated among the resident processes. Local scheduling is straightforward and well understood. Consequently it will not be discussed further.
  • A load distributing component. This allocates the system workload amongst the various machines in a distributed system through process transfer. Process transfer can be performed either non-preemptively through <#2744#> process placement<#2744#> or preemptively through <#2745#> process migration<#2745#>.

Figure: Scheduling Functional Units