About This Guide

The Philosophy of QNX

    What is QNX?

    QNX's microkernel architecture

     A true kernel

     System processes

      System processes vs. user-written processes
      Device drivers

    Interprocess communication (IPC)

     QNX as a message-passing operating system

    QNX as a network

     Single-computer model

     Flexible networking

The Microkernel

    Introduction

    Interprocess communication

    IPC via messages

     Message-passing primitives

     Process synchronization

     Blocked states

     Using Send(), Receive(), and Reply()

      Send()
      Receive()
      Reply()

     Reply-driven messaging

     Additional points to remember

     Advanced facilities

      Conditional message reception
      Reading or writing part of a message
      Multipart messages

     Reserved message codes

    IPC via proxies

    IPC via signals

     Generating signals

     Receiving signals

     Summary of signals

     Defining signal processing

     Catching signals

     Blocking signals

     Signals and messages

    IPC across the network

     Virtual circuits

     Virtual processes

     Virtual proxies

     Terminating virtual circuits

    IPC via semaphores

    Process scheduling

     When scheduling decisions are made

     Process priorities

     Scheduling methods

      FIFO scheduling
      Round-robin scheduling
      Adaptive scheduling
      Client-driven priority

    A word about realtime performance

     Interrupt latency

      Til on various CPUs

     Scheduling latency

      Tsl on various CPUs

     Stacked interrupts

The Process Manager

    Introduction

     Process Manager responsibilities

     Process creation primitives

      fork()
      exec()
      spawn()

     Process inheritance

    The life cycle of a process

     Creation

     Loading

     Execution

     Termination

    Process states

     Determining process states

    Process symbolic names

    Timers

     Time management

     Simple timing facilities

     Advanced timing facilities

      Creating timers
      Arming timers
      Removing timers
      Setting timer resolution
      Reading timers

    Interrupt handlers

     Timer interrupt handlers

I/O Namespace

    Introduction

     I/O namespace

     Prefixes and regions of authority

    Resolving pathnames

     I/O manager prefixes

     Network root

     Default network root

      Passing pathnames between processes

     Alias prefixes

      Creating special device names

     Relative pathnames

     Current working directory

      A note about cd

    File descriptor namespace

     Open control blocks

The Filesystem Manager

    Introduction

    What is a file?

     Date and time stamps

     File access

    Regular files and directories

     Regular files

     Directories

      Directory operations
      Reading directory entries

     Extents

      Where extents are stored
      Extending files

    Links and inodes

      Removing links
      Directory links

    Symbolic links

    Pipes and FIFOs

     Pipes

     FIFOs

    Filesystem Manager performance

     Elevator seeking

     Buffer cache

     Multi-threading

     Client-driven priority

     Temporary files

     Ramdisks

    Filesystem robustness

     Filesystem recovery

    Raw volumes

     Disks and disk subsystems

     OS partitions

     Defining block special files

     Mounting a filesystem

     Unmounting a filesystem

    Key components of a QNX partition

     Loader block

     Root block

     Bitmap

     Root directory

    The DOS Filesystem Manager

    CD-ROM filesystem

    Flash

     Restrictions

     Space reclamation

     Compression and decompression

     File permissions

     Mounting

     Raw device access

    NFS filesystem

    SMB filesystem

The Device Manager

    Introduction

    Device services

    Edited input mode

    Raw input mode

    Device drivers

     Device control

    The QNX console

     Console-specific functions

    Serial devices

    Parallel devices

    Device subsystem performance

The Network Manager

    Introduction

    Network Manager responsibilities

     An independent module

    Microkernel/Network Manager interface

     Sending a message to a remote node

     Receiving the message on the remote node

    Network drivers

    Node and network identifiers

     Physical node ID

     Logical node ID

     Logical network ID

    Choosing a network

     Load balancing

     Fault tolerance

     Bridging between QNX LANs

    TCP/IP networking

     TCP/IP Manager

     Socket API

     Network interoperability

      NFS
      SMB

The Photon microGUI Windowing System

    A graphical microkernel

    The Photon event space

     Regions

     Events

    Graphics drivers

     Multiple graphics drivers

     Color model

    Scalable fonts

     Font sets

      Core Latin set
      Extended Latin set

     Languages supported

     International language supplements

    Unicode multilingual support

     UTF-8 encoding

    Animation support

    Printing support

    The Photon Window Manager

    Widget library

     Basic widgets

      Label widget (PtLabel)
      Push button widget (PtButton)
      Text input widgets (PtText, PtMultiText)
      Toggle button widgets (PtToggleButton, PtOnOffButton)
      Graphical widgets (PtArc, PtPixel, PtRectangle, PtLine, PtPolygon, PtEllipse, PtBezier, PtGrid)
      Scrollbar widget (PtScrollbar)
      Separator widget (PtSeparator)
      Slider widget (PtSlider)
      Timer widget (PtTimer)
      Graphic image widgets (PtBitmap, PtLabel, PtButton)
      Progress bar widget (RtProgress)
      Message widget (PtMessage)
      Numeric widgets (PtNumericInteger, PtNumericFloat)

     Container widgets

      Window and icon widgets (PtWindow, PtIcon)
      Bulletin board widgets (PtPane)
      Group widget (PtGroup)
      Scrolling area widget (PtScrollArea)
      Background widget (PtBkgd)

     Advanced widgets

      Menu related widgets (PtMenu, PtMenuBar, PtMenuButton)
      List widget (PtList)
      Pulldown list widget (PtComboBox)
      Tree widget (PtTree)
      Terminal widgets (PtTty, PtTerminal)
      Divider widget (PtDivider)
      Trend graph widget (RtTrend)
      Realtime meter widget (RtMeter)
      Font selection dialog (PtFontSel)
      File selection widget (PtFileSel)
      Print selection dialog (PtPrintSel)
      HTML viewer widget (PtHtml)

     Widget building toolkit

    Summary