| |
| |
Preface | |
| |
| |
Acknowledgments | |
| |
| |
| |
Fundamentals of Real-Time Systems | |
| |
| |
| |
Concepts and Misconceptions | |
| |
| |
| |
Definitions for Real-Time Systems | |
| |
| |
| |
Usual Misconceptions | |
| |
| |
| |
Multidisciplinary Design Challenges | |
| |
| |
| |
Influencing Disciplines | |
| |
| |
| |
Birth and Evolution of Real-Time Systems | |
| |
| |
| |
Diversifying Applications | |
| |
| |
| |
Advancements behind Modern Real-Time Systems | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
| |
Hardware for Real-Time Systems | |
| |
| |
| |
Basic Processor Architecture | |
| |
| |
| |
Von Neumann Architecture | |
| |
| |
| |
Instruction Processing | |
| |
| |
| |
Input/Output and Interrupt Considerations | |
| |
| |
| |
Memory Technologies | |
| |
| |
| |
Different Classes of Memory | |
| |
| |
| |
Memory Access and Layout Issues | |
| |
| |
| |
Hierarchical Memory Organization | |
| |
| |
| |
Architectural Advancements | |
| |
| |
| |
Pipelined Instruction Processing | |
| |
| |
| |
Superscalar and Very Long Instruction Word Architectures | |
| |
| |
| |
Multi-Core Processors | |
| |
| |
| |
Complex Instruction Set versus Reduced Instruction Set | |
| |
| |
| |
Peripheral Interfacing | |
| |
| |
| |
Interrupt-Driven Input/Output | |
| |
| |
| |
Direct Memory Access | |
| |
| |
| |
Analog and Digital Input/Output | |
| |
| |
| |
Microprocessor versus Microcontroller | |
| |
| |
| |
Microprocessors | |
| |
| |
| |
Standard Microcontrollers | |
| |
| |
| |
Custom Microcontrollers | |
| |
| |
| |
Distributed Real-Time Architectures | |
| |
| |
| |
Fieldbus Networks | |
| |
| |
| |
Time-Triggered Architectures | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
| |
Real-Time Operating Systems | |
| |
| |
| |
From Pseudokernels to Operating Systems | |
| |
| |
| |
Miscellaneous Pseudokernels | |
| |
| |
| |
Interrupt-Only Systems | |
| |
| |
| |
Preemptive Priority Systems | |
| |
| |
| |
Hybrid Scheduling Systems | |
| |
| |
| |
The Task Control Block Model | |
| |
| |
| |
Theoretical Foundations of Scheduling | |
| |
| |
| |
Scheduling Framework | |
| |
| |
| |
Round-Robin Scheduling | |
| |
| |
| |
Cyclic Code Scheduling | |
| |
| |
| |
Fixed-Priority Scheduling: Rate-Monotonic Approach | |
| |
| |
| |
Dynamic Priority Scheduling: Earliest Deadline First Approach | |
| |
| |
| |
System Services for Application Programs | |
| |
| |
| |
Linear Buffers | |
| |
| |
| |
Ring Buffers | |
| |
| |
| |
Mailboxes | |
| |
| |
| |
Semaphores | |
| |
| |
| |
Deadlock and Starvation Problems | |
| |
| |
| |
Priority Inversion Problem | |
| |
| |
| |
Timer and Clock Services | |
| |
| |
| |
Application Study: A Real-Time Structure | |
| |
| |
| |
Memory Management Issues | |
| |
| |
| |
Stack and Task Control Block Management | |
| |
| |
| |
Multiple-Stack Arrangement | |
| |
| |
| |
Memory Management in the Task Control Block Model | |
| |
| |
| |
Swapping, Overlaying, and Paging | |
| |
| |
| |
Selecting Real-Time Operating Systems | |
| |
| |
| |
Buying versus Building | |
| |
| |
| |
Selection Criteria and a Metric for Commercial Real-Time Operating Systems | |
| |
| |
| |
Case Study: Selecting a Commercial Real-Time Operating System | |
| |
| |
| |
Supplementary Criteria for Multi-Core and Energy-Aware Support | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
| |
Programming Languages for Real-Time Systems | |
| |
| |
| |
Coding of Real-Time Software | |
| |
| |
| |
Fitness of a Programming Language for Real-Time Applications | |
| |
| |
| |
Coding Standards for Real-Time Software | |
| |
| |
| |
Assembly Language | |
| |
| |
| |
Procedural Languages | |
| |
| |
| |
Modularity and Typing Issues | |
| |
| |
| |
Parameter Passing and Dynamic Memory Allocation | |
| |
| |
| |
Exception Handling | |
| |
| |
| |
Cardelli's Metrics and Procedural Languages | |
| |
| |
| |
Object-Oriented Languages | |
| |
| |
| |
Synchronizing Objects and Garbage Collection | |
| |
| |
| |
Cardelli's Metrics and Object-Oriented Languages | |
| |
| |
| |
Object-Oriented versus Procedural Languages | |
| |
| |
| |
Overview of Programming Languages | |
| |
| |
| |
Ada | |
| |
| |
| |
C | |
| |
| |
| |
C++ | |
| |
| |
| |
C# | |
| |
| |
| |
Java | |
| |
| |
| |
Real-Time Java | |
| |
| |
| |
Special Real-Time Languages | |
| |
| |
| |
Automatic Code Generation | |
| |
| |
| |
Toward Production-Quality Code | |
| |
| |
| |
Remaining Challenges | |
| |
| |
| |
Compiler Optimizations of Code | |
| |
| |
| |
Standard Optimization Techniques | |
| |
| |
| |
Additional Optimization Considerations | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
| |
Requirements Engineering Methodologies | |
| |
| |
| |
Requirements Engineering for Real-Time Systems | |
| |
| |
| |
Requirements Engineering as a Process | |
| |
| |
| |
Standard Requirement Classes | |
| |
| |
| |
Specification of Real-Time Software | |
| |
| |
| |
Formal Methods in System Specification | |
| |
| |
| |
Limitations of Formal Methods | |
| |
| |
| |
Finite State Machines | |
| |
| |
| |
Statecharts | |
| |
| |
| |
Petri Nets | |
| |
| |
| |
Semiformal Methods in System Specification | |
| |
| |
| |
Structured Analysis and Structured Design | |
| |
| |
| |
Object-Oriented Analysis and the Unified Modeling Language | |
| |
| |
| |
Recommendations on Specification Approach | |
| |
| |
| |
The Requirements Document | |
| |
| |
| |
Structuring and Composing Requirements | |
| |
| |
| |
Requirements Validation | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
| |
Appendix 1: Case Study in Software Requirements Specification | |
| |
| |
| |
Introduction | |
| |
| |
| |
Overall Description | |
| |
| |
| |
Specific Requirements | |
| |
| |
References | |
| |
| |
| |
Software Design Approaches | |
| |
| |
| |
Qualities of Real-Time Software | |
| |
| |
| |
Eight Qualities from Reliability to Verifiability | |
| |
| |
| |
Software Engineering Principles | |
| |
| |
| |
Seven Principles from Rigor and Formality to Traceability | |
| |
| |
| |
The Design Activity | |
| |
| |
| |
Procedural Design Approach | |
| |
| |
| |
Parnas Partitioning | |
| |
| |
| |
Structured Design | |
| |
| |
| |
Design in Procedural Form Using Finite State Machines | |
| |
| |
| |
Object-Oriented Design Approach | |
| |
| |
| |
Advantages of Object Orientation | |
| |
| |
| |
Design Patterns | |
| |
| |
| |
Design Using the Unified Modeling Language | |
| |
| |
| |
Object-Oriented versus Procedural Approaches | |
| |
| |
| |
Life Cycle Models | |
| |
| |
| |
Waterfall Model | |
| |
| |
| |
V-Model | |
| |
| |
| |
Spiral Model | |
| |
| |
| |
Agile Methodologies | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
| |
Appendix 1: Case Study in Designing Real-Time Software | |
| |
| |
| |
Introduction | |
| |
| |
| |
Overall Description | |
| |
| |
| |
Design Decomposition | |
| |
| |
| |
Requirements Traceability | |
| |
| |
References | |
| |
| |
| |
Performance Analysis Techniques | |
| |
| |
| |
Real-Time Performance Analysis | |
| |
| |
| |
Theoretical Preliminaries | |
| |
| |
| |
Arguments Related to Parallelization | |
| |
| |
| |
Execution Time Estimation from Program Code | |
| |
| |
| |
Analysis of Polled-Loop and Coroutine Systems | |
| |
| |
| |
Analysis of Round-Robin Systems | |
| |
| |
| |
Analysis of Fixed-Period Systems | |
| |
| |
| |
Analysis of Nonperiodic Systems | |
| |
| |
| |
Applications of Queuing Theory | |
| |
| |
| |
Single-Server Queue Model | |
| |
| |
| |
Arrival and Processing Rates | |
| |
| |
| |
Buffer Size Calculation | |
| |
| |
| |
Response Time Modeling | |
| |
| |
| |
Other Results from Queuing Theory | |
| |
| |
| |
Input/Output Performance | |
| |
| |
| |
Buffer Size Calculation for Time-Invariant Bursts | |
| |
| |
| |
Buffer Size Calculation for Time-Variant Bursts | |
| |
| |
| |
Analysis of Memory Requirements | |
| |
| |
| |
Memory Utilization Analysis | |
| |
| |
| |
Optimizing Memory Usage | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
| |
Additional Considerations for the Practitioner | |
| |
| |
| |
Metrics in Software Engineering | |
| |
| |
| |
Lines of Source Code | |
| |
| |
| |
Cyclomatic Complexity | |
| |
| |
| |
Halstead's Metrics | |
| |
| |
| |
Function Points | |
| |
| |
| |
Feature Points | |
| |
| |
| |
Metrics for Object-Oriented Software | |
| |
| |
| |
Criticism against Software Metrics | |
| |
| |
| |
Predictive Cost Modeling | |
| |
| |
| |
Basic COCOMO 81 | |
| |
| |
| |
Intermediate and Detailed COCOMO 81 | |
| |
| |
| |
COCOMO II | |
| |
| |
| |
Uncertainty in Real-Time Systems | |
| |
| |
| |
The Three Dimensions of Uncertainty | |
| |
| |
| |
Sources of Uncertainty | |
| |
| |
| |
Identifying Uncertainty | |
| |
| |
| |
Dealing with Uncertainty | |
| |
| |
| |
Design for Fault Tolerance | |
| |
| |
| |
Spatial Fault-Tolerance | |
| |
| |
| |
Software Black Boxes | |
| |
| |
| |
N-Version Programming | |
| |
| |
| |
Built-in-Test Software | |
| |
| |
| |
Spurious and Missed Interrupts | |
| |
| |
| |
Software Testing and Systems Integration | |
| |
| |
| |
Testing Techniques | |
| |
| |
| |
Debugging Approaches | |
| |
| |
| |
System-Level Testing | |
| |
| |
| |
Systems Integration | |
| |
| |
| |
Testing Patterns and Exploratory Testing | |
| |
| |
| |
Performance Optimization Techniques | |
| |
| |
| |
Scaled Numbers for Faster Execution | |
| |
| |
| |
Look-Up Tables for Functions | |
| |
| |
| |
Real-Time Device Drivers | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
| |
Future Visions on Real-Time Systems | |
| |
| |
| |
Vision: Real-Time Hardware | |
| |
| |
| |
Heterogeneous Soft Multi-Cores | |
| |
| |
| |
Architectural Issues with Individual Soft Cores | |
| |
| |
| |
More Advanced Fieldbus Networks and Simpler Distributed Nodes | |
| |
| |
| |
Vision: Real-Time Operating Systems | |
| |
| |
| |
One Coordinating System Task and Multiple Isolated Application Tasks | |
| |
| |
| |
Small, Platform Independent Virtual Machines | |
| |
| |
| |
Vision: Real-Time Programming Languages | |
| |
| |
| |
The UML++ as a Future "Programming Language" | |
| |
| |
| |
Vision: Real-Time Systems Engineering | |
| |
| |
| |
Automatic Verification of Software | |
| |
| |
| |
Conservative Requirements Engineering | |
| |
| |
| |
Distance Collaboration in Software Projects | |
| |
| |
| |
Drag-and-Drop Systems | |
| |
| |
| |
Vision: Real-Time Applications | |
| |
| |
| |
Local Networks of Collaborating Real-Time Systems | |
| |
| |
| |
Wide Networks of Collaborating Real-Time Systems | |
| |
| |
| |
Biometric Identification Device with Remote Access | |
| |
| |
| |
Are There Any Threats behind High-Speed Wireless Communications? | |
| |
| |
| |
Summary | |
| |
| |
| |
Exercises | |
| |
| |
References | |
| |
| |
Glossary | |
| |
| |
About the Authors | |
| |
| |
Index | |