Inside OS/2: The Ambitious Multitasking OS That Shaped Modern Computing
Share this article
The Dawn of a New Era
When Microsoft unveiled OS/2 in 1987, it wasn't just another operating system—it was a manifesto for the future of personal computing. Targeting Intel's 80286/80386 processors, OS/2 delivered preemptive multitasking, hardware-agnostic APIs, and dynamic linking—features previously exclusive to minicomputers. Vaughn Vernon's contemporary analysis in Computer Language captured its seismic potential: "Its multitasking capabilities, full-featured application programming interface (API), and extendability to future hardware almost guarantee its success."
Architectural Foundations
OS/2's architecture rested on three pillars:
1. The Kernel: Handling low-level multitasking and resource management
2. Presentation Manager: GUI layer for graphical applications
3. LAN Manager: Networking subsystem for office environments
Crucially, applications could leverage OS/2's core without adopting the GUI—lowering barriers for UNIX ports and business software. The Software Development Kit (SDK) included an optimizing C compiler, macro assembler, and CodeView debugger, signaling Microsoft's commitment to developers.
OS/2's session manager enabled virtual terminals via "screen groups" (Source: Computer Language, 1987)
Revolution Under the Hood
Multitasking Reimagined
OS/2 introduced thread-based concurrency—a radical departure from process-centric models. Each process could spawn multiple threads sharing memory resources, enabling efficient parallelism. As Vernon noted: "Threads are much faster to load than processes... a spreadsheet's UI thread could handle input while calculation threads run background tasks."
The preemptive scheduler used priority classes (idle/time-critical) and adaptive time-slicing, dynamically adjusting CPU allocation. Developers could control priorities via DosSetPrty(), but Vernon warned: "Boosting to time-critical priority could turn OS/2 into a single-tasking system—pure abuse."
Memory Mastery
OS/2's virtual memory leveraged the 286's Local Descriptor Table (LDT) for process isolation, supporting up to 1GB virtual address space via disk swapping. Shared memory segments (DosAllocShrSeg()) enabled efficient inter-process communication (IPC), while dynamic linking reduced executable sizes by loading libraries at runtime—a precursor to modern DLLs.
Protected Mode Power
The 286's protected mode was OS/2's crown jewel, preventing processes from corrupting each other. A real-mode "compatibility box" ran MS-DOS apps, though with a caveat: "When switched away, the MS-DOS application freezes in the background."
The IPC Toolkit
OS/2 offered sophisticated IPC mechanisms:
- Pipes (DosMakePipe()): For parent-child data streaming
- Message Queues (DosCreateQueue()): Priority-based inter-process messaging
- Semaphores (DosCreateSem()): Resource locking via RAM/system variants
Semaphore synchronization between threads (Source: Computer Language, 1987)
Vernon highlighted semaphores' versatility: "A thread could trigger another by clearing a semaphore—ideal for auto-answering modems."
Legacy of Innovation
Despite its eventual market decline, OS/2 pioneered concepts still relevant today:
- Dynamic linking foreshadowed modular software ecosystems
- Thread-based concurrency became standard in modern OSes
- Hardware abstraction via APIs influenced Windows NT's design
As Vernon presciently concluded: "OS/2 was designed as a platform for the next generation of software." Its DNA lives on in everything from container isolation to .NET's managed runtime—proof that ambitious architectures never truly fade.
Source: Inside OS/2 by Vaughn Vernon, originally published in the December 1987 issue of Computer Language