21,17 → 21,17 |
|
/** |
------------ |
CVS : $Id: rm.h,v 1.4 2003-05-05 07:31:12 pj Exp $ |
CVS : $Id: rm.h,v 1.5 2004-05-17 15:03:51 anton Exp $ |
|
File: $File$ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2003-05-05 07:31:12 $ |
Revision: $Revision: 1.5 $ |
Last update: $Date: 2004-05-17 15:03:51 $ |
------------ |
|
This file contains the scheduling module RM (Rate Monotonic) |
This file contains the scheduling module RM (rate/deadline monotonic) |
|
Title: |
RM (Rate Monotonic |
RM (Rate/Deadline Monotonic) |
|
Task Models Accepted: |
HARD_TASK_MODEL - Hard Tasks (Periodic and Sporadic) |
38,61 → 38,84 |
wcet field and mit field must be != 0. They are used to set the wcet |
and period of the tasks. |
periodicity field can be either PERIODIC or APERIODIC |
drel field is ignored |
drel field must be <= mit. NOTE: a drel of 0 is interpreted as mit. |
offset field specifies a release offset relative to task_activate or |
group_activate. |
|
Guest Models Accepted: |
JOB_TASK_MODEL - a single guest task activation |
Identified by an absolute deadline and a period. |
all fieds are used |
period field is ignored |
|
Description: |
This module schedule his tasks following the classic RM scheme. |
The task guarantee is based on the factor utilization approach. |
The tasks scheduled are periodic and sporadic. The sporadic tasks |
are like hard task with periodicity set to APERIODIC; they are guaranteed |
as a periodic task with period equal to the minimum interarrival time. |
All the task are put in a queue and the scheduling is based on the |
deadline value. |
NO GUARANTEE is performed on guest tasks. The guarantee must be performed |
by the level that inserts guest tasks in the EDF level. |
|
This module schedules periodic and sporadic tasks based on fixed |
priorities according to their relative deadlines. (By default, drel |
= mit.) The task guarantee is based on a simple utilization |
approach. The utilization factor of a task is computed as |
wcet/drel. A periodic task must only be activated once; subsequent |
activations are triggered by an internal timer. By contrast, an |
sporadic task must be explicitely activated for each instance. NO |
GUARANTEE is performed on guest tasks. The guarantee must be |
performed by the level that inserts guest tasks in the RM level. |
|
Exceptions raised: |
XUNVALID_GUEST |
This level doesn't support guests. When a guest operation |
is called, the exception is raised. |
|
These exceptions are pclass-dependent... |
The following exceptions may be raised by the module: |
XDEADLINE_MISS |
If a task miss his deadline, the exception is raised. |
If a task misses its deadline and the RM_ENABLE_DL_EXCEPTION |
flag is set, this exception is raised. |
|
XWCET_VIOLATION |
If a task doesn't end the current cycle before if consume the wcet, |
an exception is raised, and the task is put in the RM_WCET_VIOLATED |
state. To reactivate it, use RM_task_activate via task_activate or |
manage directly the RM data structure. Note that the exception is not |
handled properly, an XDEADLINE_MISS exeception will also be raised at |
the period end... |
If a task executes longer than its declared wcet and the |
RM_ENABLE_WCET_EXCEPTION flag is set, this exception is raised. |
|
XACTIVATION |
If a sporadic task is activated with a rate that is greather than the |
rate declared in the model, this exception is raised and the task is NOT |
activated. |
This exception is also raised if we are trying to activate a periodic task |
stopped with task_sleep before the deadline in which the task_sleep is |
called. |
If a sporadic task is activated more often than its declared mit |
and the RM_ENABLE_ACT_EXCEPTION flag is set, this exception is |
raised. This exception is also raised if a periodic task is |
activated while not in the SLEEP state. |
|
Restrictions & special features: |
|
- Relative deadlines drel <= mit may be specified. |
- An offset > 0 will delay the activation of the task by the same |
amount of time. To synchronize a group of tasks, use the |
group_activate function. |
- This level doesn't manage the main task. |
- At init time we can choose if the level have to activate |
. the wcet check |
(If a task require more time than declared, it is stopped and put in |
the state RM_WCET_VIOLATED; a XWCET_VIOLATION exception is raised) |
. the task guarantee algorithm |
(when all task are created the system will check that the task_set |
will not use more than the available bandwidth) |
- The level use the priority field. |
- The level uses the priority and timespec_priority fields. |
- A function to return the used bandwidth of a level is provided. |
- The guest tasks don't provide the guest_endcycle function |
- At init time, the user can specify the behavior in case of |
deadline and wcet overruns. The following flags are available: |
|
(No flags enabled) - Deadline and wcet overruns are ignored. |
Pending periodic jobs are queued and are |
eventually scheduled with correct deadlines |
according to their original arrival times. |
Sporadic tasks that arrive to often are |
simply dropped. |
RM_ENABLE_DL_CHECK - When a deadline overrun occurs, the |
dl_miss counter of the task is increased. |
Same behavior for pending jobs as above. |
RM_ENABLE_WCET_CHECK - When a wcet overrun occurs, the |
wcet_miss counter of the task is increased. |
Same behavior for pending jobs as above. |
RM_ENABLE_DL_EXCEPTION - When a deadline overrun occurs, an |
exception is raised. |
RM_ENABLE_WCET_EXCEPTION - When a wcet overrun occurs, an |
exception is raised. |
RM_ENABLE_ACT_EXCEPTION When a periodic or sporadic task is activated |
too often, an exception is raised. |
|
- The functions RM_get_dl_miss, RM_get_wcet_miss, RM_get_nact, |
and RM_get_nskip can be used to find out the number of missed |
deadlines, number of wcet overruns, number of currently queued |
periodic activations, and the number of skipped sporadic activations. |
|
**/ |
|
/* |
126,22 → 149,20 |
|
__BEGIN_DECLS |
|
/*+ 1 - ln(2) +*/ |
|
#ifndef RM_MINFREEBANDWIDTH |
#define RM_MINFREEBANDWIDTH 1317922825 |
#endif |
|
|
|
/*+ flags... +*/ |
#define RM_DISABLE_ALL 0 |
#define RM_ENABLE_WCET_CHECK 1 /*+ Wcet check enabled +*/ |
#define RM_ENABLE_GUARANTEE 2 /*+ Task Guarantee enabled +*/ |
#define RM_ENABLE_ALL 3 /*+ All flags enabled +*/ |
#define RM_ENABLE_GUARANTEE 1 /*+ Task guarantee enabled +*/ |
#define RM_ENABLE_WCET_CHECK 2 /*+ Wcet monitoring enabled +*/ |
#define RM_ENABLE_DL_CHECK 4 /*+ Deadline monitoring enabled +*/ |
#define RM_ENABLE_WCET_EXCEPTION 8 /*+ Wcet overrun exception enabled +*/ |
#define RM_ENABLE_DL_EXCEPTION 16 /*+ Deadline overrun exception enabled +*/ |
#define RM_ENABLE_ACT_EXCEPTION 32 /*+ Activation exception enabled +*/ |
#define RM_ENABLE_ALL 63 /*+ All flags enabled +*/ |
|
|
/*+ Registration function: |
int flag Options to be used in this level instance... |
int flag Options to be used in this level instance |
|
returns the level number at which the module has been registered. |
+*/ |
150,5 → 171,10 |
/*+ Returns the used bandwidth of a level +*/ |
bandwidth_t RM_usedbandwidth(LEVEL l); |
|
int RM_get_dl_miss(PID p); |
int RM_get_wcet_miss(PID p); |
int RM_get_nact(PID p); |
int RM_get_nskip(PID p); |
|
__END_DECLS |
#endif |