
Литература_1 / sys_arch
.pdf
QNX→ Neutrino→ RTOS
System Architecture
For release 6.4.0
♥ 2008, QNX Software Systems GmbH & Co. KG.
♥ 1996–2008, QNX Software Systems GmbH & Co. KG. All rights reserved.
Published under license by:
QNX Software Systems International Corporation
175 Terence Matthews Crescent Kanata, Ontario
K2M 1W8 Canada
Voice: +1 613 591-0931
Fax: +1 613 591-3579 Email: info@qnx.com
Web: http://www.qnx.com/
Electronic edition published 2008
QNX, Neutrino, Photon, Photon microGUI, Momentics, and Aviage are trademarks, registered in certain jurisdictions, of QNX Software Systems GmbH & Co. KG. and are used under license by QNX Software Systems International Corporation. All other trademarks belong to their respective owners.

Contents
About This Guide |
xiii |
What you’ll find in this guide |
xv |
Typographical conventions |
xvi |
Note to Windows users |
xvii |
Technical support xvii |
|
1 The Philosophy of QNX Neutrino |
1 |
|||||
Design goals |
3 |
|
|
|
|
|
An embeddable POSIX OS? |
3 |
|
|
|||
Product scaling |
3 |
|
|
|
|
|
Why POSIX for embedded systems? |
4 |
|
||||
Why QNX Neutrino for embedded systems? |
|
5 |
||||
Microkernel architecture |
6 |
|
|
|
|
|
The OS as a team of processes |
8 |
|
|
|||
A true kernel |
8 |
|
|
|
|
|
System processes |
9 |
|
|
|
|
|
Interprocess communication |
10 |
|
|
|
||
QNX Neutrino as a message-passing operating system 10 |
||||||
Network distribution of kernels |
|
11 |
|
|
||
Single-computer model |
11 |
|
|
|
||
Flexible networking |
11 |
|
|
|
|
2 The QNX Neutrino Microkernel |
13 |
|||
Introduction |
15 |
|
|
|
The implementation of QNX Neutrino 16 |
|
|||
POSIX realtime and thread extensions |
16 |
|||
System services |
16 |
|
|
|
Threads and processes |
|
17 |
|
|
Thread attributes |
20 |
|
||
Thread scheduling |
24 |
|
|
|
When are scheduling decisions are made? |
24 |
|||
Scheduling priority |
24 |
|
||
Scheduling algorithms |
26 |
|
October 16, 2008 |
Contents iii |

♥ 2008, QNX Software Systems GmbH & Co. KG.
IPC issues |
31 |
|
|
|
|
|
|
|
Thread complexity issues |
31 |
|
|
|
||||
Synchronization services |
32 |
|
|
|
|
|||
Mutexes: mutual exclusion locks |
|
33 |
|
|||||
Condvars: condition variables |
34 |
|
|
|||||
Barriers |
35 |
|
|
|
|
|
|
|
Sleepon locks |
|
38 |
|
|
|
|
|
|
Reader/writer locks |
38 |
|
|
|
|
|||
Semaphores |
38 |
|
|
|
|
|
||
Synchronization via scheduling algorithm |
39 |
|||||||
Synchronization via message passing |
40 |
|||||||
Synchronization via atomic operations |
40 |
|||||||
Synchronization services implementation |
40 |
|||||||
Clock and timer services |
41 |
|
|
|
|
|||
Time correction |
|
42 |
|
|
|
|
||
Timers |
42 |
|
|
|
|
|
|
|
Interrupt handling |
|
44 |
|
|
|
|
|
|
Interrupt latency |
45 |
|
|
|
|
|||
Scheduling latency |
45 |
|
|
|
|
|||
Nested interrupts |
|
46 |
|
|
|
|
||
Interrupt calls |
|
47 |
|
|
|
|
|
3 |
Interprocess Communication (IPC) |
51 |
|||||
|
Synchronous message passing |
53 |
|
|
|||
|
MsgReply() vs MsgError() |
56 |
|
|
|||
|
Message copying |
56 |
|
|
|
|
|
|
Simple messages 58 |
|
|
|
|
||
|
Channels and connections |
59 |
|
|
|
||
|
Pulses |
61 |
|
|
|
|
|
|
Priority inheritance and messages |
61 |
|
||||
|
Message-passing API |
62 |
|
|
|
||
|
Robust implementations with Send/Receive/Reply |
62 |
|||||
|
Events |
64 |
|
|
|
|
|
|
I/O notification |
65 |
|
|
|
||
|
Signals |
66 |
|
|
|
|
|
|
Special signals |
68 |
|
|
|
|
|
|
Summary of signals |
69 |
|
|
|
||
|
POSIX message queues |
70 |
|
|
|
||
|
Why use POSIX message queues? |
71 |
|
||||
|
File-like interface |
|
71 |
|
|
|
|
|
Message-queue functions |
72 |
|
|
iv |
Contents |
October 16, 2008 |

