Перейти к основному содержимому

История операционных систем

Разработчику Архитектору Инженеру

История ОС - от мейнфреймов к персональным ПК

Современная Windows, Linux или macOS кажутся «всегда такими». На деле каждая возможность — от виртуальной памяти до вкладок в браузере — появилась как ответ на конкретную проблему: дорогой процессор простаивал, операторы вручную переносили перфоленты, один сбойный процесс ронял всю машину.

История ОС — это цепочка компромиссов: эффективность железа ↔ удобство программиста ↔ безопасность ↔ стоимость разработки. Понимая эту цепочку, проще читать документацию ядра, спорить об архитектуре и не путать «старый костыль» с «фундаментальной идеей».

Связанные материалы: определение и роль ОС, архитектура ядра, классификация современных ОС.


До операционных систем — программа = вся машина

В 1940–1950-х программа загружалась так, что владела всем компьютером. Оператор монтировал перфоленту или переключал провода, запускал расчёт, ждал окончания, снимал результат. Пока программа работала, никто другой не мог использовать машину — даже если процессор 90% времени ждал медленную память или перфоратор.

Первые «операционные» элементы — загрузчики и библиотеки подпрограмм (например, для машины IBM 701): они экономили время оператора, но не давали параллелизма.

Аналогия
Один автомобиль на весь город: пока вы едете до магазина, остальные стоят. ОС появилась, когда стало ясно, что машину можно «раздавать по расписанию», а не отдавать одному навсегда.


Пакетная обработка (batch processing)

Идея: накопить задания в очередь и выполнять их подряд без участия человека между задачами.

Что изменилосьЗачем
Очередь заданий (job queue)Меньше простоя между программами
Автоматическая смена заданийОператор не переносит ленту вручную после каждой задачи
Учёт времени и ресурсовМожно выставлять счёт и планировать мощности

Типичный пример — OS/360 (IBM, 1960-е): крупная система для мейнфреймов, пакетная обработка, учёт заданий. Пользователь не «сидел за консолью» в реальном времени — он сдавал колоду карт, получал результат позже.

Ограничение: пока одна программа выполнялась, процессор всё ещё мог простаивать в ожидании ввода-вывода (медленные ленты, диски). Следующий шаг — не отпускать CPU.


Мультипрограммирование (multiprogramming)

Идея: пока одна программа ждёт диск, CPU переключается на другую. В памяти одновременно несколько программ; планировщик решает, кому отдать процессор.

Это заложило основы понятий, которые вы видите сегодня:

  • процесс (программа + её состояние);
  • очередь готовых и очередь ожидающих I/O;
  • переключение контекста;
  • защита памяти (чтобы программы не портили друг друга).

Появились прерывания как стандартный способ сообщить ядру: «устройство закончило работу» или «истёк квант времени».

Подробнее о процессах и планировании: управление процессами в Linux, классические алгоритмы планирования CPU.


Разделение времени (time-sharing)

В 1960-х исследователи (в том числе проект CTSS в MIT, затем Multics) пошли дальше: дать интерактивность — многим пользователям по терминалу, как будто у каждого «свой» компьютер.

Пакетная ОСTime-sharing
Ответ через минуты/часыОтклик на нажатие клавиши — доли секунды
Очередь на магнитной лентеСессии по терминалу
Мало обратной связиРедакторы, отладчики в онлайне

Multics (1965+) ввила многие идеи, которые пережили полвека:

  • иерархическая файловая система;
  • кольца защиты (предшественник уровней привилегий);
  • разделяемая память и IPC;
  • концепция «всё есть файл» (развита в Unix).

Multics была сложной и дорогой, но стала прямым предком Unix.


Unix и «одна простая идея»

Unix (Bell Labs, 1969–1970, Кен Томпсон, Деннис Ритчи) — переломный момент. компактное ядро и чёткая философия:

  • программы — фильтры в конвейере (cmd1 | cmd2);
  • устройства и IPC — через файловый интерфейс;
  • процессы — fork + exec;
  • переносимость на разное железо (C вместо ассемблера).

