Real-Time Systems and Programming Languages (3rd Edition)

Table of Contents


1 Introduction to Real-Time Systems

1.1 Definition of a real-time system
1.2 Examples of real-time systems
1.3 Characteristics of real-time systems
Summary
Further reading
2 Designing Real-Time Systems
2.1 Levels of notation
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 Programming in the Small
3.1 Overview of Ada, Java, C and occam2
3.2 Lexical conventions
3.3 Overall style
3.4 Data types
3.5 Control structures
3.6 Subprograms
Summary
Further reading
Exercises
4 Programming in the Large
4.1 Information hiding
4.2 Separate compilation
4.3 Abstract data types
4.4 Object-oriented programming
4.5 Reusability
Summary
Further reading
Exercises
5 Reliability and Fault Tolerance
5.1 Reliability, failure and faults
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 Exceptions and Exception Handling
6.1 Exception handling in older real-time languages
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 Concurrent Programming
7.1 The notion of process
7.2 Concurrent execution
7.3 Process representation
7.4 A simple embedded system
Summary
Further reading
Exercises
8 Shared Variable-Based Synchronization and
   Communication
8.1 Mutual exclusion and condition
     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 Message-Based Synchronization and Communication
9.1 Process synchronization
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 Atomic Actions, Concurrent Processes and Reliability
10.1 Atomic actions
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 Resource Control
11.1 Resource control and atomic actions
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 Real-Time Facilities
12.1 The notion of time
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 Scheduling
13.1 Simple process model
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 Distributed Systems
14.1 Distributed system definition
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 Low-Level Programming
15.1 Hardware input/output mechanisms
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 The Execution Environment
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 drainage
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
18 Conclusions

Appendix