CVS difference for ais/ai-00357.txt

Differences between 1.14 and version 1.15
Log of other versions for file ais/ai-00357.txt

--- ais/ai-00357.txt	2005/05/15 23:44:57	1.14
+++ ais/ai-00357.txt	2005/07/26 02:10:26	1.15
@@ -217,39 +217,49 @@
 A task dispatching point occurs for the currently running task T to
 which policy EDF_Across_Priorities applies whenever:
 
-  o a change to the deadline of T occurs; or
+  o a change to the deadline of T occurs;
 
-  o a decrease to the deadline of any task on a ready queue for
-    that processor occurs and the new deadline is earlier than
-    that of the running task; or
+  o there is a task on the ready queue for the active priority of T with
+    a deadline earlier than the deadline of T; or
 
   o there is a non-empty ready queue for that processor
-    with a higher priority than the priority of the running task.
+    with a higher priority than the active priority of the running task.
 
 In these cases, the currently running task is said to be preempted and is
 returned to the ready queue for its active priority.
 
-Whenever a task T to which policy EDF_Across_Priorities applies is
-added to a ready queue, other than when it is preempted, it is placed on
-the ready queue with the highest priority P, if one exists, such that:
-   o  a task is executing within a protected object with ceiling
-       priority P; and
-   o  task T has an earlier deadline than any task executing within
-      a protected object with ceiling priority P; and
-   o  the base priority of task T is greater than P.
-If no such ready queue exists the task is added to the ready
-queue for the lowest priority in the range specified as
-EDF_Across_Priorities.
-
-When the setting of the base priority of a task takes effect and the
-new priority is in the range specified as EDF_Across_Priorities,
-the task is added to the ready queue.
-
-When a task is chosen for execution it runs with the active priority
-of the ready queue from which the task was taken.
-If it inherits a higher active priority it will return to its
-original active priority when it no longer inherits the higher
-level.
+For a task T to which policy EDF_Across_Priorities applies, the active priority
+when first activated or while it is blocked is defined as the maximum of the
+following:
+
+  o the lowest priority in the range specified as EDF_Across_Priorities
+    that includes the base priority of T;
+
+  o the priorities, if any, currently inherited by T;
+
+  o the highest priority P, if any, less than the base priority of T
+    such that one or more tasks are executing within a
+    protected object with ceiling priority P and task T
+    has an earlier deadline than all such tasks.
+
+    AARM Ramification: The active priority of T might be lower than its base
+    priority.
+
+When a task T is first activated or becomes unblocked, it is added
+to the ready queue corresponding to this active priority. Until
+it becomes blocked again, the active priority of T remains no less
+than this value; it will exceed this value only while it is
+inheriting a higher priority.
+
+    AARM Discussion: These rules ensure that a task executing in a protected
+    object is preempted only by a task with a shorter deadline and a higher
+    base} priority. This matches the traditional preemption level description
+    without the need to define a new kind of protected object locking.
+
+When the setting of the base priority of a
+task takes effect and the new priority is in a range specified
+as EDF_Across_Priorities, the task is added to the ready queue
+corresponding to its new active priority, as determined above.
 
 For all the operations defined in this package, Tasking_Error
 is raised if the task identified by T has terminated. Program_Error
@@ -439,39 +449,41 @@
 A task dispatching point occurs for the currently running task @i<T> to
 which policy EDF_Across_Priorities applies whenever:
 
-@xbullet<a change to the deadline of @i<T> occurs; or>
+@xbullet<a change to the deadline of @i<T> occurs;>
 
-@xbullet<a decrease to the deadline of any task on a ready queue for
-that processor occurs and the new deadline is earlier than
-that of the running task; or>
+@xbullet<there is a task on the ready queue for the active priority of T with a
+deadline earlier than the deadline of T; or>
 
 @xbullet<there is a non-empty ready queue for that processor
-with a higher priority than the priority of the running task.>
+with a higher priority than the active priority of the running task.>
 
 In these cases, the currently running task is said to be preempted and is
 returned to the ready queue for its active priority.
 
-Whenever a task @i<T> to which policy EDF_Across_Priorities applies is
-added to a ready queue, other than when it is preempted, it is placed on
-the ready queue with the highest priority @i<P>, if one exists, such that:
-@xbullet<a task is executing within a protected object with ceiling
-priority @i<P>; and>
-@xbullet<task @i<T> has an earlier deadline than any task executing within
-a protected object with ceiling priority @i<P>; and>
-@xbullet<the base priority of task @i<T> is greater than @i<P>.>
-If no such ready queue exists the task is added to the ready
-queue for the lowest priority in the range specified as
-EDF_Across_Priorities.
-
-When the setting of the base priority of a task takes effect and the
-new priority is in the range specified as EDF_Across_Priorities,
-the task is added to the ready queue.
-
-When a task is chosen for execution it runs with the active priority
-of the ready queue from which the task was taken.
-If it inherits a higher active priority it will return to its
-original active priority when it no longer inherits the higher
-level.
+For a task @i<T> to which policy EDF_Across_Priorities applies, the active
+priority when first activated or while it is blocked is defined as the maximum
+of the following:
+
+@xbullet<the lowest priority in the range specified as EDF_Across_Priorities
+that includes the base priority of @i<T>;>
+
+@xbullet<the priorities, if any, currently inherited by @i<T>;>
+
+@xbullet<the highest priority @i<P>, if any, less than the base priority of
+@i<T> such that one or more tasks are executing within a protected object with
+ceiling priority @i<P> and task @i<T> has an earlier deadline than all such
+tasks.
+
+When a task @i<T> is first activated or becomes unblocked, it is added
+to the ready queue corresponding to this active priority. Until
+it becomes blocked again, the active priority of @i<T> remains no less
+than this value; it will exceed this value only while it is
+inheriting a higher priority.
+
+When the setting of the base priority of a
+task takes effect and the new priority is in a range specified
+as EDF_Across_Priorities, the task is added to the ready queue
+corresponding to its new active priority, as determined above.
 
 For all the operations defined in this package, Tasking_Error
 is raised if the task identified by T has terminated. Program_Error

Questions? Ask the ACAA Technical Agent