♥ 2008, QNX Software Systems GmbH & Co. KG.
|
Shared memory |
|
72 |
|
|
|
|
|
|
|
Shared memory with message passing |
73 |
|||||||
|
Creating a shared-memory object |
74 |
|
||||||
|
mmap() |
74 |
|
|
|
|
|
|
|
|
Initializing allocated memory |
|
78 |
|
|||||
|
Typed memory |
78 |
|
|
|
|
|
||
|
Implementation-defined behavior |
79 |
|
||||||
|
Practical examples |
83 |
|
|
|
||||
|
Pipes and FIFOs |
|
84 |
|
|
|
|
||
|
Pipes |
84 |
|
|
|
|
|
|
|
|
FIFOs |
85 |
|
|
|
|
|
|
|
4 |
The Instrumented Microkernel |
87 |
|||||||
|
Introduction |
|
89 |
|
|
|
|
|
|
|
Instrumentation at a glance |
89 |
|
|
|||||
|
Event control |
|
90 |
|
|
|
|
|
|
|
Modes of emission |
|
90 |
|
|
|
|||
|
Ring buffer |
|
91 |
|
|
|
|
|
|
|
Data interpretation |
|
91 |
|
|
|
|
||
|
System analysis with the IDE |
|
92 |
|
|||||
|
Proactive tracing |
93 |
|
|
|
|
|||
5 |
Multicore Processing |
95 |
|
||||||
|
Introduction |
|
97 |
|
|
|
|
|
|
|
Asymmetric multiprocessing (AMP) |
97 |
|
||||||
|
Symmetric multiprocessing (SMP) |
98 |
|
||||||
|
Neutrino’s microkernel approach |
99 |
|
||||||
|
Booting an x86 SMP system |
100 |
|
||||||
|
Booting a PowerPC SMP system |
100 |
|
||||||
|
How the SMP microkernel works |
101 |
|
||||||
|
Critical sections |
102 |
|
|
|
|
|||
|
Bound multiprocessing (BMP) |
103 |
|
|
|||||
|
A viable migration strategy |
104 |
|
||||||
|
Choosing between AMP, SMP, and BMP 104 |
||||||||
6 |
Process Manager |
107 |
|
|
|||||
|
Introduction |
109 |
|
|
|
|
|
|
|
|
Process management |
109 |
|
|
|
||||
|
Process primitives |
109 |
|
|
|
||||
|
Process loading |
114 |
|
|
|
|
|||
|
Memory management |
114 |
|
|
|
October 16, 2008 |
Contents v |

