Preface |
|
xv | |
Acknowledgments |
|
xxi | |
|
1 Fundamentals of Real-Time Systems |
|
|
1 | (26) |
|
1.1 Concepts and Misconceptions |
|
|
2 | (13) |
|
1.1.1 Definitions for Real-Time Systems |
|
|
2 | (12) |
|
1.1.2 Usual Misconceptions |
|
|
14 | (1) |
|
1.2 Multidisciplinary Design Challenges |
|
|
15 | (1) |
|
1.2.1 Influencing Disciplines |
|
|
16 | (1) |
|
1.3 Birth and Evolution of Real-Time Systems |
|
|
16 | (5) |
|
1.3.1 Diversifying Applications |
|
|
17 | (2) |
|
1.3.2 Advancements behind Modern Real-Time Systems |
|
|
19 | (2) |
|
|
21 | (3) |
|
|
24 | (3) |
|
|
25 | (2) |
|
2 Hardware for Real-Time Systems |
|
|
27 | (52) |
|
2.1 Basic Processor Architecture |
|
|
28 | (8) |
|
2.1.1 Von Neumann Architecture |
|
|
29 | (1) |
|
2.1.2 Instruction Processing |
|
|
30 | (3) |
|
2.1.3 Input/Output and Interrupt Considerations |
|
|
33 | (3) |
|
|
36 | (7) |
|
2.2.1 Different Classes of Memory |
|
|
36 | (2) |
|
2.2.2 Memory Access and Layout Issues |
|
|
38 | (3) |
|
2.2.3 Hierarchical Memory Organization |
|
|
41 | (2) |
|
2.3 Architectural Advancements |
|
|
43 | (9) |
|
2.3.1 Pipelined Instruction Processing |
|
|
45 | (1) |
|
2.3.2 Superscalar and Very Long Instruction Word Architectures |
|
|
46 | (2) |
|
2.3.3 Multi-Core Processors |
|
|
48 | (2) |
|
2.3.4 Complex Instruction Set versus Reduced Instruction Set |
|
|
50 | (2) |
|
2.4 Peripheral Interfacing |
|
|
52 | (10) |
|
2.4.1 Interrupt-Driven Input/Output |
|
|
53 | (3) |
|
2.4.2 Direct Memory Access |
|
|
56 | (2) |
|
2.4.3 Analog and Digital Input/Output |
|
|
58 | (4) |
|
2.5 Microprocessor versus Microcontroller |
|
|
62 | (6) |
|
|
62 | (2) |
|
2.5.2 Standard Microcontrollers |
|
|
64 | (2) |
|
2.5.3 Custom Microcontrollers |
|
|
66 | (2) |
|
2.6 Distributed Real-Time Architectures |
|
|
68 | (5) |
|
|
68 | (3) |
|
2.6.2 Time-Triggered Architectures |
|
|
71 | (2) |
|
|
73 | (1) |
|
|
74 | (5) |
|
|
76 | (3) |
|
3 Real-Time Operating Systems |
|
|
79 | (70) |
|
3.1 From Pseudokernels to Operating Systems |
|
|
80 | (17) |
|
3.1.1 Miscellaneous Pseudokernels |
|
|
82 | (5) |
|
3.1.2 Interrupt-Only Systems |
|
|
87 | (3) |
|
3.1.3 Preemptive Priority Systems |
|
|
90 | (1) |
|
3.1.4 Hybrid Scheduling Systems |
|
|
90 | (5) |
|
3.1.5 The Task Control Block Model |
|
|
95 | (2) |
|
3.2 Theoretical Foundations of Scheduling |
|
|
97 | (9) |
|
3.2.1 Scheduling Framework |
|
|
98 | (1) |
|
3.2.2 Round-Robin Scheduling |
|
|
99 | (1) |
|
3.2.3 Cyclic Code Scheduling |
|
|
100 | (2) |
|
3.2.4 Fixed-Priority Scheduling: Rate-Monotonic Approach |
|
|
102 | (2) |
|
3.2.5 Dynamic Priority Scheduling: Earliest Deadline First Approach |
|
|
104 | (2) |
|
3.3 System Services for Application Programs |
|
|
106 | (21) |
|
|
107 | (2) |
|
|
109 | (1) |
|
|
110 | (2) |
|
|
112 | (2) |
|
3.3.5 Deadlock and Starvation Problems |
|
|
114 | (4) |
|
3.3.6 Priority Inversion Problem |
|
|
118 | (4) |
|
3.3.7 Timer and Clock Services |
|
|
122 | (1) |
|
3.3.8 Application Study: A Real-Time Structure |
|
|
123 | (4) |
|
3.4 Memory Management Issues |
|
|
127 | (6) |
|
3.4.1 Stack and Task Control Block Management |
|
|
127 | (1) |
|
3.4.2 Multiple-Stack Arrangement |
|
|
128 | (1) |
|
3.4.3 Memory Management in the Task Control Block Model |
|
|
129 | (1) |
|
3.4.4 Swapping, Overlaying, and Paging |
|
|
130 | (3) |
|
3.5 Selecting Real-Time Operating Systems |
|
|
133 | (9) |
|
3.5.1 Buying versus Building |
|
|
134 | (1) |
|
3.5.2 Selection Criteria and a Metric for Commercial Real-Time Operating Systems |
|
|
135 | (3) |
|
3.5.3 Case Study: Selecting a Commercial Real-Time Operating System |
|
|
138 | (2) |
|
3.5.4 Supplementary Criteria for Multi-Core and Energy-Aware Support |
|
|
140 | (2) |
|
|
142 | (1) |
|
|
143 | (6) |
|
|
146 | (3) |
|
4 Programming Languages for Real-Time Systems |
|
|
149 | (48) |
|
4.1 Coding of Real-Time Software |
|
|
150 | (4) |
|
4.1.1 Fitness of a Programming Language for Real-Time Applications |
|
|
151 | (1) |
|
4.1.2 Coding Standards for Real-Time Software |
|
|
152 | (2) |
|
|
154 | (2) |
|
|
156 | (6) |
|
4.3.1 Modularity and Typing Issues |
|
|
156 | (1) |
|
4.3.2 Parameter Passing and Dynamic Memory Allocation |
|
|
157 | (2) |
|
|
159 | (2) |
|
4.3.4 Cardelli's Metrics and Procedural Languages |
|
|
161 | (1) |
|
4.4 Object-Oriented Languages |
|
|
162 | (5) |
|
4.4.1 Synchronizing Objects and Garbage Collection |
|
|
162 | (2) |
|
4.4.2 Cardelli's Metrics and Object-Oriented Languages |
|
|
164 | (1) |
|
4.4.3 Object-Oriented versus Procedural Languages |
|
|
165 | (2) |
|
4.5 Overview of Programming Languages |
|
|
167 | (11) |
|
|
167 | (2) |
|
|
169 | (1) |
|
|
170 | (1) |
|
|
171 | (1) |
|
|
172 | (2) |
|
|
174 | (3) |
|
4.5.7 Special Real-Time Languages |
|
|
177 | (1) |
|
4.6 Automatic Code Generation |
|
|
178 | (3) |
|
4.6.1 Toward Production-Quality Code |
|
|
178 | (2) |
|
4.6.2 Remaining Challenges |
|
|
180 | (1) |
|
4.7 Compiler Optimizations of Code |
|
|
181 | (11) |
|
4.7.1 Standard Optimization Techniques |
|
|
182 | (6) |
|
4.7.2 Additional Optimization Considerations |
|
|
188 | (4) |
|
|
192 | (1) |
|
|
193 | (4) |
|
|
195 | (2) |
|
5 Requirements Engineering Methodologies |
|
|
197 | (70) |
|
5.1 Requirements Engineering for Real-Time Systems |
|
|
198 | (4) |
|
5.1.1 Requirements Engineering as a Process |
|
|
198 | (1) |
|
5.1.2 Standard Requirement Classes |
|
|
199 | (2) |
|
5.1.3 Specification of Real-Time Software |
|
|
201 | (1) |
|
5.2 Formal Methods in System Specification |
|
|
202 | (15) |
|
5.2.1 Limitations of Formal Methods |
|
|
205 | (1) |
|
5.2.2 Finite State Machines |
|
|
205 | (5) |
|
|
210 | (3) |
|
|
213 | (4) |
|
5.3 Semiformal Methods in System Specification |
|
|
217 | (8) |
|
5.3.1 Structured Analysis and Structured Design |
|
|
218 | (3) |
|
5.3.2 Object-Oriented Analysis and the Unified Modeling Language |
|
|
221 | (3) |
|
5.3.3 Recommendations on Specification Approach |
|
|
224 | (1) |
|
5.4 The Requirements Document |
|
|
225 | (7) |
|
5.4.1 Structuring and Composing Requirements |
|
|
226 | (2) |
|
5.4.2 Requirements Validation |
|
|
228 | (4) |
|
|
232 | (1) |
|
|
233 | (2) |
|
5.7 Appendix 1: Case Study in Software Requirements Specification |
|
|
235 | (32) |
|
|
235 | (3) |
|
5.7.2 Overall Description |
|
|
238 | (7) |
|
5.7.3 Specific Requirements |
|
|
245 | (20) |
|
|
265 | (2) |
|
6 Software Design Approaches |
|
|
267 | (112) |
|
6.1 Qualities of Real-Time Software |
|
|
268 | (7) |
|
6.1.1 Eight Qualities from Reliability to Verifiability |
|
|
269 | (6) |
|
6.2 Software Engineering Principles |
|
|
275 | (9) |
|
6.2.1 Seven Principles from Rigor and Formality to Traceability |
|
|
275 | (6) |
|
6.2.2 The Design Activity |
|
|
281 | (3) |
|
6.3 Procedural Design Approach |
|
|
284 | (9) |
|
6.3.1 Parnas Partitioning |
|
|
284 | (2) |
|
|
286 | (6) |
|
6.3.3 Design in Procedural Form Using Finite State Machines |
|
|
292 | (1) |
|
6.4 Object-Oriented Design Approach |
|
|
293 | (9) |
|
6.4.1 Advantages of Object Orientation |
|
|
293 | (2) |
|
|
295 | (3) |
|
6.4.3 Design Using the Unified Modeling Language |
|
|
298 | (3) |
|
6.4.4 Object-Oriented versus Procedural Approaches |
|
|
301 | (1) |
|
|
302 | (9) |
|
|
303 | (2) |
|
|
305 | (1) |
|
|
306 | (1) |
|
6.5.4 Agile Methodologies |
|
|
307 | (4) |
|
|
311 | (1) |
|
|
312 | (2) |
|
6.8 Appendix 1: Case Study in Designing Real-Time Software |
|
|
314 | (65) |
|
|
314 | (1) |
|
6.8.2 Overall Description |
|
|
315 | (1) |
|
6.8.3 Design Decomposition |
|
|
316 | (55) |
|
6.8.4 Requirements Traceability |
|
|
371 | (4) |
|
|
375 | (4) |
|
7 Performance Analysis Techniques |
|
|
379 | (38) |
|
7.1 Real-Time Performance Analysis |
|
|
380 | (18) |
|
7.1.1 Theoretical Preliminaries |
|
|
380 | (2) |
|
7.1.2 Arguments Related to Parallelization |
|
|
382 | (3) |
|
7.1.3 Execution Time Estimation from Program Code |
|
|
385 | (6) |
|
7.1.4 Analysis of Polled-Loop and Coroutine Systems |
|
|
391 | (1) |
|
7.1.5 Analysis of Round-Robin Systems |
|
|
392 | (2) |
|
7.1.6 Analysis of Fixed-Period Systems |
|
|
394 | (2) |
|
7.1.7 Analysis of Nonperiodic Systems |
|
|
396 | (2) |
|
7.2 Applications of Queuing Theory |
|
|
398 | (7) |
|
7.2.1 Single-Server Queue Model |
|
|
398 | (2) |
|
7.2.2 Arrival and Processing Rates |
|
|
400 | (1) |
|
7.2.3 Buffer Size Calculation |
|
|
401 | (1) |
|
7.2.4 Response Time Modeling |
|
|
402 | (1) |
|
7.2.5 Other Results from Queuing Theory |
|
|
403 | (2) |
|
7.3 Input/Output Performance |
|
|
405 | (3) |
|
7.3.1 Buffer Size Calculation for Time-Invariant Bursts |
|
|
405 | (1) |
|
7.3.2 Buffer Size Calculation for Time-Variant Bursts |
|
|
406 | (2) |
|
7.4 Analysis of Memory Requirements |
|
|
408 | (3) |
|
7.4.1 Memory Utilization Analysis |
|
|
408 | (2) |
|
7.4.2 Optimizing Memory Usage |
|
|
410 | (1) |
|
|
411 | (2) |
|
|
413 | (4) |
|
|
415 | (2) |
|
8 Additional Considerations for the Practitioner |
|
|
417 | (60) |
|
8.1 Metrics in Software Engineering |
|
|
418 | (11) |
|
8.1.1 Lines of Source Code |
|
|
419 | (1) |
|
8.1.2 Cyclomatic Complexity |
|
|
420 | (1) |
|
|
421 | (2) |
|
|
423 | (4) |
|
|
427 | (1) |
|
8.1.6 Metrics for Object-Oriented Software |
|
|
428 | (1) |
|
8.1.7 Criticism against Software Metrics |
|
|
428 | (1) |
|
8.2 Predictive Cost Modeling |
|
|
429 | (4) |
|
|
429 | (2) |
|
8.2.2 Intermediate and Detailed COCOMO 81 |
|
|
431 | (2) |
|
|
433 | (1) |
|
8.3 Uncertainty in Real-Time Systems |
|
|
433 | (5) |
|
8.3.1 The Three Dimensions of Uncertainty |
|
|
434 | (1) |
|
8.3.2 Sources of Uncertainty |
|
|
435 | (2) |
|
8.3.3 Identifying Uncertainty |
|
|
437 | (1) |
|
8.3.4 Dealing with Uncertainty |
|
|
438 | (1) |
|
8.4 Design for Fault Tolerance |
|
|
438 | (9) |
|
8.4.1 Spatial Fault-Tolerance |
|
|
440 | (3) |
|
8.4.2 Software Black Boxes |
|
|
443 | (1) |
|
8.4.3 TV-Version Programming |
|
|
443 | (1) |
|
8.4.4 Built-in-Test Software |
|
|
444 | (3) |
|
8.4.5 Spurious and Missed Interrupts |
|
|
447 | (1) |
|
8.5 Software Testing and Systems Integration |
|
|
447 | (18) |
|
|
448 | (6) |
|
8.5.2 Debugging Approaches |
|
|
454 | (2) |
|
8.5.3 System-Level Testing |
|
|
456 | (2) |
|
8.5.4 Systems Integration |
|
|
458 | (4) |
|
8.5.5 Testing Patterns and Exploratory Testing |
|
|
462 | (3) |
|
8.6 Performance Optimization Techniques |
|
|
465 | (5) |
|
8.6.1 Scaled Numbers for Faster Execution |
|
|
465 | (2) |
|
8.6.2 Look-Up Tables for Functions |
|
|
467 | (1) |
|
8.6.3 Real-Time Device Drivers |
|
|
468 | (2) |
|
|
470 | (1) |
|
|
471 | (6) |
|
|
473 | (4) |
|
9 Future Visions on Real-Time Systems |
|
|
477 | (23) |
|
9.1 Vision: Real-Time Hardware |
|
|
479 | (6) |
|
9.1.1 Heterogeneous Soft Multi-Cores |
|
|
481 | (2) |
|
9.1.2 Architectural Issues with Individual Soft Cores |
|
|
483 | (1) |
|
9.1.3 More Advanced Fieldbus Networks and Simpler Distributed Nodes |
|
|
484 | (1) |
|
9.2 Vision: Real-Time Operating Systems |
|
|
485 | (3) |
|
9.2.1 One Coordinating System Task and Multiple Isolated Application Tasks |
|
|
486 | (1) |
|
9.2.2 Small, Platform Independent Virtual Machines |
|
|
487 | (1) |
|
9.3 Vision: Real-Time Programming Languages |
|
|
488 | (3) |
|
9.3.1 The UML++ as a Future "Programming Language" |
|
|
489 | (2) |
|
9.4 Vision: Real-Time Systems Engineering |
|
|
491 | (2) |
|
9.4.1 Automatic Verification of Software |
|
|
491 | (1) |
|
9.4.2 Conservative Requirements Engineering |
|
|
492 | (1) |
|
9.4.3 Distance Collaboration in Software Projects |
|
|
492 | (1) |
|
9.4.4 Drag-and-Drop Systems |
|
|
493 | (1) |
|
9.5 Vision: Real-Time Applications |
|
|
493 | (4) |
|
9.5.1 Local Networks of Collaborating Real-Time Systems |
|
|
494 | (1) |
|
9.5.2 Wide Networks of Collaborating Real-Time Systems |
|
|
495 | (1) |
|
9.5.3 Biometric Identification Device with Remote Access |
|
|
495 | (2) |
|
9.5.4 Are There Any Threats behind High-Speed Wireless Communications? |
|
|
497 | (1) |
|
|
497 | (2) |
|
|
499 | (1) |
References |
|
500 | (3) |
Glossary |
|
503 | (32) |
About the Authors |
|
535 | (2) |
Index |
|
537 | |