COMP 3150 Operat Lesson 1.2: Evolution of Operating Systems — COMP 3150

01 Introduction

The operating systems we use today did not appear fully formed. They are the product of more than seventy years of evolution, driven by changes in hardware cost, hardware capability, and the kinds of problems users wanted to solve. Understanding that history is not merely cultural: each generation solved a specific problem, and the solutions of earlier generations are still present in the systems you use.

The story is roughly this: the first computers had no operating system at all. Users physically wired programs into the machine. Then came batch processing to reduce idle time, time-sharing to give interactive access, personal computing to put a machine on every desk, networking to connect those machines, and finally distributed, mobile, and cloud systems. Each stage was enabled by a technological advance and each raised new design questions.

02 Learning objectives

By the end of this lesson you will be able to

  • Describe major stages in OS evolution.
  • Compare batch and time-sharing systems.
  • Explain technological drivers of OS development.
  • Analyse the move toward distributed and cloud systems.
  • Identify future trends.

This lesson contributes to U1.2 and course learning outcome CLO1.

03 Required reading

  • Operating System Concepts — Chapter 1, Section 1.2, History of Operating Systems.
  • OSTEP — Chapter 2, Introduction to Operating Systems (the discussion of virtualization sets up the historical framing).

04 Core content

4.1 Before operating systems (1940s–early 1950s)

The earliest electronic computers — ENIAC, EDVAC, and their contemporaries — had no operating system. A single program had exclusive use of the machine. The programmer prepared their work on plugboards or punched cards, loaded it into memory, started it manually, and watched the result. When the program finished, the next user took over.

Two features dominated this era: the machines were enormously expensive, and they were also enormously slow to set up. A significant fraction of the machine's available time was spent waiting for the human operator.

4.2 Batch processing (mid 1950s–1960s)

Batch processing was the first attempt to reduce idle time. Instead of running one program at a time with manual intervention between jobs, the operator collected a batch of jobs on punched cards and fed them to a small program — the resident monitor — that loaded and executed each in turn. When one job finished, the monitor automatically loaded the next.

The batch monitor is the direct ancestor of the modern kernel. It was the first program that stayed resident in memory and controlled the machine, and it introduced three ideas still central to operating systems:

  • Job sequencing — deciding which job runs next.
  • Memory protection — keeping the monitor safe from buggy user jobs.
  • Interrupt handling — reacting to asynchronous events, such as the completion of I/O.

What batch processing did not solve

Throughput improved dramatically, but turnaround time — the delay between submitting a job and receiving its result — could be hours or days. Debugging was painful: a single misplaced comma might cost a day of waiting.

4.3 Multiprogramming and time-sharing (1960s–1970s)

Two related ideas transformed the field. Multiprogramming keeps several jobs in memory at once so that when one blocks on I/O, the CPU can switch to another. Time-sharing extends this by giving each interactive user a small slice of CPU time in rapid rotation, so each user has the illusion of a private machine.

Time-sharing is the conceptual foundation of essentially every general-purpose operating system in use today. It required several technologies that had to mature together:

  • A hardware timer to interrupt a running program periodically.
  • Memory protection to keep one user's program out of another's space.
  • Reliable interrupt handling to make rapid switching feasible.

The landmark systems of this era — CTSS at MIT, Multics, and later UNIX at Bell Labs — established the model that the rest of the course builds on.

4.4 Personal computing and graphical interfaces (1970s–1990s)

The microprocessor changed the economics of computing completely. A machine that once cost millions now cost thousands, then hundreds. Instead of a large central machine shared by many users, every user could have a machine of their own.

Personal-computer operating systems — CP/M, MS-DOS, early versions of Mac OS and Windows — prioritised different goals than their predecessors. They emphasised responsiveness to a single user, friendly graphical interfaces, and support for a growing range of peripherals. Multi-user concerns were secondary.

UNIX, meanwhile, evolved in parallel and became the basis for high-performance workstations and — ultimately — for Linux. Its design philosophy of small composable tools, a uniform file interface, and a portable implementation proved remarkably durable.

4.5 Networking and distributed systems (1980s–2000s)

Once machines were connected, the operating system's scope expanded. It now had to provide protocols, sockets, remote file systems, and name resolution. The line between "the local machine" and "the network" began to blur.

Three consequences stand out:

  • Network transparency. UNIX's socket API made network communication look almost like ordinary file I/O — the same read() and write() calls, plus a few new ones.
  • Distributed file systems. NFS, AFS, and later SMB allowed files to live on remote servers while appearing local.
  • Client–server architecture. Applications split across machines: a client on the user's desktop, a server on a shared host.

4.6 Mobile, cloud, and virtualization (2000s–present)

Three trends have shaped the most recent era. They are not independent.