♥ 2008, QNX Software Systems GmbH & Co. KG.
Memory Management Units (MMUs) 115
Memory protection at run time 116
Quality control 117
|
Full-protection model |
118 |
|
|
Variable page size |
118 |
|
|
Pathname management |
|
119 |
|
Domains of authority |
119 |
|
|
Resolving pathnames |
119 |
|
|
Symbolic prefixes |
123 |
|
|
File descriptor namespace 125 |
||
7 |
Dynamic Linking |
129 |
|
|
Shared objects 131 |
|
|
|
Statically linked |
131 |
|
||
|
Dynamically linked |
131 |
|
||
|
Augmenting code at runtime 132 |
||||
|
How shared objects are used |
132 |
|||
|
ELF format |
132 |
|
|
|
|
ELF without COFF |
133 |
|
||
|
The process |
133 |
|
|
|
|
Runtime linker |
134 |
|
|
|
|
Loading a shared library at runtime 135 |
||||
|
Symbol name resolution |
136 |
|||
8 |
Resource Managers |
137 |
|||
|
Introduction 139 |
|
|
|
|
What is a resource manager? |
139 |
|
|
||
|
Why write a resource manager? |
139 |
|
|||
|
The types of resource managers |
141 |
|
|||
|
Communication via native IPC |
142 |
|
|||
|
Resource manager architecture |
143 |
|
|||
|
Message types |
143 |
|
|
|
|
|
The resource manager shared library |
144 |
||||
|
Summary |
148 |
|
|
|
|
9 |
Filesystems |
149 |
|
|
|
|
|
Introduction |
151 |
|
|
|
|
|
Filesystems and pathname resolution |
151 |
||||
|
Filesystem classes |
152 |
|
|
|
|
|
Filesystems as shared libraries |
152 |
|
|||
|
io-blk |
153 |
|
|
|
|
vi |
Contents |
October 16, 2008 |

♥ 2008, QNX Software Systems GmbH & Co. KG.
|
Filesystem limitations |
156 |
|
|
||||
|
Image filesystem |
156 |
|
|
|
|
||
|
RAM “filesystem” |
157 |
|
|
|
|
||
|
Embedded transaction filesystem (ETFS) |
157 |
||||||
|
Inside a transaction |
158 |
|
|
|
|||
|
Types of storage media |
158 |
|
|
||||
|
Reliability features |
159 |
|
|
|
|||
|
QNX 4 filesystem |
161 |
|
|
|
|
||
|
Power-Safe filesystem |
161 |
|
|
|
|
||
|
Problems with existing disk filesystems |
161 |
||||||
|
Copy-on-write filesystem |
162 |
|
|
||||
|
Performance |
164 |
|
|
|
|
|
|
|
DOS Filesystem |
166 |
|
|
|
|
|
|
|
CD-ROM filesystem |
168 |
|
|
|
|
||
|
FFS3 filesystem |
168 |
|
|
|
|
|
|
|
Customization |
169 |
|
|
|
|
||
|
Organization |
169 |
|
|
|
|
|
|
|
Features |
170 |
|
|
|
|
|
|
|
Utilities |
172 |
|
|
|
|
|
|
|
System calls |
172 |
|
|
|
|
|
|
|
NFS filesystem 172 |
|
|
|
|
|
||
|
CIFS filesystem |
172 |
|
|
|
|
|
|
|
Linux Ext2 filesystem |
173 |
|
|
|
|
||
|
Universal Disk Format (UDF) filesystem |
173 |
||||||
|
Virtual filesystems |
173 |
|
|
|
|
||
10 |
Character I/O 175 |
|
|
|
|
|||
|
Introduction |
177 |
|
|
|
|
|
|
|
Driver/io-char communication |
178 |
|
|||||
|
Device control |
179 |
|
|
|
|
||
|
Input modes |
180 |
|
|
|
|
|
|
|
Device subsystem performance |
183 |
|
|||||
|
Console devices |
183 |
|
|
|
|
|
|
|
Terminal emulation |
183 |
|
|
|
|||
|
Serial devices |
183 |
|
|
|
|
|
|
|
Parallel devices |
184 |
|
|
|
|
|
|
|
Pseudo terminal devices (ptys) |
184 |
|
|
||||
11 |
Networking Architecture |
187 |
||||||
|
Introduction |
189 |
|
|
|
|
|
|
|
Network manager (io-pkt*) |
189 |
|
|
October 16, 2008 |
Contents vii |

