1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>AARM95 - Task Execution - Task Activation</TITLE>
<META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
<META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
<STYLE type="text/css">
DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
TT {font-family: "Courier New", monospace}
DT {display: compact}
DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
DIV.Index {font-family: "Times New Roman", Times, serif}
DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left: 10.0em; margin-bottom: 0.6em}
DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 15.0em; margin-bottom: 0.6em}
UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
DD.Hanging {margin-left: 6.0em}
DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.IndentedHanging {margin-left: 2.0em}
DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.HangingInBulleted {margin-left: 4.0em}
DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.SmallHanging {margin-left: 7.5em}
DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.SmallIndentedHanging {margin-left: 2.0em}
DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.SmallHangingInBulleted {margin-left: 5.0em}
DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.Enumerated {margin-left: 2.0em}
DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.SmallEnumerated {margin-left: 2.5em}
DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
</STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-9-1.html">Previous</A> <A HREF="AA-9-3.html">Next</A></P>
<HR>
<H1> 9.2 Task Execution - Task Activation</H1>
<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal"> <A NAME="I3512"></A>The execution of a task of
a given task type consists of the execution of the corresponding <FONT FACE="Arial, Helvetica">task_body</FONT>.
<A NAME="I3513"></A><A NAME="I3514"></A><A NAME="I3515"></A><A NAME="I3516"></A>The
initial part of this execution is called the <I>activation</I> of the
task; it consists of the elaboration of the <FONT FACE="Arial, Helvetica">declarative_part</FONT>
of the <FONT FACE="Arial, Helvetica">task_body</FONT>. <A NAME="I3517"></A>Should
an exception be propagated by the elaboration of its <FONT FACE="Arial, Helvetica">declarative_part</FONT>,
the activation of the task is defined to have <I>failed</I>, and it becomes
a completed task.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal"> A task object (which represents one task) can
be created either as part of the elaboration of an <FONT FACE="Arial, Helvetica">object_declaration</FONT>
occurring immediately within some declarative region, or as part of the
evaluation of an <FONT FACE="Arial, Helvetica">allocator</FONT>. All
tasks created by the elaboration of <FONT FACE="Arial, Helvetica">object_declaration</FONT>s
of a single declarative region (including subcomponents of the declared
objects) are activated together. Similarly, all tasks created by the
evaluation of a single <FONT FACE="Arial, Helvetica">allocator</FONT>
are activated together. The activation of a task is associated with the
innermost <FONT FACE="Arial, Helvetica">allocator</FONT> or <FONT FACE="Arial, Helvetica">object_declaration</FONT>
that is responsible for its creation. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>The initialization
of an <FONT FACE="Arial, Helvetica">object_declaration</FONT> or <FONT FACE="Arial, Helvetica">allocator</FONT>
can indirectly include the creation of other objects that contain tasks.
For example, the default expression for a subcomponent of an object created
by an <FONT FACE="Arial, Helvetica">allocator</FONT> might call a function
that evaluates a completely different <FONT FACE="Arial, Helvetica">allocator</FONT>.
Tasks created by the two allocators are <I>not</I> activated together.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal"> For tasks created by the elaboration of <FONT FACE="Arial, Helvetica">object_declaration</FONT>s
of a given declarative region, the activations are initiated within the
context of the <FONT FACE="Arial, Helvetica">handled_sequence_of_statements</FONT>
(and its associated <FONT FACE="Arial, Helvetica">exception_handler</FONT>s
if any -- see <A HREF="AA-11-2.html">11.2</A>), just prior to executing
the statements of the <FONT FACE="Arial, Helvetica">_sequence</FONT>.
[For a package without an explicit body or an explicit <FONT FACE="Arial, Helvetica">handled_sequence_of_statements</FONT>,
an implicit body or an implicit <FONT FACE="Arial, Helvetica">null_statement</FONT>
is assumed, as defined in <A HREF="AA-7-2.html">7.2</A>.] </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>If Tasking_Error
is raised, it can be handled by handlers of the <FONT FACE="Arial, Helvetica">handled_sequence_of_statements</FONT>.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal"> For tasks created by the evaluation of an <FONT FACE="Arial, Helvetica">allocator</FONT>,
the activations are initiated as the last step of evaluating the <FONT FACE="Arial, Helvetica">allocator</FONT>,
after completing any initialization for the object created by the <FONT FACE="Arial, Helvetica">allocator</FONT>,
and prior to returning the new access value.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal"> <A NAME="I3518"></A><A NAME="I3519"></A>The task
that created the new tasks and initiated their activations (the <I>activator</I>)
is blocked until all of these activations complete (successfully or not).
<A NAME="I3520"></A>Once all of these activations are complete, if the
activation of any of the tasks has failed [(due to the propagation of
an exception)], Tasking_Error is raised in the activator, at the place
at which it initiated the activations. Otherwise, the activator proceeds
with its execution normally. Any tasks that are aborted prior to completing
their activation are ignored when determining whether to raise Tasking_Error.
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>Note that
a task created by an <FONT FACE="Arial, Helvetica">allocator</FONT> does
not necessarily depend on its activator; in such a case the activator's
termination can precede the termination of the newly created task. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>Tasking_Error
is raised only once, even if two or more of the tasks being activated
fail their activation. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal"> Should the task that created the new tasks never
reach the point where it would initiate the activations (due to an abort
or the raising of an exception), the newly created tasks become terminated
and are never activated. </DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>5 An entry of a task can
be called before the task has been activated.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>6 If several tasks are activated
together, the execution of any of these tasks need not await the end
of the activation of the other tasks.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>7 A task can become completed
during its activation either because of an exception or because it is
aborted (see <A HREF="AA-9-8.html">9.8</A>).</FONT></DIV>
<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em"> <I>Example of task
activation:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Examples"><TT><B>procedure</B> P <B>is</B><BR>
A, B : Server; <I>-- elaborate the task objects A, B</I><BR>
C : Server; <I>-- elaborate the task object C</I><BR>
<B>begin</B><BR>
<I>-- the tasks A, B, C are activated together before the first statement</I><BR>
...<BR>
<B>end</B>;</TT></DIV>
<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We have replaced the term <I>suspended</I>
with <I>blocked</I>, since we didn't want to consider a task blocked
when it was simply competing for execution resources. "Suspended"
is sometimes used more generally to refer to tasks that are not actually
running on some processor, due to the lack of resources.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>This clause has been rewritten
in an attempt to improve presentation. </FONT></DIV>
<HR>
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-9-1.html">Previous</A> <A HREF="AA-9-3.html">Next</A> <A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>
|