The present invention relates to a resource management method and apparatus that is particularly, but not exclusively, suited to resource management of real-time systems.
The management of memory is a crucial aspect of resource management, and various methods have been developed to optimize its use. A method of handling preferred preemption points discussed in the literature [1], [2], [3] has been proposed [4] as a means to improve the efficiency of data processing systems by generalizing the use of preemption points to the management of main memory, especially in real-time systems. In this approach to memory management, rather than preempting tasks at arbitrary moments during their execution, those tasks are preferably only preempted at dedicated preemption points based on their memory usage.
In the following description, suspension of a task is referred to as task preemption, or preemption of a task, and the term “task” is used to denote a unit of execution that can compete on its own for system resources such as memory, CPU, I/O devices, etc. A task can be viewed as a succession of continually executing jobs, each of which comprises one or more sub-jobs. For example, a task could comprise “demultiplexing a video stream”, and involve reading in incoming streams, processing the streams and outputting corresponding data. These steps are carried out with respect to each incoming data stream, so that reading, processing and outputting with respect to a single stream corresponds to performing one job. Thus, when there is a plurality of packets of data to be read in and processed, the job would be performed a corresponding plurality of times. A sub-job can be considered to relate to a functional component of the job.
A known method of scheduling a plurality of tasks in a data processing system requires that each sub-job of a task have a set of suspension criteria, called suspension data, that specifies the processing preemption points and corresponding conditions for suspension of a sub-job based on its memory usage [4] [5]. The amount of memory that is used by the data processing system is thus indirectly controlled by this suspension data, via these preemption points, which specify the amounts of memory required at these preemption points in a job's execution.
Thus, these preemption points can be utilized to avoid data processing system crashes due to a lack of memory. When a real-time task is characterized as comprising a plurality of sub-jobs, its preemption points preferably or typically coincide with the sub-job boundaries of the task. However, care must be taken that the tasks themselves do no suspend themselves during a sub-job. Depending on the implementation, this suspension of by a non-preemptible sub-job can result in deadlock or in the use of too much memory.
Data indicative of memory usage of a task conforming to the suspension data associated with each sub-job of a task can, for example, be embedded into a task via a line of code that requests a descheduling event, specifying that a preemption point has been reached in the processing of the task, i.e., a sub-job boundary has been reached. That is, the set of start points of the sub-jobs of a task constitute a set of preemption points of that task. The jth preemption point Pi,j of a task τi is characterized by information related to the preemption point itself and information related to the succeeding non-preemptible sub-job interval Ii,j between the jth preemption point and the next preemption point, i.e., the (j+1)th preemption point.
At run time, a task informs the controlling operating system when it arrives at preemption points, e.g. when it starts a sub-job, switches between sub-jobs, and completes a sub-job, and the operating system decides when and where execution of a task is preempted. Ideally, preemption may occur at a preemption point or at any other point during the execution of a task.
However, in addition to the deadlock problem described above, such flexibility of choice of preemption comes at the cost of consistency under the following conditions:
A prior art preemption point approach based on main memory requirements that does not jeopardize consistency of the system, necessarily limits the preemption of all tasks to their preemption points. As is known in the art, a component (e.g. a software component, which can comprise one or more tasks) can have a programmable interface that comprises the properties, functions or methods and events that the component defines [6]. For purposes of discussion, a task τi is assumed to be accompanied by an interface 100 that includes, at a minimum, main memory data required by the task, MPi,j 101b, as illustrated in
For the purposes of discussion, a task is assumed to be periodic and real-time, and characterized by a period T and a phasing F, where 0<=F<T, which means that a task comprises a sequence of sub-jobs, the same sequence being repeated periodically, each of which is released at time F+nT, where n=0 . . . N. As an example only and as illustrated in
At least some of these sub-jobs can be preempted and the boundaries between these sub-jobs that can be preempted provide preemption points and are summarized in Table 1:
Referring also to
More specifically, suspension data 101 comprises data specifying
Table 2 illustrates the suspension data 101 for the current example (each task has its own interface, so that in the current example, the suspension data 101 corresponding to the first task τ1 comprises the data in the first row of Table 2, the suspension data 101 corresponding to the second task τ2 comprises the second row of Table 2, etc.):
Suppose a set-top box 200 is equipped with 1.5 Mbytes of memory. Under normal, or non-memory based preemption conditions, this set-top box 200 behaves as follows.
Referring now to
For tasks τ1, τ2 and τ3 Mp is thus the maximum memory requirements of τ1 (being MI1,1) plus the maximal memory requirements of task τ2 (being MI2,2) plus the maximal memory requirements of task τ3 (being MI3,2). These maximum requirements are indicated by the Table 2 entries in bold:
MP=0.7+0.8+0.3=1.8 Mbytes.
This exceeds the memory available to the set-top box 200 by 0.3 Mbytes, so that, in the absence of any precautionary measures, and if these sub-jobs are to be processed at the same time, the set-top box 200 crashes.
Referring now to
A task manager 503 receives the suspension data 101 corresponding to a newly received task and evaluates whether preemption is required or not and if it is required, passes this newly received information to the scheduler 501, requesting preemption. Suppose details of the tasks are as defined in Table 2, and assume that task τ1 (and only τ1) is currently being processed and that the scheduler is initially operating in a mode in which there are no memory-based constraints.
Suppose now that task τ2 is received by the task manager 503, which reads the suspension data 101 from its interface Int2 100, and identifies whether or not the scheduler 501 is working in accordance with memory-based preemption. Since, in this example, it is not, the task manager 503 evaluates whether the scheduler 501 needs to change to memory-based preemption. This therefore involves the task manager 503 retrieving worst case suspension data corresponding to all currently executing tasks (in this example task τ1) from a suspension data store 505, evaluating Equation 1 and comparing the evaluated worst-case memory requirements with the memory resources available. Continuing with the example introduced in Table 2, Equation 1, for τ1 and τ2, is:
This is exactly equal to the available memory, so there is no need to change the mode of operation of the scheduler 501 to memory-based preemption (i.e. there is no need to constrain the scheduler based on memory usage). Thus, if the scheduler 501 were to switch between task τ1 and task τ2—e.g. to satisfy execution time constraints of task τ2, meaning that both tasks effectively reside in memory at the same time—the processor never accesses more memory than is available.
Next, and before tasks τ1 and τ2 have completed, another task τ3 is received. The task manager 503 reads the suspension data 101 from interface Int3 associated with the task τ3, evaluating whether the scheduler 501 needs to change to memory-based preemption. Assuming that the scheduler 501 is multi-tasking tasks τ1 and τ2, the worst case memory requirements for all three tasks is now
This exceeds the available memory, so the task manager 503 requests and retrieves memory usage data MPi,j, MIi,j 101b, 101d for all three tasks from the suspension data store 505, and evaluates whether, based on this retrieved memory usage data, there are sufficient memory resources to execute all three tasks. This can be ascertained through evaluation of the following equation:
This memory requirement is lower than the available memory, meaning that, provided the tasks are preempted only at their preemption points, all three tasks can be executed concurrently.
Accordingly, the task manager 503 invokes “memory-based preemption mode” by instructing the tasks to transmit deschedule instructions to the scheduler 501 at their designated preemption points MPi,j. In this mode, the scheduler 501 allows each task to run non-preemptively from one preemption point to the next, with the constraint that, at any point in time, at most one task at a time can be at a point other than one of its preemption points. Assuming that the newly arrived task starts at a preemption point, the scheduler 501 ensures that this condition holds for the currently running tasks, thereby constraining all but one task to be at a preemption point.
Thus, in the known memory-based preemption mode, the scheduler 501 is only allowed to preempt tasks at their memory preemption points (i.e. in response to a deschedule request from the task at their memory-based preemption points). The possibility of deadlock remains if a task suspends itself because it wants to wait for exclusive use of a resource that is held by another task. This can occur when the other task is preempted while holding a lock on the resource. This can be prevented by ensuring that a task does not hold a lock on a resource at a preemption point, or in other words, the synchronisation primitives that protect a resource do not span a preemption point, i.e., a sub-job boundary.
When one of the tasks has terminated, the terminating task informs the task manager 503 that it is terminating, causing the task manager 503 to evaluate Equation 1 and if the worst case memory usage (taking into account removal of this task) is lower than that available to the scheduler 501, the task manager 503 can cancel memory-based preemption, which has the benefit of enabling the system to react faster to external events (since the processor is no longer “blocked” for the duration of the sub-jobs). In general, termination of a task is typically caused by its environment, e.g. a switch of channel by the user or a change in the data stream of the encoding applied (requiring another kind of decoding), meaning that the task manager 503 and/or scheduler 501 should be aware of the termination of a task and probably even instruct the task to terminate.
It should be noted that, when invoked, memory-based preemption constraints are obligatory.
The tasks have been described as software tasks, but a task can also be implemented in hardware. Typically, a hardware device (behaving as a hardware task) is controlled by a software task, which allocates the (worst-case) memory required by the hardware device, and subsequently instructs the hardware task to run. When the hardware task completes, it informs the software task, which subsequently de-allocates the memory. Hence, by having a controlling software task, hardware tasks can simply be dealt with as described above.
This approach, restricted as it is to preempting tasks only at preemption points, does not always allow for a best choice of sub-job preemption, does not always obtain the highest system speed-up thereby, and can result in deadlock if care is not been taken to handle synchronization primitives correctly.
The present invention provides a method and apparatus for the selection of preemption points based on main memory requirements that is more cost-effective and that maintains system consistency and, in particular, enables additional preemption strategies in which:
This invention not only resolves a problem with a prior art memory based preemption point technique, as described above, but has the following advantages. It allows trading memory for CPU cycles by being able to preempt intervals arbitrarily while still guaranteeing system consistency, i.e.,
The foregoing and other features and advantages of the invention will be apparent from the following, more detailed description of preferred embodiments as illustrated in the accompanying drawings in which reference characters refer to the same parts throughout the various views.
It is to be understood by persons of ordinary skill in the art that the following descriptions are provided for purposes of illustration and not for limitation. An artisan understands that there are many variations that lie within the spirit of the invention and the scope of the appended claims. Unnecessary detail of known functions and operations may be omitted from the current description so as not to obscure the present invention.
High volume electronic (HVE) consumer systems, such as digital TV sets, digitally improved analog TV sets and set-top boxes (STBs) must provide real-time services while remaining cost-effective and robust. Consumer products, by their nature, are heavily resource constrained. As a consequence, the available resources have to be used very efficiently, while preserving typical qualities of HVE consumer systems, such as robustness, and meeting stringent timing requirements. Concerning robustness, no one expects, for example, a TV set to fail with the message “please reboot the system”.
Significant parts of the media processing in HVE consumer systems are implemented in on-board software that handles multiple concurrent streams of data, and in particular must very efficiently manage system resources, such as main memory, in a multi-tasking environment. Consider a set-top box as an example of an HVE consumer system requiring real-time resource management. Conventionally, as illustrated in
The control processor 401, in a preferred embodiment, is configured to process a plurality of real-time tasks relating to the control of the set-top box 200, including changing channels, selection of a menu option displayed on the user interface 205, decoding incoming data streams, recording incoming data streams using the long term storage device 406 and replaying them, etc. The operation of the set-top box is determined by these real-time control tasks based on characteristics of the set-top box 100, incoming video signals via line 411, user inputs via user interface 205, and any other ancillary input.
As illustrated in
One trivial implementation of the above is to let the synchronization primitives coincide with preemption points. The drawback is that when synchronization primitives are invoked frequently in the code, a lot of small intervals are introduced.
A more generic implementation is the following. To the suspension data of an interval is added the identifiers Rk of the resources k that are protected in that interval. The scheduler/task manager can use this information to ensure that either all intervals using resource Rk are preemptible or they are all non-preemptible.
In a preferred embodiment, the method includes defining each task such that a pair of primitives does not span a task (or sub-job of the task) boundary, specifying a subset of task as preemptible or an non-preemptible depending on whether or not the task protect usage of at least one common resource, receiving first data identifying maximum memory and exclusive resource Rk usage associated with each of the plurality of tasks; receiving second data identifying memory available for processing the plurality of tasks; and identifying, on the basis of the first and second data, whether there is sufficient memory available to process the tasks. Monitoring, and suspending steps are then applied to tasks which can be preempted in the next interval and only in response to identifying insufficient memory.
Referring now to
A task manager 503 receives the suspension data 101 corresponding to a newly received task and evaluates whether or not preemption is required and possible and if it is required and possible, passes this newly received information to the scheduler 501, requesting preemption. The suspension data includes not only memory usage information but the resources Rk exclusively used by the task. Suppose details of the tasks are as defined in Table 2, and assume that task τ1 (and only τ1) is currently being processed and that the scheduler is initially operating in a mode in which there are no memory-based constraints.
Suppose now that task τ2 is received by the task manager 503, which reads the suspension data 101 from its interface Int2 100, and identifies whether or not the scheduler 501 is working in accordance with memory- and resource-based preemption. Since, in this example, it is not, the task manager 503 evaluates whether the scheduler 501 needs to change to memory- and resource-based preemption. This therefore involves the task manager 503 retrieving worst case memory usage suspension data corresponding to all currently executing tasks (in this example task τ1) from a suspension data store 505, evaluating Equation 1 and comparing the evaluated worst-case memory requirements with the memory resources available. Continuing with the example introduced in Table 2, Equation 1, for τ1 and τ2, is:
This is exactly equal to the available memory, so there is no need to change the mode of operation of the scheduler 501 to memory- and resource-based preemption (i.e. there is no need to constrain the scheduler based on memory and exclusive resource usage). Thus, if the scheduler 501 were to switch between task τ1 and task τ2—e.g. to satisfy execution time constraints of task τ2, meaning that both tasks effectively reside in memory at the same time and may be using their maximum amount of memory at the same time—the processor never accesses more memory than is available.
Next, and before tasks τ1 and τ2 have completed, another task τ3 is received. The task manager 503 reads the suspension data 101 from interface Int3 associated with the task τ3, evaluating whether the scheduler 501 needs to change to memory- and resource-based preemption. Assuming that all three tasks are preemptible and that the scheduler 501 is multi-tasking tasks τ1 and τ2, the worst case memory requirements for all three tasks is now
This exceeds the available memory, so the task manager 503 requests and retrieves memory usage data MPi,j, MIi,j 101b, 101d and preemptability data for all three tasks from the suspension data store 505, and evaluates whether, based on this retrieved memory usage and preemptability data, there are sufficient memory resources to execute all three tasks. This can be ascertained through evaluation of the following equation:
This memory requirement is lower than the available memory, meaning that, provided the tasks are preempted based on their memory usage, all three tasks can be executed concurrently.
Accordingly, the task manager 503 invokes “memory- and resource-based preemption mode” by instructing the tasks to transmit deschedule instructions to the scheduler 501 at their designated preemption points MPi,j. In this mode, the scheduler 501 allows. If a task's preemption data specifies exclusive use of a task set of resources Rk, then the scheduler instructs the operating system to execute all system calls with respect to resources Rk for all three tasks, the resources Rk being added to a system set of resources for which system calls are to be executed when the task begins execution.
In Table 3, RIi,j is the set of resources protected by synchronization primitives in interval j of task i.
When all intervals are non-preemptible, the system is schedulable. Also, in this case, there is no problem with synchronization of the resources and there is no need to execute the synchronization primitives.
However to reduce the latency of the system, it is possible to make some intervals preemptible without exceeding the available memory limits. For example, the system is still schedulable when:
τ1 is only preempted at preemption points P1,1 and P1,3 and during interval I1,2
τ2 is only preempted at its preemption points
τ3 is preempted arbitrarily
In Table 3, preemptible intervals are indicated in italics.
Suppose the priority of τ1 is higher then the priority of τ2, which in its in its turn is higher then τ3 then the latency of τ2 will be reduced because the intervals of τ3 are preemptible. The task manager/scheduler must further ensure that all intervals protecting a certain resource are either all preemptible or either all non-preemptible. For Rb there is a problem: because I2,1 it is preemptible and I3,2 is not. The solution is to either make interval I2,1 also preemptible or I3.2 also not preemptible. Making I2,1 preemptible does not increase the memory requirements of the system and is therefore preferable (it reduces latency).
When one of the tasks has terminated, the terminating task informs the task manager 503 that it is terminating, causing the task manager 503 to remove the task's set of resources Rk from the system set of resources and then to evaluate Equation 1. If the worst case memory usage (taking into account removal of this task) is lower than that available to the scheduler 501, the task manager 503 can cancel memory- and resource-based preemption and clear the system set of resources, which has the benefit of enabling the system to react faster to external events (since the processor is no longer “blocked” for the duration of the sub-jobs). In general, termination of a task is typically caused by its environment, e.g. a switch of channel by the user or a change in the data stream of the encoding applied (requiring another kind of decoding), meaning that the task manager 503 and/or scheduler 501 should be aware of the termination of a task and probably even instruct the task to terminate.
Therefore, the method includes monitoring termination of tasks and repeating said step of identifying availability of memory and preemptability in response to a task terminating. In one embodiment, if, after a task has terminated, there is sufficient memory to execute the remaining tasks simultaneously, the monitoring step is deemed unnecessary and tasks are allowed to progress without any monitoring of inputs in relation to memory usage
In another preferred embodiment, a scheduler is provided for use in a data processing system, the data processing system being arranged to execute a plurality of tasks defined such that a synchronization primitive releasing resources matching another synchronization primitive protecting resources contained therein does not span a task boundary and having access to a specified amount of memory for use in executing the tasks, the scheduler comprising:
a data receiver arranged to receive data identifying maximum memory usage associated with a task, exclusive resource usage of the task, and preemptability of the task, wherein a subset of said plurality of tasks protecting usage of the same resource are all identified as one of preemptible or non-nonpreemptible;
an evaluator arranged to identify, on the basis of the received data, whether there is sufficient memory to execute the tasks;
a selector arranged to select at least one task for suspension during execution of the task, said suspension coinciding with a specified memory usage by the task and the task being preemptible;
wherein, in response to the evaluator identifying that there is insufficient memory to execute the plurality of tasks,
In this embodiment, the scheduler is implemented in one of hardware and software, and the data processing system is a high volume consumer electronics device such as a digital television system.
In another embodiment, there is provided a method of transmitting data to a data processing system, the method comprising:
defining a task such that a synchronization primitive that protects usage of a resource that matches another synchronization primitive contained therein does not span the task boundary;
defining all tasks as preemptible or as non-preemptible depending on whether or not the tasks protect usage of at least one same resource;
transmitting data for use by the data processing system in processing the task; and
transmitting suspension data specifying suspension of the task based on memory usage and preemptability during processing thereof,
wherein the data processing system is configured to perform a process comprising:
monitoring for an input indicative of memory usage of the task matching the suspension data associated with the task; and
if said suspension data specifies the task is preemptible, suspending processing of said task on the basis of said monitored input.
This embodiment is therefore concerned with the distribution of the suspension data corresponding to tasks to be processed by a data processing system. The suspension data is distributed as part of a regularly broadcasted signal (e.g. additional tasks with suspension data accompanying other sources), or distributed by a service provider as part of a general upgrade of data processing systems. Moreover, the data processing system can be updated via a separate link, or device (e.g. floppy-disk or CD-ROM).
While the preferred embodiments of the present invention have been illustrated and described, it will be understood by those skilled in the art that various changes and modifications may be made, and equivalents may be substituted for elements thereof without departing from the true scope of the present invention. In addition, many modifications may be made to adapt the teaching of the present invention to a particular situation without departing from its central scope. Therefore it is intended that the present invention not be limited to the particular embodiments disclosed as the best mode contemplated for carrying out the present invention, but that the present invention include all embodiments falling within the scope of the appended claims.
The following references support corresponding references numbers in the text and are hereby included herein by reference as if fully set forth herein:
Filing Document | Filing Date | Country | Kind | 371c Date |
---|---|---|---|---|
PCT/IB04/52312 | 11/4/2004 | WO | 4/11/2006 |
Number | Date | Country | |
---|---|---|---|
60518007 | Nov 2003 | US |