1 Introduction to Real-Time Systems
1.1 Definition of a real-time system2 Designing Real-Time Systems
1.2 Examples of real-time systems
1.3 Characteristics of real-time systems
Summary
Further reading
2.1 Levels of notation3 Programming in the Small
2.2 Requirement specification
2.3 Design activities
2.4 Design methods
2.5 Implementation
2.6 Testing
2.7 Prototyping
2.8 Human computer interaction
2.9 Managing design
Summary
Further reading
Exercises
3.1 Overview of Ada, Java, C and occam24 Programming in the Large
3.2 Lexical conventions
3.3 Overall style
3.4 Data types
3.5 Control structures
3.6 Subprograms
Summary
Further reading
Exercises
4.1 Information hiding5 Reliability and Fault Tolerance
4.2 Separate compilation
4.3 Abstract data types
4.4 Object-oriented programming
4.5 Reusability
Summary
Further reading
Exercises
5.1 Reliability, failure and faults6 Exceptions and Exception Handling
5.2 Failure modes
5.3 Fault prevention and fault tolerance
5.4 N-Version programming
5.5 Software dynamic redundancy
5.6 The recovery block approach to software fault
tolerance
5.7 A comparison between N-version
programming and recovery blocks
5.8 Dynamic redundancy and exceptions
5.9 Measuring and predicting the reliability of
software
5.10 Safety, reliability and dependability
Summary
Further reading
Exercises
6.1 Exception handling in older real-time languages7 Concurrent Programming
6.2 Modern exception handling
6.3 Exception Handling in Ada, Java and C
6.4 Exception handling in other languages
6.5 Recovery blocks and exceptions
Summary
Further reading
Exercises
7.1 The notion of process8 Shared Variable-Based Synchronization and
7.2 Concurrent execution
7.3 Process representation
7.4 A simple embedded system
Summary
Further reading
Exercises
8.1 Mutual exclusion and condition9 Message-Based Synchronization and Communication
synchronization
8.2 Busy waiting
8.3 Suspend and resume
8.4 Semaphores
8.5 Conditional critical regions
8.6 Monitors
8.7 Protected objects
8.8 Synchronized methods
Summary
Further reading
Exercises
9.1 Process synchronization10 Atomic Actions, Concurrent Processes and Reliability
9.2 Process naming and message structure
9.3 Message-passing semantics of Ada and
occam2
9.4 Selective waiting
9.5 POSIX messages
9.6 The CHILL language
9.7 Remote procedure call
Summary
Further reading
Exercises
10.1 Atomic actions11 Resource Control
10.2 Atomic actions in concurrent languages
10.3 Atomic actions and backward error recovery
10.4 Atomic actions and forward error recovery
10.5 Asynchronous notification
10.6 POSIX signals
10.7 Asynchronous event handling in Real-Time
Java
10.8 Asynchronous transfer of control in Ada
10.9 Asynchronous transfer of control in
Real-Time Java
Summary
Further reading
Exercises
11.1 Resource control and atomic actions12 Real-Time Facilities
11.2 Resource management
11.3 Expressive power and ease of use
11.4 The requeue facility
11.5 Asymmetric naming and security
11.6 Resource usage
11.7 Deadlock
Summary
Further reading
Exercises
12.1 The notion of time13 Scheduling
12.2 Access to a clock
12.3 Delaying a process
12.4 Programming timeouts
12.5 Specifying timing requirements
12.6 Temporal scopes
12.7 Language support for temporal scopes
12.8 Fault tolerance
Summary
Further reading
Exercises
13.1 Simple process model14 Distributed Systems
13.2 The cyclic executive approach
13.3 Process-based scheduling
13.4 Utilization-based schedulability tests
13.5 Response time analysis for FPS
13.6 Response time analysis for EDF
13.7 Worst-case execution time
13.8 Sporadic and aperiodic processes
13.9 Process systems with D < T
13.10 Process interactions and blocking
13.11 Priority ceiling protocols
13.12 An extendible process model
13.13 Dynamic systems and on-line analysis
13.14 Programming priority-based systems
Summary
Further reading
Exercises
14.1 Distributed system definition15 Low-Level Programming
14.2 Overview of issues
14.3 Language support
14.4 Distributed programming systems and environments
14.5 Reliability
14.6 Distributed algorithms
14.7 Deadline scheduling in a distributed environment
Summary
Further reading
Exercises
15.1 Hardware input/output mechanisms16 The Execution Environment
15.2 Language requirements
15.3 Modula-1
15.4 Ada
15.5 Real-Time Java
15.6 Occam2
15.7 C and older real-time languages
15.8 Scheduling device drivers
15.9 Memory management
Summary
Further reading
Exercises
16.1 The role of the execution environment
16.2 Tailoring the execution environment
16.3 Scheduling models
16.4 Hardware support
Summary
Further reading
Exercises
17 A Case Study in Ada
17.1 Mine drainage18 Conclusions
17.2 The HRT-HOOD design method
17.3 The logical architecture design
17.4 The physical architecture design
17.5 Translation to Ada
17.6 Fault tolerance and distribution
Summary
Further reading
Exercises
Appendix