POSIX Realtime Extensions Subgroup
Joe Gwinn <email@example.com> reports on the April 1998 meeting in Dallas, TX.
POSIX.13, after years of effort, is now IEEE Std 1003.13-1998, having been approved by the IEEE Standards Board on 19 March 1998.
The System Services Realtime subgroup (SSWG-RT) has three other approved standards: POSIX.1b-1993 (realtime extensions, was called POSIX.4), POSIX.1c-1995 (pthreads, was called POSIX.4a), and POSIX.1i-1995 (technical corrections to POSIX.1b). These base standards and their corrigenda have all been incorporated into the published standard ISO/IEC 9945-1:1996, as discussed in greater detail below. IEEE Std 1003.13-1998 (realtime profiles) will remain a freestanding document.
SSWG-RT has four active formal projects: P1003.1d (more realtime extensions, was called P1003.4b), P1003.1j (yet more realtime extensions, was unofficially called P1003.4d), P1003.1q (Trace), discussed below, and POSIX.1n (technical corrections to 1003.1c).
POSIX.13 is a family of four related realtime profiles ranging in size from the very small through to a full-featured platform conforming to essentially all of POSIX.1-1990, POSIX.1b-1993 and POSIX.1c (threads). This set of profiles is also known as the "slice and dice" profile set, since it allows subsetting of the base standard. Such subsetting, allowing mandatory features of the base standard to be omitted, is not normally allowed in POSIX profiles, and POSIX.13 is a special case.
The smaller profiles specify just that subset of POSIX interfaces needed to "clothe" widely used small kernels such as pSOS (from ISI), VxWorks (from Wind River), MTOS (from IPI), VRTX32 (now from Mentor, originally from Hunter&Ready), and the ORKID interface standard (from VITA), which although very similar in approach and function, differ greatly in interface details. As a matter of interest, there are more of these small kernels in UNIX systems than there are UNIX kernels because, for instance, many I/O controllers and peripherals themselves use one of these small kernels.
Standardization of these interfaces will yield the same benefits for embedded and realtime systems as standardization of UNIX did for workstations. In addition, the POSIX.13 interfaces are chosen to allow multi-computer distributed systems to be built, such as those used in factory automation. Such systems are typically set up as a hierarchy, with a few large-profile machines at the top, and a large number of smaller profile machines at the bottom controlling this or that piece of machinery, perhaps with an intermediate layer of supervisory machines between top and base, and all communicating with peers, superiors, and subordinates, as needed.
Other work within SSWG-RT includes POSIX.1d, where Draft 10 went out for its first recirculation in March 1997 (with Interrupt Control, a particularly contentious area, and Device Control, deferred and moved into non-normative annexes). The last ballot closed on 21 April 1997, at 45% affirmative (30% short of the required 75%), with a low fraction of the ballot group voting or responding to ballot resolution emails. The Ballot Group, which was quite stale, has therefore been reformed.
POSIX.1d contains a number of realtime interfaces and options that arrived too late to be included in POSIX.1b. The major new interfaces and options are: spawn(), a functional merger of fork() and exec(), needed both for efficiency and to allow use on platforms lacking memory management hardware; a sporadic-server scheduling policy, used to prevent asynchronous high-priority processing from totally consuming the computer; cpu-time clocks and timers, used to both measure and bound use of cpu by processes; devctl(), the successor to the ioctl() of classic UNIX; Interrupt Control, a set of interfaces intended to allow direct application-level control of devices such as array processors and radar signal processors; and Advisory Information, a set of interfaces that allow an application to declare to the kernel that for instance a specified file will be read sequentially, allowing the kernel to optimize performance. A number of existing interfaces are also being augmented by the addition of variants supporting timeouts.
POSIX.1j (advanced realtime) went out for its first recirculation in January 1998. It achieved only 36% approval at this point.
POSIX.1j contains a number of realtime interfaces and options that arrived too late to be included in POSIX.1d. The major new interfaces and options are: Typed Memory, a set of interfaces supporting the mmap()-like mapping of diverse kinds of physical memory (e.g., SRAM, DRAM, ROM, EPROM, EEPROM) via multiple and/or diverse physical paths used for instance to access special hardware and memory via attached VME busses; nanosleep_abs(), a high-resolution sleep() allowing the user to specify when to awaken, rather than how long to sleep; Barrier Synchronization, a set of interfaces intended to support efficient implementation of parallel DO/FOR loops on massively parallel computers; Reader/Writer Locks, used to allow efficient parallel access to data in situations where reads vastly outnumber writes; Spinlocks, a very fast synchronization primitive for use on shared-memory multiprocessors; and Persistent Notification for Message Queues, an option for 1003.1b-1993 Message Queues.
POSIX.1q proposes trace interfaces that have been the focus of considerable interest and much discussion over the past two years, with joint meetings of SSWG-RT and SSWG-SRASS being held. The Trace API Small Group, composed of people from both SSWG-RT and SSWG-SRASS, with significant representation from interested vendors, has developed a complete set of APIs and corresponding rationale, resulting in the draft standard currently under intensive development in the Working Group. The purpose of these trace interfaces is to allow the collection and presentation of trace logs of application calls on the operating system, I/O activity, user-defined events, and the like, with an eye to debugging user code running at essentially full speed. Hardware and kernel faults may also be recorded; the Trace APIs are general. Tracing is a requirement for realtime systems. A number of vendors have come forward with implementations, and there has been great interest in coming up with standard APIs and, to a lesser extent, log file contents. The proposed trace interfaces do not in the least resemble standard inspect-and-change debuggers and require no kernel knowledge or access to use.
About the Author
Joe Gwinn is vice chair of the System Services Working Group; chair of the SSWG Realtime Extensions Subgroup, 1003.4 Atavar; and Defender of the Realtime Faith.