File: RM-D-9.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (165 lines) | stat: -rw-r--r-- 12,667 bytes parent folder | download
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>Ada95 - Delay Accuracy</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="RM-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-D-8.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-D-10.html">Next</A></P>
<HR>
<H1> D.9 Delay Accuracy</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;This clause specifies performance requirements
for the <FONT FACE="Arial, Helvetica">delay_statement</FONT>. The rules
apply both to <FONT FACE="Arial, Helvetica">delay_relative_statement</FONT>
and to <FONT FACE="Arial, Helvetica">delay_until_statement</FONT>. Similarly,
they apply equally to a simple <FONT FACE="Arial, Helvetica">delay_statement</FONT>
and to one which appears in a <FONT FACE="Arial, Helvetica">delay_alternative</FONT>.
</DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;The effect of the
<FONT FACE="Arial, Helvetica">delay_statement</FONT> for Real_Time.Time
is defined in terms of Real_Time.Clock: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>If C<SUB><FONT SIZE=+1><FONT SIZE=-2>1</FONT></FONT></SUB>
is a value of Clock read before a task executes a <FONT FACE="Arial, Helvetica">delay_relative_statement</FONT>
with duration D, and C<SUB><FONT SIZE=+1><FONT SIZE=-2>2</FONT></FONT></SUB>
is a value of Clock read after the task resumes execution following that
<FONT FACE="Arial, Helvetica">delay_statement</FONT>, then C<SUB><FONT SIZE=+1><FONT SIZE=-2>2</FONT></FONT></SUB>
- C<SUB><FONT SIZE=+1><FONT SIZE=-2>1</FONT></FONT></SUB> &gt;= D.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>If C is a value of Clock read after a task resumes execution
following a <FONT FACE="Arial, Helvetica">delay_until_statement</FONT>
with Real_Time.Time value T, then C &gt;= T. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I6623"></A><A NAME="I6624"></A>A simple
<FONT FACE="Arial, Helvetica">delay_statement</FONT> with a negative
or zero value for the expiration time does not cause the calling task
to be blocked; it is nevertheless a potentially blocking operation (see
<A HREF="RM-9-5-1.html">9.5.1</A>).</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;When a <FONT FACE="Arial, Helvetica">delay_statement</FONT>
appears in a <FONT FACE="Arial, Helvetica">delay_alternative</FONT> of
a <FONT FACE="Arial, Helvetica">timed_entry_call</FONT> the selection
of the entry call is attempted, regardless of the specified expiration
time. When a <FONT FACE="Arial, Helvetica">delay_statement</FONT> appears
in a <FONT FACE="Arial, Helvetica">selective_accept_alternative</FONT>,
and a call is queued on one of the open entries, the selection of that
entry call proceeds, regardless of the value of the delay expression.
</DIV>

<H4 ALIGN=CENTER>Documentation Requirements</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;The implementation shall document the minimum
value of the delay expression of a <FONT FACE="Arial, Helvetica">delay_relative_statement</FONT>
that causes the task to actually be blocked.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;The implementation shall document the minimum
difference between the value of the delay expression of a <FONT FACE="Arial, Helvetica">delay_until_statement</FONT>
and the value of Real_Time.Clock, that causes the task to actually be
blocked. </DIV>

<H4 ALIGN=CENTER>Metrics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;The implementation
shall document the following metrics: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>An upper bound on the execution time, in processor clock
cycles, of a <FONT FACE="Arial, Helvetica">delay_relative_statement</FONT>
whose requested value of the delay expression is less than or equal to
zero.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>An upper bound on the execution time, in processor clock
cycles, of a <FONT FACE="Arial, Helvetica">delay_until_statement</FONT>
whose requested value of the delay expression is less than or equal to
the value of Real_Time.Clock at the time of executing the statement.
Similarly, for Calendar.Clock.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A NAME="I6625"></A><A NAME="I6626"></A>An upper bound
on the <I>lateness</I> of a <FONT FACE="Arial, Helvetica">delay_relative_statement</FONT>,
for a positive value of the delay expression, in a situation where the
task has sufficient priority to preempt the processor as soon as it becomes
ready, and does not need to wait for any other execution resources. The
upper bound is expressed as a function of the value of the delay expression.
The lateness is obtained by subtracting the value of the delay expression
from the <I>actual duration</I>. The actual duration is measured from
a point immediately before a task executes the <FONT FACE="Arial, Helvetica">delay_statement</FONT>
to a point immediately after the task resumes execution following this
statement.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>An upper bound on the lateness of a <FONT FACE="Arial, Helvetica">delay_until_statement</FONT>,
in a situation where the value of the requested expiration time is after
the time the task begins executing the statement, the task has sufficient
priority to preempt the processor as soon as it becomes ready, and it
does not need to wait for any other execution resources. The upper bound
is expressed as a function of the difference between the requested expiration
time and the clock value at the time the statement begins execution.
The lateness of a <FONT FACE="Arial, Helvetica">delay_until_statement</FONT>
is obtained by subtracting the requested expiration time from the real
time that the task resumes execution following this statement. </LI></UL>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>32&nbsp;&nbsp;The execution time of
a <FONT FACE="Arial, Helvetica">delay_statement</FONT> that does not
cause the task to be blocked (e.g. ``<B>delay</B> 0.0;'' ) is of interest
in situations where delays are used to achieve voluntary round-robin
task dispatching among equal-priority tasks.</FONT></DIV>

<HR>
<P><A HREF="RM-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-D-8.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-D-10.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-TTL.html">Legal</A></P>
</BODY>
</HTML>