♥ 2008, QNX Software Systems GmbH & Co. KG.
Threading model |
191 |
Protocol module |
192 |
Driver module |
193 |
Loading and unloading a driver 193
12 Native Networking (Qnet) 195
QNX Neutrino distributed |
197 |
|
Name resolution and lookup |
198 |
|
File descriptor (connection ID) |
199 |
|
Behind a simple open() |
199 |
|
Global Name Service (GNS) |
201 |
|
Network naming 201 |
|
|
Redundant Qnet: Quality of Service (QoS) and multiple paths 202
QoS policies 202
Specifying QoS policies 205
Symbolic links 205
Examples 206 |
|
Local networks |
206 |
Remote networks |
206 |
Custom device drivers |
207 |
13 TCP/IP Networking 209
Introduction 211
Stack configurations 211
Structure of the TCP/IP manager 212
Socket API 212
Database routines |
213 |
Multiple stacks 214 |
|
IP filtering and NAT |
214 |
NTP 214 |
|
Dynamic host configuration 215
AutoIP 215 |
|
|
PPP over Ethernet |
215 |
|
/etc/autoconnect |
216 |
|
Embedded web server |
216 |
|
CGI method |
216 |
|
SSI method |
217 |
|
14 High Availability 219
What is High Availability? 221
An OS for HA 221
viii |
Contents |
October 16, 2008 |

♥ 2008, QNX Software Systems GmbH & Co. KG.
Custom hardware support |
222 |
||
Client library |
222 |
|
|
Recovery example |
223 |
|
|
High Availability Manager |
224 |
||
HAM and the Guardian |
225 |
||
HAM hierarchy 225 |
|
||
Publishing autonomously detected conditions 229 |
|||
Subscribing to autonomously published conditions 229 |
|||
HAM as a “filesystem” |
230 |
||
Multistage recovery |
230 |
||
HAM API |
231 |
|
|
15 |
Adaptive Partitioning |
235 |
|||
|
What are partitions? |
237 |
|
|
|
|
Because adaptive partitions are not “boxes” what are they? 238 |
||||
|
Why adaptive? |
238 |
|
|
|
|
Benefits of adaptive partitioning |
239 |
|||
|
Engineering product performance |
239 |
|||
|
Dealing with design complexity |
240 |
|||
|
Providing security |
241 |
|
|
|
|
Debugging |
242 |
|
|
|
Adaptive partitioning thread scheduler 242
16 |
The Photon microGUI 245 |
||||
|
A graphical microkernel |
247 |
|
||
|
The Photon event space |
248 |
|
||
|
Regions |
249 |
|
|
|
|
Events 250 |
|
|
|
|
|
Graphics drivers |
251 |
|
|
|
|
Multiple graphics drivers |
252 |
|||
|
Color model |
252 |
|
|
|
|
Font support |
253 |
|
|
|
|
Stroke-based fonts |
253 |
|
||
|
Unicode multilingual support |
253 |
|||
|
UTF-8 encoding 253 |
|
|||
|
Animation support |
254 |
|
||
|
Printing support |
254 |
|
|
|
|
The Photon Window Manager |
255 |
|||
|
Widget library |
255 |
|
|
|
|
Fundamental widgets 256 |
|
|||
|
Container widgets |
258 |
|
October 16, 2008 |
Contents ix |

♥ 2008, QNX Software Systems GmbH & Co. KG.
Advanced widgets 260
Convenience functions |
265 |
Driver development kits |
267 |
Summary 268 |
|
17 Multimedia 269
Overview |
271 |
|
MME functional areas |
272 |
|
The MME interface |
273 |
|
Component-based architecture 274 |
||
The MME resource managers 274 |
||
Glossary 277 |
|
|
Index |
295 |
|
x |
Contents |
October 16, 2008 |