The general scheduling problem has been described in different ways in different fields. The classical problem of job sequencing in production management has influenced most of the solutions to this problem, which generally assumes a set of resources that could provide service to a set of consumers. The main objective is to find an efficient policy for managing the access to the resources by the consumers to optimize some desired performance measures.
In distributed systems, the scheduling problem arises because the concurrent parts of a program or set of programs must be arranged in time and space so that the overall performance of the system is optimized. A program can be viewed as a collection of tasks, which may run serially or in parallel. There are some precedence constraints among the tasks that must be enforced.
The goal of scheduling is to determine an assignment of tasks to processing elements and an order in which tasks are executed. If there are no precedence relations among the tasks forming a program, this problem is known as the task allocation problem.
The problem of scheduling program tasks on multiprocessor systems is known to be NP-complete in general as well as in several special cases. There are only a few known polynomial-time scheduling algorithms. The intractability of the scheduling problem has led to a large number of heuristics, each of which may work under different circumstances.
Scheduling techniques can be classified based on the availability of program task information as deterministic and nondeterministic. In deterministic scheduling, all the information about tasks to be scheduled and their relations to one another is entirely known before execution time.
In non-deterministic scheduling, some information may not be known before the program executes. Conditional branches and loops are two program constructs that may cause non-determinism. Scheduling non-deterministic programs can be achieved using static or dynamic methods.
Dynamic scheduling is usually implemented as some kind of load-balancing heuristic. The disadvantage of dynamic scheduling is the overhead incurred to determine the schedule while the program is running. In deterministic (static) scheduling, each task in the program has a static assignment to a particular processor, and each time that task is submitted for execution, it is assigned to that processor. A combination of static and dynamic methods is referred to as a hybrid method.