Mobile operating systems
iOS and Android prioritise energy efficiency, touch interaction, strict application sandboxing, and a managed permission model. They are descendants of UNIX, but their design constraints are radically different from a server's.
Virtualization
A hypervisor runs multiple guest operating systems on a single physical host. This decouples the software from the hardware it runs on and makes efficient use of large servers.
Cloud computing
Compute, storage, and networking are provided as on-demand services. The "operating system" of a cloud data centre is not one kernel but a distributed management layer — schedulers, orchestrators, and network controllers working together.
Containers
Linux namespaces and control groups make it possible to run isolated user-space environments on a shared kernel. Containers are lighter than virtual machines and have become the standard packaging unit for cloud-native applications.
Timeline of operating-system evolution A horizontal timeline from the 1940s to the present, marking seven stages: no OS, batch, multiprogramming, time-sharing, personal computing, networking and distributed systems, and mobile, virtualization, and cloud. 1940s No OS plugboards 1950s Batch resident monitor 1960s Multiprogram keep CPU busy 1970s Time-sharing interactive users 1980s Personal GUI · single user 1990s Networked client–server 2000s+ Mobile · Cloud virtual · multi-tenant
Figure 1.2 — Seven stages in the evolution of operating systems, each driven by a change in hardware economics or capability.

4.7 Technological drivers

Each transition was enabled by a specific hardware advance. The pattern is worth noting because it repeats.

Hardware advances and the OS features they enabled
Hardware advance Operating-system consequence
Magnetic tape and card readers Batch processing — automatic job sequencing
Hardware timer and interrupt controller Preemptive multitasking and time-sharing
Memory-management unit (MMU) Virtual memory, per-process address spaces
Microprocessor Personal computing, single-user operating systems
Local-area networks Sockets, distributed file systems, client–server
Hardware virtualization extensions (VT-x, AMD-V) Efficient hypervisors, cloud infrastructure
Namespaces and control groups in the kernel Containers, container orchestration, cloud-native apps

4.8 Future trends

Several directions are actively shaping the next generation of operating systems. None is settled, but each is worth watching.

  • Serverless and function-as-a-service platforms. The unit of deployment shrinks from a container to a function invocation. The operating system's role is increasingly mediated by a runtime scheduler running on behalf of the platform.
  • Heterogeneous compute. GPUs, TPUs, and other accelerators are no longer optional. Managing them uniformly is an open problem.
  • Persistent memory. Byte-addressable non-volatile memory blurs the line between memory and storage, forcing new file-system and memory-management designs.
  • Confidential computing. Hardware enclaves and encrypted memory raise new questions about what the OS can and should see.
  • Unikernels and library operating systems. Rather than a general-purpose kernel, a single-purpose application is compiled together with only the OS code it needs.

05 Worked example

Consider a small data-processing centre in 1965 and the same organisation in 2024. Compare what changed and why.

Two eras, one workload

  1. 1965. The organisation owns one mainframe. Jobs are submitted on punched cards and collected by an operator. Turnaround for a typical job is several hours. The machine is idle whenever a job blocks on I/O, unless a batch monitor happens to have loaded another job.
  2. 1975. Time-sharing has arrived. Engineers at their terminals can now edit and submit jobs interactively. Turnaround drops to seconds. The same mainframe serves dozens of users concurrently.
  3. 1990. Every engineer has a workstation on their desk. The mainframe has become a server. Files are shared over NFS. Email is ubiquitous.
  4. 2010. Compute has moved into a data centre. Virtual machines allow the same physical host to run workloads for multiple tenants, each isolated. Server utilisation rises from a few percent to well over half.
  5. 2024. The unit of deployment is a container running in a managed cluster. A job can be scheduled to any of thousands of nodes; resource requests are expressed declaratively; horizontal scaling is automatic.

At each stage, the change was enabled by hardware — the microprocessor, the local-area network, virtualization extensions, container primitives — and by a design decision about how to share resources safely.

Pattern to remember

Hardware provides a new capability. Somebody figures out how to expose it safely to many users. That design becomes the new operating-system abstraction. The pattern has held for seventy years and shows no sign of stopping.

06 Interactive activity

Activity · see the history in a modern Linux system

Modern Linux carries the fingerprints of every era. Find them.

  1. Batch-processing legacy. Run cat /etc/crontab and crontab -l. Cron is the direct descendant of the batch monitor's job scheduler — a mechanism for running jobs on a schedule without human intervention.
  2. Time-sharing legacy. Run who and w. Both commands list the users currently logged in — a capability that only makes sense on a time-sharing system.
  3. Personal-computing legacy. Run echo $DISPLAY. If it prints a value, you are in a graphical session. The X11 protocol was designed for workstation-era graphics.
  4. Networking legacy. Run ip addr and ss -tlnp. The second command lists listening sockets — network endpoints that any program can open using the same socket API introduced in the early 1980s.
  5. Container-era legacy. Run ls /proc/self/ns/ and cat /proc/self/cgroup. These are the Linux kernel features that make containers possible: namespaces and control groups.

Reflect: which of the seven evolutionary stages is most visible in the system you are using right now? Which is least visible, but still present?

07 Knowledge check

Check your understanding

Question 1

What specific problem did batch processing solve, and what problem did it leave unsolved?

