Real-time systems design and analysis : tools for the practitioner
"An important resource, this book offers an introductory text and overview of real-time systems: systems where timeliness is a crucial part of the correctness of the system. The book contains a pragmatic overview of key topics (computer architecture and organization, operating systems, software...
Enregistré dans:
Auteur principal : | |
---|---|
Autres auteurs : | |
Format : | Livre |
Langue : | anglais |
Titre complet : | Real-time systems design and analysis : tools for the practitioner / Phillip A. Laplante, Seppo J. Ovaska |
Édition : | 4eme ed. |
Publié : |
Hoboken, N.J. :
Wiley-IEEE Press
, cop. 2012 |
Description matérielle : | 1 vol. (XXI-560 p.) |
Sujets : | |
Documents associés : | Autre format:
Real-time systems design and analysis |
- 1. Fundamentals of real-time systems
- 1.1 Concepts and misconceptions
- 1.1.1 definitions for real-time systems
- 1.1.2 Usual misconceptions
- 1.2 Multidisciplinary design challenges
- 1.2.1 Influencing disciplines
- 1.3 Birth and evolution of real-time systems
- 1.3.1 Diversifying applications
- 1.3.2 Advancements behind modern real-time systems
- 1.4 Summary
- 1.5 Exercises, references
- 2. Hardware for real-time systems
- 2.1 Basic processor architecture
- 2.1.1 Von Neumann architecture
- 2.1.2 Instruction processing
- 2.1.3 Input/output and interrupt considerations
- 2.2 Memory technologies
- 2.2.1 Different classes of memory
- 2.2.2 Memory access and layout issues
- 2.2.3 Hierarchical memory organization
- 2.3 Architectural advancements
- 2.3.1 Pipelined instruction processing
- 2.3.2 Superscalar and very long instruction word architectures
- 2.3.3 Multi-core processors
- 2.3.4 Complex instruction set versus reduced instruction set
- 2.4 Peripheral interfacing
- 2.4.1 Interrupt-driven input/output
- 2.4.2 Direct memory access
- 2.4.3 Analog and digital input/output
- 2.5 Microprocessor versus microcontroller
- 2.5.1 Microprocessors
- 2.5.2 Standard microcontrollers
- 2.5.3 Custom microcontrollers
- 2.6 Distributed real-time architectures
- 2.6.1 Fieldbus networks
- 2.6.2 Time-triggered architectures
- 2.7 Summary
- 2.8 Exercises, references
- 3. Real-time operating systems
- 3.1 From pseudokernels to operating systems
- 3.1.1 Miscellaneous pseudokernels
- 3.1.2 Interrupt-only systems
- 3.1.3 Preemptive priority systems
- 3.1.4 Hybrid scheduling systems
- 3.1.5 The task control block model
- 3.2 Theoretical foundations of scheduling
- 3.2.1 Scheduling framework
- 3.2.2 Round-robin scheduling
- 3.2.3 Cyclic code scheduling
- 3.2.4 Fixed-priority scheduling : rate-monotonic approach
- 3.2.5 Dynamic priority scheduling : earliest deadline first approach
- 3.3 System services for application programs
- 3.3.1 Linear buffers
- 3.3.2 Ring buffers
- 3.3.3 Mailboxes
- 3.3.4 Semaphores
- 3.3.5 Deadlock and starvation problems
- 3.3.6 Priority inversion problem
- 3.3.7 Timer and clock services
- 3.3.8 Application study : a real-time structure
- 3.4 Memory management issues
- 3.4.1 Stack and task control block management
- 3.4.2 Multiple-stack arrangement
- 3.4.3 Memory management in the task control block model
- 3.4.4 Swapping, overlaying, and paging
- 3.5 Selecting real-time operating systems
- 3.5.1 Buying versus building
- 3.5.2 Selection criteria and a metric for commercial real-time operating systems
- 3.5.3 Case study : selecting a commercial real-time operating system
- 3.5.4 Supplementary criteria for multi-core and energy-aware support
- 3.6.Summary
- 3.7 Exercises, references
- 4. Programming languages for real-time systems
- 4.1 Coding of real-time software
- 4.1.1 Fitness of a programming language for real-time applications
- 4.1.2 Coding standards for real-time software
- 4.2 Assembly language
- 4.3 Procedural languages
- 4.3.1.Modularity and typing issues
- 4.3.2 Parameter passing and dynamic memory allocation
- 4.3.3 Exception handling
- 4.3.4 Cardelli's metrics and procedural languages
- 4.4 Object-oriented languages
- 4.4.1 Synchronizing objects and garbage collection
- 4.4.2 Cardelli's metrics and object-oriented languages
- 4.4.3 Object-oriented versus procedural languages
- 4.5 Overview of programming languages
- 4.5.1 Ada
- 4.5.2 C
- 4.5.3 C++
- 4.5.4 C#
- 4.5.5 Java
- 4.5.6 Real-time Java
- 4.5.7 Special real-time languages
- 4.6 Automatic code generation
- 4.6.1 Toward production-quality code
- 4.6.2 Remaining challenges
- 4.7 Compiler optimizations of code
- 4.7.1 Standard optimization Techniques
- 4.7.2 Additional optimization considerations
- 4.8.Summary
- 4.9.Exercises, references
- 5. Requirements engineering methodologies
- 5.1 Requirements engineering for real-time systems
- 5.1.1 Requirements engineering as a process
- 5.1.2 Standard requirement classes
- 5.1.3 Specification of real-time software
- 5.2 Formal methods in system specification
- 5.2.1 Limitations of formal methods
- 5.2.2 Finite state machines
- 5.2.3 Statecharts
- 5.2.4 Petri nets
- 5.3 Semiformal methods in system specification
- 5.3.1 Structured analysis and structured design
- 5.3.2 Object-oriented analysis and the Unified Modeling Language
- 5.3.3 Recommendations on specification approach
- 5.4 The requirements document
- 5.4.1 Structuring and composing requirements
- 5.4.2 Requirements validation
- 5.5 Summary
- 5.6.Exercises
- 5.7 Appendix 1: case study in software requirements specification
- 5.7.1 Introduction
- 5.7.2 Overall description
- 5.7.3 Specific requirements
- 6. Software design approaches
- 6.1 Qualities of real-time software
- 6.1.1 Eight qualities from reliability to verifiability
- 6.2 Software engineering principles
- 6.2.1 Seven principles from rigor and formality to traceability
- 6.2.2 The design activity
- 6.3 Procedural design approach
- 6.3.1 Parnas partitioning
- 6.3.2 Structured design
- 6.3.3 Design in procedural form using finite state machines
- 6.4 Object-oriented design approach
- 6.4.1 Advantages of object orientation
- 6.4.2 Design patterns
- 6.4.3 Design using the Unified Modeling Language
- 6.4.4 Object-oriented versus procedural approaches
- 6.5 Life cycle models
- 6.5.1 Waterfall model
- 6.5.2 V-model
- 6.5.3 Spiral model
- 6.5.4 Agile methodologies
- 6.6.Summary
- 6.7 Exercises
- 6.8 Appendix 1 : case study in designing real-time software
- 6.8.1 Introduction
- 6.8.2 Overall description
- 6.8.3 Design decomposition
- 6.8.4 Requirements traceability
- 7. Performance analysis techniques
- 7.1 Real-time performance analysis
- 7.1.1 Theoretical preliminaries
- 7.1.2 Arguments related to parallelization
- 7.1.3 Execution time estimation from program code
- 7.1.4 Analysis of polled-loop and coroutine systems
- 7.1.5 Analysis of round-robin systems
- 7.1.6 Analysis of fixed-period systems
- 7.1.7 Analysis of nonperiodic systems
- 7.2 Applications of queuing theory
- 7.2.1 Single-server queue model
- 7.2.2 Arrival and processing rates
- 7.2.3 Buffer size calculation
- 7.2.4 Response time modeling
- 7.2.5 Other results from queuing theory
- 7.3 Input/output performance
- 7.3.1 Buffer size calculation for time-invariant bursts
- 7.3.2 Buffer size calculation for time-variant bursts
- 7.4 Analysis of memory requirements
- 7.4.1 Memory utilization analysis
- 7.4.2 Optimizing memory usage
- 7.5 Summary
- 7.6 Exercises, references
- 8. Additional considerations for the practitioner
- 8.1 Metrics in software engineering
- 8.1.1 Lines of source code
- 8.1.2 Cyclomatic complexity
- 8.1.3 Halstead's metrics
- 8.1.4 Function points
- 8.1.5 Feature points
- 8.1.6 Metrics for object-oriented software
- 8.1.7 Criticism against software metrics
- 8.2 Predictive cost modeling
- 8.2.1 Basic COCOMO 81
- 8.2.2 Intermediate and detailed COCOMO 81
- 8.2.3 COCOMO II
- 8.3 Uncertainty in real-time systems
- 8.3.1 The three dimensions of uncertainty
- 8.3.2 Sources of uncertainty
- 8.3.3 Identifying uncertainty
- 8.3.4 Dealing with uncertainty
- 8.4 Design for fault tolerance
- 8.4.1 Spatial fault-tolerance
- 8.4.2 Software black boxes
- 8.4.3 TV-version programming
- 8.4.4 Built-in-test software
- 8.4.5 Spurious and missed interrupts
- 8.5 Software testing and systems integration
- 8.5.1 Testing techniques
- 8.5.2 Debugging approaches
- 8.5.3 System-level testing
- 8.5.4 Systems integration
- 8.5.5 Testing patterns and exploratory testing
- 8.6 Performance optimization techniques
- 8.6.1 Scaled numbers for faster execution
- 8.6.2 Look-up tables for functions
- 8.6.3 Real-time device drivers
- 8.7 Summary
- 8.8 Exercises, references
- 9. Future visions on real-time systems
- 9.1 Vision : real-time hardware
- 9.1.1 Heterogeneous soft multi-cores
- 9.1.2 Architectural issues with individual soft cores
- 9.1.3 More advanced fieldbus networks and simpler distributed nodes
- 9.2 Vision : real-time operating systems
- 9.2.1 One coordinating system task and multiple isolated application tasks
- 9.2.2 Small, platform independent virtual machines
- 9.3 Vision : real-time programming languages
- 9.3.1 The UML++ as a future "programming language"
- 9.4 Vision : real-time systems engineering
- 9.4.1 Automatic verification of software
- 9.4.2 Conservative requirements engineering
- 9.4.3 Distance collaboration in software projects
- 9.4.4 Drag-and-drop systems
- 9.5 V