История операционных систем
История ОС - от мейнфреймов к персональным ПК
Современная Windows, Linux или macOS кажутся "всегда такими". На деле каждая возможность — от виртуальной памяти до вкладок в браузере — появилась как ответ на конкретную проблему — дорогой процессор простаивал, операторы вручную переносили перфоленты, один сбойный процесс ронял всю машину.
История ОС — это цепочка компромиссов: эффективность железа ↔ удобство программиста ↔ безопасность ↔ стоимость разработки. Понимая эту цепочку, проще читать документацию ядра, спорить об архитектуре и не путать "старый костыль" с "фундаментальной идеей".
Связанные материалы: определение и роль ОС, архитектура ядра, классификация современных ОС.
Поколения ЭВМ и появление ОС
Идеи из учебных курсов по ОС удобно привязать к поколениям железа: пока не появились транзисторы и магнитные носители, не было смысла в очередях заданий; пока не подешевела память — не появилось мультипрограммирование.
| Поколение | Период | Технология | Типичная организация вычислений | ОС |
|---|---|---|---|---|
| I | 1945–1955 | Электронные лампы, коммутационные панели | Программа на машинном языке, оператор "владел" машиной на время отладки | Нет отдельной ОС |
| II | 1955–1965 | Транзисторы, мейнфреймы | Пакетная обработка перфокарт, операторский зал | Пакетные системы (например, IBSYS на IBM 7094) |
| III | 1965–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 |
| ~1973 | 3-я редакция — ядро переписано на C |
| ~1974 | 4-я редакция — появились конвейеры (pipe) |
| 1979 | 7-я редакция — Unix стала по-настоящему кроссплатформенной |
Чтобы выбить у руководства новый PDP-11, разработчики пообещали автоматизировать патентный отдел программой для работы с текстом — хитрость сработала. Появилось первое ответвление — PWB/UNIX (Programmer's Workbench) для удалённой работы программистов. Исходный код начали продавать университетам при условии строгой секретности — так аспиранты Беркли создали BSD (Berkeley Software Distribution), куда вошёл редактор vi от Билла Джоя.
Компактное ядро и простые правила: программы — фильтры в конвейере (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 сегодня
| Ветка | Примеры | Роль |
|---|---|---|
| BSD | FreeBSD, OpenBSD, NetBSD | Серверы, сетевое оборудование, основа XNU |
| System V / коммерческий Unix | AIX, HP-UX, Solaris (исторически) | Корпоративные мейнфреймы и UNIX-серверы |
| GNU/Linux | Debian, Ubuntu, RHEL, Arch | Серверы, облако, рабочие станции, встраиваемые системы |
| Darwin / XNU | macOS, iOS, iPadOS, tvOS | Экосистема Apple |
| Android | AOSP, прошивки 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, Multics | Time-sharing, интерактив |
| 1969 | Unix на PDP-7 (Томпсон, Ритчи) | Компактное ядро, Unics |
| 1971 | Unix 1-я редакция, PDP-11 | Официальный релиз |
| ~1973 | Unix на языке C | Переносимость между платформами |
| ~1974 | Конвейеры (pipe) | Составные команды в shell |
| 1979 | Unix 7-я редакция, BSD | Кроссплатформенность, vi, университеты |
| 1981 | MS-DOS, IBM PC | AT&T не могла конкурировать на рынке ПО |
| 1983 | Проект GNU (Столлман), GPL | Свободная Unix-подобная экосистема |
| 1984 | Разделение AT&T, System V | Закрытый коммерческий Unix |
| 1987 | MINIX (Таненбаум) | Учебная Unix-подобная ОС |
| 1991 | Ядро Linux (Торвальдс) | Свободное монолитное ядро |
| 1992 | Linux + GPL, swap, GNU-утилиты | Массовый переход с MINIX |
| 1993 | Windows NT | Гибридное ядро, влияние Mach |
| 1997 | Apple покупает NeXT | Основа macOS / iOS (XNU) |
| 2005 | Git (Торвальдс) | Распределённый контроль версий для ядра Linux |
| 2005–2008 | Google → Android | Linux на смартфонах |
| 2000-е | Виртуализация, SMP, NUMA | Много ядер, много ВМ |
| 2010-е | Контейнеры, облако | Изоляция без полной ВМ |
| 2020-е | eBPF, confidential computing | Наблюдаемость и безопасность в ядре |
Что вынести на экзамен и на практику
- ОС эволюционировала от "управления очередью заданий" к "управлению ресурсами для многих программ и пользователей".
- Unix задал лексикон индустрии; NT — модель Win32 и гибридного ядра; Linux — открытая серверная и мобильная база.
- Современные темы (контейнеры, cgroups,
/proc, systemd) — продолжение идей изоляции, учёта ресурсов и IPC, а не революция с нуля.
Дальше по маршруту B: требования к ОС и подходы к реализации → ядро → процессы → память.
Как использовать историю ОС в практике
- Понимать, почему разделение user mode и kernel mode критично для надёжности;
- Видеть, откуда взялись процессы, планировщики и файловые абстракции;
- Не путать контейнеры и виртуализацию с заменой понимания базовой архитектуры ОС.
Если читать историю как карту причин и следствий, проще принимать архитектурные решения в современных системах.