Useful Notes: Operating System
"The box said that I needed to have Windows 98 or better... so I installed Linux."
—Anonymous about Linux
Before a computer can do much, it'll need some software to provide basic system services. This is basically what an operating system (or OS for short) does; it manages devices and memory, keeps applications from stepping on each other's toes, and provides an Application Programming Interface
(sometimes many APIs) for applications to use.
In the early days of computing, computers didn't have operating systems; you programmed them directly in Binary Bits and Bytes
and on some really
old machines (including ENIAC, the first practical electronic computer, and IBM's old card-counting machines), you didn't have program memory at all — you had to rewire them
on a device not unlike an old-time telephone switchboard. Starting in the early 1960s, the advent of time sharing
, the basis of multitasking, led to huge advances in what computers were capable of and following after the first modern OSes date from this era. Later, when microcomputers became common, they had much smaller operating systems of their own, such as CP/M, Apple DOS, ProDOS and MS-DOS; since microcomputers didn't have special hardware to manage and protect memory, most of the time a microcomputer OS simply wrapped the machine's ROM
libraries with disk I/O functions, something that was especially true on the Apple ][
and the IBM Personal Computer
. As computer got more powerful and cheaper, richer feature sets such as preemptive multitasking and tons of APIs and libraries were added.
At the OS Core: The Kernel
OSes are built around a central program known as the kernel. Generally speaking, the kernel manages hardware and provides services for other programs to use. Kernels are often supplemented with device drivers, which help the kernel use the hardware, and servers, which implement specific services like a network stack. To help provide stability, modern operating systems provide two basic levels of security. Everything that runs in the same memory space as the kernel runs in kernel space. Everything outside of that is user space, or userland. If a user space program wants to access hardware, they have to make system calls to the kernel who validates the call and grants the request.
Kernels are usually done in one of three ways:
- Monolithic: All device drivers and services are run in kernel space. The Linux kernel is an example. This offers the most performance, since device drivers and server run with the kernel. However, if any of those crash, they will likely crash the OS too.
- Microkernel: Only the kernel and very basic services run in kernel space, the rest is in user space. MINIX is an example. As device drivers and servers are outside of kernel space, it makes the system very reliable. If a driver or server dies, the kernel can revive it without the user knowing. However, they eat up a lot more resources than a monolithic kernel.
- Hybrid: The kernel runs along with devices drivers and servers, but they're not as tightly coupled. This takes the best of both paradigms. Windows and Mac OS X are hybrid kernel examples.
General features of OSes
- Access to hardware and resources: The OS grants permission for user space programs to use hardware if they need to and have permission to do so.
- Multitasking and scheduling: As each CPU core can only do one thing at a time, the OS schedules programs to be run on it.
- Memory Management: Programs need to have separate memory spaces in order to not collide with each other. The OS is responsible for ensuring each program has enough memory to work with and that they do not collide with each other unless the appropriate system call is made.
- Security: The OS provides the means to create and enforce user account access levels. This restricts which users can read, write, or execute files.
Notable operating systems
- OSes with their own pages
- Disk Operating System (DOS): A DOS-based system provides basic memory and hardware management services. They can only launch one program at a time and lack multitasking features. Microsoft used their MS-DOS as a foundation for Windows until ME. Note that while a characteristic of a DOS-based system is the command line interface, not all command line interface based systems are DOS based. UNIX for example is primarily command line driven, but it supports multiple programs and users.
- AmigaOS: The OS that shipped with the Commodore Amiga and later. It offered graphical, windowed, pre-emptive mutltiasking before its competitors and had such a powerful media-based API that it was the go-to OS for multimedia computers from the late 80s to early 90s.
- OS/2: This OS is notable for being a joint effort between Microsoft and IBM, at first. IBM, wanting to reign control over the PC standard started creating systems that were anything but PCs. After Windows 3.0 took off, Microsoft broke the deal, but had to support OS/2 per contract. To which IBM gleefully advertised it could run MS-DOS and Windows applications ( to a varying degree of reliability ). It never really took off, but it found use in ATMs and mass transit ticket kiosks.
- NeXTSTEP: Developed by the NeXT Corporation in 1989, which was founded by Steve Jobs after he resigned from Apple. Based off UNIX and BSD, its goals was to be as programmer friendly as possible, offering an array of powerful interfaces. Systems using NeXTSTEP created the first world wide web server, among other things. It was later released as the open source OpenSTEP and became the basis of Mac OSX.
- BeOS: An OS that started development in the early 90s by Be Inc. for use on the BeBox. Noted for being developed from the ground up with multimedia in mind and received praise for being very responsive, even when the system was completely taxed. It never really took off, since it was facing against the deeply entrenched Windows and Mac OS.
- zOS: A mainframe OS designed by IBM, it is the lineal descendant of the "mainline" operating system (OS/360) for IBM mainframes dating back to 1964; making it the oldest OS in continual widespread use. Designed for maximum uptime, maximum throughput (at the expense of interactivity), and bullet-proof backwards compatability; the epitome of a "mission critical" OS. Due to a strong virtualization push, IBM often offers it as a way to host multiple AIX or Linux servers on the same hardware.