Show answer
Batch processing solved machine idle time: instead of waiting for a human operator to load each job, a resident monitor automatically sequenced jobs from a queue. Throughput improved dramatically. It left unsolved turnaround time: interactive debugging was still very slow, because a job might wait hours for its turn and a single typo could cost another wait.

Question 2

Which hardware advance was the essential prerequisite for time-sharing, and why?

Show answer
A hardware timer and interrupt mechanism. Without it, the kernel could not reclaim control from a running user program: once a program started, it ran until it voluntarily yielded or terminated. A periodic timer interrupt makes preemption possible, which is what gives many users the illusion of simultaneous access to one machine.

Question 3

Distinguish virtualization from containerization in one sentence each. Which is the older idea?

Show answer
Virtualization runs multiple complete guest operating systems on a hypervisor, each with its own kernel, giving strong isolation at higher resource cost. Containerization runs multiple isolated user-space environments on a single shared host kernel, using Linux namespaces and control groups, giving lighter weight at slightly weaker isolation. Virtualization is the older idea — IBM's VM/370 supported it in the 1970s.

08 Unit discussion

Discussion prompt

Each era of operating systems was shaped by the hardware economics of its time. Today, cloud providers charge by resource-second and mobile devices are constrained by battery. Pick one modern constraint — energy, latency, cost, or regulation — and argue how it is likely to shape the next generation of operating-system abstractions.

Post your response to the Unit 1 discussion forum and reply to at least two classmates. This activity contributes to your participation grade and supports CLO1.

09 Practice exercise

  1. Timeline reconstruction. Without consulting your notes, write down the seven stages from memory in order. Then check against the lesson and correct any you missed.
  2. Match hardware to OS feature. For each of the following, name one OS capability it made possible: (a) magnetic tape, (b) MMU, (c) microprocessor, (d) LAN, (e) kernel namespaces.
  3. Read the UNIX philosophy. Find and read the original 1974 paper by Ritchie and Thompson, The UNIX Time-Sharing System. Write two paragraphs: one on what the design prioritised, and one on which of those priorities is still visible in Linux today.
  4. Compare two current systems. Compare the design constraints of a modern server operating system and a modern mobile operating system. List at least three differences and explain what historical or hardware factor drives each.

10 Summary

  • The earliest computers had no operating system; programs were loaded and started manually.
  • Batch processing introduced the resident monitor to reduce idle time — the direct ancestor of the modern kernel.
  • Multiprogramming and time-sharing introduced preemption, interactive access, and the abstractions still central to general-purpose operating systems.
  • Personal computing and graphical interfaces prioritised a single user's experience and drove a wave of consumer operating systems.
  • Networking expanded the OS's scope to include protocols, sockets, and remote file systems.
  • Mobile, virtualization, and cloud systems represent the current era, each shaped by a specific hardware advance.
  • The recurring pattern: a hardware advance creates a new capability; a design decision exposes it safely to many users; that design becomes the next abstraction.

Looking ahead

Lesson 1.3 turns to the services a modern operating system provides, and how those services support the applications you write.

11 References

  • Silberschatz, A., Galvin, P. B., & Gagne, G. Operating System Concepts, Chapter 1.
  • Tanenbaum, A. S., & Bos, H. Modern Operating Systems, Chapter 1.
  • Ritchie, D. M., & Thompson, K. The UNIX Time-Sharing System. Communications of the ACM, 1974.
  • Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. C. Operating Systems: Three Easy Pieces, Chapter 2.
g Systems

01 Introduction

Placeholder introduction. Establish why this topic matters and how it connects to the previous lesson and the unit outcomes.

02 Learning objectives

By the end of this lesson you will be able to

  • Objective 1.2.1 — placeholder measurable objective.
  • Objective 1.2.2 — placeholder measurable objective.
  • Objective 1.2.3 — placeholder measurable objective.
  • Objective 1.2.4 — placeholder measurable objective.
  • Objective 1.2.5 — placeholder measurable objective.

03 Required reading

  • OSTEP — assigned chapter or section.
  • Secondary reference — assigned chapter or section.

04 Core content

Placeholder core content. Add explanatory prose, figures, tables, and code samples here.

05 Worked examples

Worked example

  1. State the problem.
  2. Show the reasoning step by step.
  3. Give the result and interpret it.

06 Interactive activity

Activity

Placeholder interactive activity. Provide a simulation, guided exploration, or tool-based exercise.

07 Knowledge check

Check your understanding

Question 1

Placeholder question for this lesson.

Show answer
Placeholder answer and explanation.

08 Unit discussion

Discussion prompt

Placeholder discussion prompt for this unit.

09 Practice exercise

Placeholder ungraded practice exercise.

10 Summary

  • Key takeaway one.
  • Key takeaway two.
  • Key takeaway three.

11 References

  • Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. C. Operating Systems: Three Easy Pieces.
  • Silberschatz, A., Galvin, P. B., & Gagne, G. Operating System Concepts.
👤