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

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

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

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

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

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

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


Поколения ЭВМ и появление ОС

Идеи из учебных курсов по ОС удобно привязать к поколениям железа: пока не появились транзисторы и магнитные носители, не было смысла в очередях заданий; пока не подешевела память — не появилось мультипрограммирование.

ПоколениеПериодТехнологияТипичная организация вычисленийОС
I1945–1955Электронные лампы, коммутационные панелиПрограмма на машинном языке, оператор "владел" машиной на время отладкиНет отдельной ОС
II1955–1965Транзисторы, мейнфреймыПакетная обработка перфокарт, операторский залПакетные системы (например, IBSYS на IBM 7094)
III1965–1980Интегральные схемыМультипрограммирование, разделение времени, сетевые сервисыOS/360, Multics, ранний Unix
IVс 1980-хБольшие и сверхбольшие ИС (СБИС), ПКПерсональный компьютер, GUI, сеть в каждой ОСMS-DOS, Windows, Linux, macOS
Связка "железо → ОС" на экзамене

Лампы — панели и перфокарты без ОС.

Транзисторы — пакетные системы.

ИС — несколько программ в памяти и планировщик.

СБИС — однопользовательский ПК и позже многозадачные настольные системы.


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

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

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

Аналогия

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


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

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

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

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

На мейнфреймах вроде IBM 7090/7094 пакет собирали на относительно дешёвой машине (IBM 1401 со считывателем перфокарт), записывали задания на магнитную ленту, затем ленту монтировали на "большой" компьютер — так сокращали простой дорогого процессорного времени.

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


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

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

У OS/360 и родственных систем это было ключевым шагом — в оперативной памяти одновременно держали несколько заданий (типичный учебный пример — три программы), а пока одна ждала I/O, процессор отдавали другой. Именно отсюда — очереди "готовых" и "ожидающих устройство".

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

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

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

На OS/360 для универсальной загрузки CPU ввели спулинг (simultaneous peripheral operation on line) — медленный ввод-вывод (перфокарты, печать) стал фоновой задачей, пока другие задания считали на процессоре. Тот же приём живёт сегодня в очередях печати и буферизации диска.

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


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

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

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

Первой демонстрацией интерактивности на мейнфрейме стала CTSS (MIT, IBM 7094) — короткие команды отладки с терминала без часов ожидания пакета. На её идеях вырос Multics (GE-645 / Honeywell 6180) — "компьютер как общее предприятие" для многих пользователей.

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

  • иерархическая файловая система, длинные имена, симлинки;
  • кольца защиты (предшественник уровней привилегий);
  • сегментно-страничная виртуальная память, отображение файлов в адресное пространство;
  • разделяемая память и IPC через сегменты;
  • стеки в ядре с отдельным уровнем на кольцо безопасности;
  • "горячая" замена CPU, памяти и дисков без остановки сервиса.

Multics была сложной и дорогой, но стала прямым предком Unix — подробная история ветвления Bell Labs → Unix → GNU/Linux — в разделе История UNIX и Linux.


История UNIX и Linux — от Bell Labs до Android

На домашних и офисных ПК по-прежнему лидирует Windows (более 70% десктопов). Но если сложить смартфоны, ноутбуки и серверы, картина другая: Android обогнал Windows по числу устройств. Android работает на ядре Linux; macOS и iOS — UNIX-подобные системы на базе BSD и Mach. В итоге семейство UNIX/Linux сегодня управляет серверами, автомобильными мультимедиа, роутерами и умными устройствами — даже если на рабочем столе стоит Windows.

Развёрнутый обзор платформы — в Linux, macOS, Android; философия Unix — в Основы UNIX-систем.


Bell Labs: Multics, PDP-7 и рождение Unix (1969)

Bell Labs — исследовательский центр телекоммуникационного гиганта AT&T. Там появились языки C и C++, операционная система Unix и множество фундаментальных изобретений (лазер, транзистор, теория информации). Сейчас центр принадлежит Nokia.

В середине 1960-х Bell Labs вместе с MIT и General Electric разрабатывали Multics — амбициозную многопользовательскую ОС. Руководителем от Bell Labs был Виктор Высоцкий (сын эмигранта из России). Проект вышел избыточно сложным и дорогим; Bell Labs покинула Multics — но идеи time-sharing и виртуальной памяти остались в учебниках.