Unix породил семейство систем: BSD, System V, Linux (ядро + GNU), macOS (Darwin/XNU), Android (ядро Linux). См. классификацию ОС и основы UNIX.

Почему Unix до сих пор в учебниках
Термины POSIX, shell, сигналы, права rwx, /proc — наследие Unix. Даже Windows переняла идеи (WSL, NTFS-права, подсистема POSIX в старых версиях).


Персональные компьютеры — от DOS к Windows и macOS

MS-DOS (1981) — однопользовательская, по сути без полноценного планировщика процессов в современном смысле: одна программа владеет машиной (кроме TSR и поздних хаков). Простота и низкие требования к RAM.

Windows пошла другим путём:

  • Windows 1.x–3.x — оболочка над DOS;
  • Windows NT (1993) — новое ядро: 32-бит, защита памяти, многозадачность, клиент-сервер внутри ядра (гибридная архитектура). См. Windows.

macOS (наследник Mac OS + NeXTSTEP) — гибрид XNU (Mach + BSD). См. macOS.

Параллельно Linux (1991) как свободное ядро + дистрибутивы сделали Unix-подобную ОС массовой на серверах и позже на смартфонах.


Сетевые и распределённые ОС

Когда машины соединили локальными сетями, ОС научились:

  • монтировать удалённые файловые системы (NFS, SMB/CIFS);
  • запускать процессы на других узлах (ранние кластеры, сегодня — Kubernetes поверх Linux, а не «другая ОС»);
  • разделять имя и адрес (DNS), аутентификацию (Kerberos, домены AD).

«Сетевая ОС» как отдельный продукт (Novell NetWare и др.) уступила место сетевому стеку внутри универсальной ОС — TCP/IP в ядре или рядом с ним.


Реального времени (RTOS)

Не все системы гонятся за максимальным throughput. RTOS (FreeRTOS, QNX, VxWorks) гарантируют верхнюю границу задержки — критично для АСУ ТП, автомобилей, медицины.

КритерийОбычная ОС (GPOS)RTOS
ЦельСправедливость, throughputДедлайны
ПланированиеCFS, приоритеты с долей времениФиксированные приоритеты, предсказуемость
ПодкачкаДа, может задержать задачуЧасто отключена

См. также упоминание RTOS в классификации.


Виртуализация и облако

Гипервизор (VMware, KVM, Hyper-V) запускает несколько гостевых ОС на одном железе. Идея старая (IBM VM/370), массовая — с 2000-х.

Слой ниже гостевой ОС — эмуляция устройств, вложенные таблицы страниц (см. распределение памяти). Слой выше — контейнеры: изоляция процессов через namespaces и cgroups в Linux (Docker, containerd).

Контейнер — не замена ОС: это способ упаковать приложение, используя то же ядро хоста.


Хронология в одной таблице

ПериодВехаГлавная идея
1940-еENIAC, ColossusПрограмма = ручной запуск
1950-еПерфоленты, загрузчикиМеньше ручного труда оператора
1960-еOS/360, пакетные системыОчередь заданий
1960-еМультипрограммированиеCPU не простаивает в I/O
1960-70-еCTSS, MulticsTime-sharing, интерактив
1970-еUnixПростота, переносимость, pipe
1980-еMS-DOS, ранний MacПерсональный компьютер
1990-еWindows NT, Linux32/64 бит, сеть, open source
2000-еВиртуализация, SMP, NUMAМного ядер, много ВМ
2010-еКонтейнеры, облакоИзоляция без полной ВМ
2020-еeBPF, confidential computingНаблюдаемость и безопасность в ядре

Что вынести на экзамен и на практику

  1. ОС эволюционировала от «управления очередью заданий» к «управлению ресурсами для многих программ и пользователей».
  2. Unix задал лексикон индустрии; NT — модель Win32 и гибридного ядра; Linux — открытая серверная и мобильная база.
  3. Современные темы (контейнеры, cgroups, /proc, systemd) — продолжение идей изоляции, учёта ресурсов и IPC, а не революция с нуля.

Дальше по учебному маршруту: требования к ОС и подходы к реализацииядропроцессыпамять.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).