Title and Copyright Information
About This Guide
Purpose of this Guide
New and Changed Features
Structure of this Guide
Related Documents
Using the man Command
Conventions
Reader's Comments
1 Introduction to Realtime Programming
1.1 Realtime Overview
1.2 DIGITAL UNIX Realtime System Capabilities
1.2.1 The Value of a Preemptive Kernel
1.2.1.1 Nonpreemptive Kernel
1.2.1.2 Preemptive Kernel
1.2.1.3 Comparing Latency
1.2.2 Fixed-Priority Scheduling Policies
1.2.3 Realtime Clocks and Timers
1.2.4 Memory Locking
1.2.5 Asynchronous I/O
1.2.6 Synchronized I/O
1.2.7 Realtime Interprocess Communication
1.3 Process Synchronization
1.3.1 Waiting for a Specified Period of Time or an Absolute Time
1.3.2 Waiting for Semaphores
1.3.3 Waiting for Communication
1.3.4 Waiting for Another Process
1.3.5 Realtime Needs and System Solutions
1.4 POSIX Standards
1.5 Enabling DIGITAL UNIX Realtime Features
1.6 Building Realtime Applications
1.6.1 Defining the POSIX Environment
1.6.2 Compiling Realtime Applications
2 The DIGITAL UNIX Scheduler
2.1 Scheduler Fundamentals
2.1.1 Schedulable Entities
2.1.2 Thread States
2.1.3 Scheduler Database
2.1.4 Quantum
2.1.5 Scheduler Transitions
2.2 Scheduling Policies
2.2.1 The Nature of the Work
2.2.2 Timesharing Scheduling
2.2.3 Fixed-Priority Scheduling
2.2.3.1 First-In First-Out Scheduling
2.2.3.2 Round-Robin Scheduling
2.3 Process Priorities
2.3.1 Priorities for the nice Interface
2.3.2 Priorities for the Realtime Interface
2.3.3 Displaying Realtime Priorities
2.3.4 Configuring Realtime Priorities
2.4 Scheduling Functions
2.4.1 Determining Limits
2.4.2 Retrieving the Priority and Scheduling Policy
2.4.3 Setting the Priority and Scheduling Policy
2.4.4 Yielding to Another Process
2.5 Priority and Policy Example
3 Shared Memory
3.1 Memory Objects
3.1.1 Opening a Shared-Memory Object
3.1.2 Opening Memory-Mapped Files
3.1.3 Mapping Memory-Mapped Files
3.1.4 Using File Functions
3.1.5 Controlling Memory-Mapped Files
3.1.6 Removing Shared Memory
3.2 Locking Shared Memory
3.3 Using Shared Memory with Semaphores
4 Memory Locking
4.1 Memory Management
4.2 Memory-Locking and Unlocking Functions
4.2.1 Locking and Unlocking a Specified Region
4.2.2 Locking and Unlocking an Entire Process Space
5 Signals
5.1 POSIX Signal Functions
5.2 Signal Handling Basics
5.2.1 Specifying a Signal Action
5.2.2 Setting Signal Masks and Blocking Signals
5.2.3 Suspending a Process and Waiting for a Signal
5.2.4 Setting Up an Alternate Signal Stack
5.3 Realtime Signal Handling
5.3.1 Additional Realtime Signals
5.3.2 Queuing Signals to a Process
5.3.2.1 The siginfo_t Structure
5.3.2.2 The ucontext_t and sigcontext Structures
5.3.2.3 Sending a Realtime Signal With the sigqueue Function
5.3.3 Asynchronous Delivery of Other Realtime Signals
5.3.4 Responding to Realtime Signals Using the sigwaitinfo and sigtimedwait Functions
6 Clocks and Timers
6.1 Clock Functions
6.1.1 Retrieving System Time
6.1.2 Setting the Clock
6.1.3 Converting Time Values
6.1.4 System Clock Resolution
6.1.5 High-Resolution Clock
6.2 Types of Timers
6.3 Timers and Signals
6.4 Data Structures Associated with Timing Facilities
6.4.1 Using the timespec Data Structure
6.4.2 Using the itimerspec Data Structure
6.4.3 Using the sigevent Data Structure
6.5 Timer Functions
6.5.1 Creating Timers
6.5.2 Setting Timer Values
6.5.3 Retrieving Timer Values
6.5.4 Getting the Overrun Count
6.5.5 Disabling Timers
6.6 High-Resolution Sleep
6.7 Clocks and Timers Example
7 Asynchronous Input and Output
7.1 Data Structures Associated with Asynchronous I/O
7.1.1 Identifying the Location
7.1.2 Specifying a Signal
7.2 Asynchronous I/O Functions
7.2.1 Reading and Writing
7.2.2 Using List-Directed Input/Output
7.2.3 Determining Status
7.2.4 Canceling I/O
7.2.5 Blocking to Completion
7.2.6 Asynchronous File Synchronization
7.3 Asynchronous I/O to Raw Devices
7.4 Asynchronous I/O Examples
7.4.1 Using the aio Functions
7.4.2 Using the lio_listio Function
8 File Synchronization
8.1 How to Assure Data or File Integrity
8.1.1 Using Function Calls
8.1.2 Using File Descriptors
9 Semaphores
9.1 Overview of Semaphores
9.2 The Semaphore Interface
9.2.1 Creating and Opening a Semaphore
9.2.2 Locking and Unlocking Semaphores
9.2.3 Priority Inversion with Semaphores
9.2.4 Closing a Semaphore
9.3 Semaphore Example
10 Messages
10.1 Message Queues
10.2 The Message Interface
10.2.1 Opening a Message Queue
10.2.2 Sending and Receiving Messages
10.2.3 Asynchronous Notification of Messages
10.2.4 Prioritizing Messages
10.2.5 Using Message Queue Attributes
10.2.6 Closing and Removing a Message Queue
10.3 Message Queue Examples
11 Realtime Performance and System Tuning
11.1 Realtime Responsiveness
11.1.1 Interrupt Service Routine Latency
11.1.2 Process Dispatch Latency
11.2 Improving Realtime Responsiveness
A DIGITAL UNIX Realtime Functional Summary