В 1969 году руководство отказалось покупать новое оборудование энтузиастам. Кен Томпсон нашёл забытый мини-компьютер PDP-7 с 8 КБ оперативной памяти (машина стоила около $64 000 — «доллар за бит»). Томпсон написал игру Space Travel, а пока жена уехала к родителям на три недели — редактор, ассемблер и ядро новой системы. Изначально она называлась Unics (игра слов: «это не Multics»). К нему присоединился Деннис Ритчи, который создал язык C, чтобы переносить ОС с одного процессора на другой.

Год / вехаСобытие
1969Первое ядро на PDP-7, название Unics
1971Официальная первая редакция Unix на PDP-11
~19733-я редакция — ядро переписано на C
~19744-я редакция — появились конвейеры (pipe)
19797-я редакция — Unix стала по-настоящему кроссплатформенной

Чтобы выбить у руководства новый PDP-11, разработчики пообещали автоматизировать патентный отдел программой для работы с текстом — хитрость сработала. Появилось первое ответвление — PWB/UNIX (Programmer's Workbench) для удалённой работы программистов. Исходный код начали продавать университетам при условии строгой секретности — так аспиранты Беркли создали BSD (Berkeley Software Distribution), куда вошёл редактор vi от Билла Джоя.

Философия Unix

Компактное ядро и простые правила: программы — фильтры в конвейере (cmd1 | cmd2); устройства и IPC — через файловый интерфейс; процессы — fork + exec; переносимость — за счёт C вместо ассемблера. Термины POSIX, shell, сигналы, права rwx, /proc — наследие этой модели. Даже Windows переняла идеи (WSL, NTFS-права).


Почему IBM выбрала MS-DOS, а не Unix (1981)

Когда IBM готовила первый персональный компьютер, Unix подходил идеально — но AT&T была признана в США монополистом в телекоммуникациях. Регуляторы запрещали ей вести коммерческую деятельность на рынке ПО, чтобы не душить конкурентов. IBM даже не рассматривала Unix как вариант для PC.

Вместо этого Microsoft купила систему QDOS за $75 000, переименовала в MS-DOS — на её базе позже выросла Windows. Это одна из ключевых развилок истории: Unix ушёл в университеты и серверы, а массовый ПК получил другую линию.


Разделение AT&T, GNU и «Свободу Unix!» (1982–1992)

В 1982–1984 годах Минюст США разделил AT&T. Компания закрыла код Unix и выпустила коммерческую ветку System V.

В 1983 году хакер из MIT Ричард Столлман опубликовал манифест «Свободу Unix!» (GNU's Not Unix). Он уволился из университета, чтобы тот не претендовал на его разработки, и основал проект GNU — свободную Unix-подобную систему без проприетарного кода AT&T. Столлман создал лицензию GPL: любой изменённый открытый код тоже должен оставаться открытым.

Проекту GNU не хватало своего ядра: разработка GNU Hurd на микроядре Mach затянулась из-за архитектурной сложности. Кстати, создатель Mach Ричард Рашид позже ушёл в Microsoft и повлиял на архитектуру Windows NT — отсюда «родство» NT и Unix на уровне идей IPC и подсистем.


MINIX, ядро Linux и GNU/Linux (1987–1992)

В 1987 году Энди Таненбаум создал MINIX — учебную UNIX-подобную ОС для своего курса. Финский студент Линус Торвальдс установил MINIX на ПК 386 с 4 МБ RAM, но быстро уперся в ограничения: слабая многозадачность, невозможность подключиться к серверу университета, закрытое ядро без права сторонних экспериментов. В 1991 году, вдохновившись MINIX, он написал собственное монолитное ядроLinux. Торвальдс хотел назвать систему Freax, но администратор FTP-сервера Ари Лемке создал для него папку linux — имя прижилось. Подробнее о детстве Линуса, первом релизе 0.01, споре с Таненбаумом, войне с Microsoft и создании Git — в Линус Торвальдс — ядро Linux и Git.

В 1992 году пользователи массово переходили с MINIX на Linux: Линус реализовал файловую подкачку (swap) для машин с малой памятью и перевёл проект на лицензию GPL. Объединив ядро Linux и окружение GNU (компилятор GCC, утилиты, C-библиотека), мир получил полноценную свободную ОС — её часто называют GNU/Linux, хотя в быту говорят просто «Linux». Столлман до сих пор напоминает: вклад GNU не стоит забывать.

Миф о «безопасности открытого кода»

Открытость не означает отсутствие багов. Уязвимости в Linux находят регулярно; некоторые жили в ядре годами. Открытый код даёт возможность аудита сообществом — но не гарантию, что каждая строка уже проверена.

Сегодня Линус Торвальдс живёт в США, сам почти не пишет код — он координирует изменения в ядре, которые вносят тысячи разработчиков. В 2006 году Кен Томпсон перешёл в Google и вместе с Робом Пайком создал язык Go. Подробнее о ролях — в Великие люди.


macOS и iOS: путь через NeXT (1985–1997)

В 1985 году Стив Джобс из-за разногласий ушёл из Apple и основал NeXT Inc. Компания создала закрытую систему NeXTSTEP на базе микроядра Mach и наработок BSD. В 1997 году Apple купила NeXT за $430 млн — наработки NeXTSTEP легли в основу современных macOS и iOS (ядро XNU = Mach + BSD). Джобс пытался переманить Торвальдса в Apple, но Линус отказался — он не любил микроядерную архитектуру. См. macOS и архитектуру ядра.


Android: Linux на миллиардах телефонов (2004–2008)

В 2004 году сторонняя компания начала разрабатывать Android для конкуренции с Symbian и Windows Mobile — без своего «железа» и без договорённостей с производителями. В 2005 году Google выкупил Android за $130 млн. К 2008 году (первый публичный релиз) Google заручился поддержкой техногигантов: в 2007 вышел iPhone, и рынку срочно нужен был гибкий ответ Apple. Чистый Android базируется на ядре Linux; поверх — виртуальная машина ART, фреймворк приложений и оболочка производителя. См. Android.


Семейство UNIX/Linux сегодня

ВеткаПримерыРоль
BSDFreeBSD, OpenBSD, NetBSDСерверы, сетевое оборудование, основа XNU
System V / коммерческий UnixAIX, HP-UX, Solaris (исторически)Корпоративные мейнфреймы и UNIX-серверы
GNU/LinuxDebian, Ubuntu, RHEL, ArchСерверы, облако, рабочие станции, встраиваемые системы
Darwin / XNUmacOS, iOS, iPadOS, tvOSЭкосистема Apple
AndroidAOSP, прошивки OEMМобильные устройства

Unix породил лексикон всей индустрии. См. классификацию ОС и основы UNIX.


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

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

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

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

macOS — наследник Mac OS и NeXTSTEP; см. macOS и раздел macOS и iOS: путь через NeXT.


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

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

  • монтировать удалённые файловые системы (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 уже давала каждому пользователю "виртуальную" машину поверх общего железа; массовая виртуализация на x86 — с 2000-х.

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

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


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

ПериодВехаГлавная идея
1940-еENIAC, ColossusПрограмма = ручной запуск
1950-еПерфоленты, загрузчикиМеньше ручного труда оператора
1960-еOS/360, пакетные системыОчередь заданий
1960-еМультипрограммированиеCPU не простаивает в I/O
1960-70-еCTSS, MulticsTime-sharing, интерактив
1969Unix на PDP-7 (Томпсон, Ритчи)Компактное ядро, Unics
1971Unix 1-я редакция, PDP-11Официальный релиз
~1973Unix на языке CПереносимость между платформами
~1974Конвейеры (pipe)Составные команды в shell
1979Unix 7-я редакция, BSDКроссплатформенность, vi, университеты
1981MS-DOS, IBM PCAT&T не могла конкурировать на рынке ПО
1983Проект GNU (Столлман), GPLСвободная Unix-подобная экосистема
1984Разделение AT&T, System VЗакрытый коммерческий Unix
1987MINIX (Таненбаум)Учебная Unix-подобная ОС
1991Ядро Linux (Торвальдс)Свободное монолитное ядро
1992Linux + GPL, swap, GNU-утилитыМассовый переход с MINIX
1993Windows NTГибридное ядро, влияние Mach
1997Apple покупает NeXTОснова macOS / iOS (XNU)
2005Git (Торвальдс)Распределённый контроль версий для ядра Linux
2005–2008Google → AndroidLinux на смартфонах
2000-еВиртуализация, SMP, NUMAМного ядер, много ВМ
2010-еКонтейнеры, облакоИзоляция без полной ВМ
2020-еeBPF, confidential computingНаблюдаемость и безопасность в ядре

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

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

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


Как использовать историю ОС в практике

  • Понимать, почему разделение user mode и kernel mode критично для надёжности;
  • Видеть, откуда взялись процессы, планировщики и файловые абстракции;
  • Не путать контейнеры и виртуализацию с заменой понимания базовой архитектуры ОС.

Если читать историю как карту причин и следствий, проще принимать архитектурные решения в современных системах.