# История ОС

История операционных систем тесно связана с развитием компьютеров.

Основные идеи с 1950 по 1990. Наибольшая активность в 60х и 70х. Эволюция операционных систем прошла через 7 фаз:
1. open shop (нужна аналогия)
2. batch processing (пакетная обработка)
3. multiprogramming (асинхронное выполнение ввода/вывода)
4. timesharing (разделения времени)
5. concurrent programming
6. персональные компьютеры (personal computing)
7. распределённые системы (distributed systems)

По Таненбауму 4 поколения:
1. 1945-1955 Электронные лампы
2. 1955-1965 Транзисторы и системы пакетной обработки
3. 1965-1980 Интегральные схемы и многозадачность
4. 1980-сегодня Персональные компьютеры

Операционные системы по фазам Hansen:
1. IBM 701 open shop (1954)
2. BKS (1961)
3. Atlas supervisor (1961), B5000 (1964), Exec II (1966), Egdon (1966)
4. CTSS (1962), Multics file system (1965), Titan file system (1972), Unix (1974)
5. THE (1968), RC 4000 (1969), Venus (1972), Boss 2 (1975), Solo (1976)
6. OS 6 (1972), Alto (1979), Pilot (1980), Star user interface (1982)
7. WFS file server (1979), Unix United (1982), Amoeba (1990)

## 1 Open shop 

Можно сказать, что история операционных систем начинается в 1954 году, когда у первых серийных компьютеров ещё не было операционных систем. Тогда пользователи управляли ими вручную. Доступ к компьютерам был организован поочереди в стиле open shop.

Операторы первых серийных компьютеров 701 были предшествениками современных системных администраторов. Группа по обмену информацией между ними SHARE существует до сих пор. В эру системных операторов компьютер был инструментом специального назначения, наподобие пилы. Переход от системных операторов к системному администратору начался тогда, когда компьютеры превратились в универсальные инструменты.

Сразу стало очевидным, что open shop организация приводит к большому времени простоя процессора. Джордж Рикман вспомнил о вопиющей неэффективности эксплуатации первого компьютера IBM, знаменитого 701: "Каждому пользователю был выделен 15-минутный интервал, из которых обычно он тратил 10 минут на настройку оборудования для выполнения своих вычислений. К тому времени, когда он начинал свои вычисления, для них оставалось только 5 минут или меньше - трата две трети его временного интервала."

Джон Маккарти (1962) сделал аналогичное замечание о компьютере TX-0, который использовался в режиме открытого магазина в Массачусетском технологическом институте. Он добавил: "Если бы TX-0 был компьютером гораздо большего размера и если бы он работал так же, как сейчас, количество пользователей, которых он обслуживал было бы примерно таким же."

## 2 Сlosed shop 

Решение - выгнать пользователей из комнаты с компьютером, чтобы делегировать обслуживание и запуск программ специальному персоналу. Операторы собирали перфокарты, переписывали задачи на бабины с магнитной лентой и монтировали ленту на главный компьютер. Задания теперь вводились и запускались по одной в порядке их появления на ленте.

Теперь процессорное время тратилось эффективно, его не нужно был запускать во время подготовки программ. Чем длиннее были ленты, тем меньше простаивал главный компьютер. Но большие серии задач значительно увеличили время выполнения с точки зрения пользователей. Обычно требуется несколько часов (или даже день или два), прежде чем они могли получить результаты одного задания. Если задание включало компиляцию программы, единственным выходом в этот день могло быть сообщение об ошибке, вызванное неуместной точкой с запятой.

## 3 Multiprogramming/Многозадачность

В 1960-х годах большая основная память, вторичное хранилище с произвольным доступом, каналы данных и аппаратные прерывания радикально изменили операционные системы. Прерывания позволяли процессору имитировать одновременное выполнение нескольких программ и управлять одновременными операциями ввода/вывода. Эта форма параллелизма стала известна как мультипрограммирование (многозадачность).

Мультипрограммирование и вторичное хранилище сделали возможным создание операционных систем, которые обрабатывали непрерывный поток ввода, вычислений и вывода на одном компьютере, используя барабаны (или диски) для хранения больших буферов. Такая схема называлась спулингом/подкачка (Spooling - это акроним “Simultaneous Peripheral Operation On-Line.). Барабаны были удобнее лент, так как заполнялись с одной стороны устройство чтения перфокарт, а с другой считывались основным процессором. Больше не было накладных расходов на монтирование ленты (если только пользовательские программы не обрабатывали свои собственные ленты данных). Большие буферы произвольного доступа позволили использовать приоритетное планирование заданий, например, «кратчайшее задание — следующее» (вместо «первым пришел — первым обслужен»).

Система Atlas преложила также несколько идей, которые можно встретить в современных операционных системах. В статье The Atlas supervisor. Tom Kilburn, R. Bruce Payne and David J. Howarth (1961) появляется объяснение идей управления памятью (demand paging) и системных вызовов (supervisor calls).

#### demand paging (страничная организация памяти и алгоритм замещения страниц)

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

#### supervisor calls (системные вызовы для управления переферией, например для чтения и записи данных)

"Хотя во многих случаях системные вызовы возникают как подпрограммы для управления периферийным оборудованием, магнитными лентами и барабанами, не следует полагать, что это единственная функция этих подпрограмм. Входы в S.E.R. из подпрограмм прерывания или из инструкций экстракода в объектной программе инициируют подпрограммы, которые контролируют всю работу вычислительной системы, включая передачу информации между хранилищем и периферийными устройствами, связь с операторами и инженерами, инициирование, завершение и , при необходимости, мониторинг объектных программ, мониторинг отказов центрального компьютера и периферийных устройств, выполнение тестовых программ и накопление журнальной информации."

Atlas был организован так, чтобы защитить пользовательские программы и системные вызовы друг от друга.

## 4 Timesharing/Разделение времени

В 1962 году Джон МакКарти написал следующее:

"Под компьютерной системой с разделением времени я буду подразумевать такую, которая взаимодействует со многими одновременными пользователями через несколько удаленных консолей. Такая система будет выглядеть для каждого пользователя как большой частный компьютер. Когда пользователю нужна услуга, он просто начинает вводить запрос на услугу в своей консоли. Компьютер всегда готов обратить внимание на любую клавишу, которую он может нажать.

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

Разделение времени значительно снизило цену предоставления вычислительных мощностей.

CTSS 1965 и Multics 1969 были первыми реализациями этой идеи. Также современным ОС от них досталась технология иерархичной файловой системы для вторичного хранилища.

*Посмотреть MULTICS https://www.youtube.com/watch?v=q0yfhZB7VpA или подключиться к menu@tty.livingcomputers.org*

В 1969 Денис Ритчи И Кен Томпсон начали разработку альтернативы Multics о которой стало известно публично в 1974 году. Проект Multics превысил бюджет, безнадёжной отстал от графика, и был свёрнут. Денис: "Мы были немного подавлены большим менталитетом системы, Кен хотел создать что-то простое... Операционная система Multics больше не существовала для нас, но нам нравилось ощущение интерактивной работы на компьютере, которые она предлагала пользователю." Такие команды как: as, cal, chmod, chown, cmp, cp, date, dc, du, ed были созданы в 1971 году. В 1973 появились два важных нововведения в UNIX: язык С и реализация каналов. Каналы позволили легко комбинировать существующие программы в конвейры обработки данных. К середине 1980 Unix стала стандартом для систем с разделением времени и была установлена практически во всех крупных университетах мира.

*Включить AT&T Archives: The UNIX Operating System https://www.youtube.com/watch?v=tc4ROCJYbm0*

Примерно в это время системное администрирование стало формироваться как профессия. Считается что такие учебные заведения, как Университет Пердью, Унивеситет штата Нью-Йорк (SUNY) в г. Буффало, Университет штатов [Колорадо, Юта, Мэриленд] стали рассадниками этих специалистов. Это были как сейчас говорят эникейщики, ангелы-хранители компьютеров и их пользователей, готовые починить лазерный принтер, помочь студенту отладить новый драйвер, записать данные на архивные ленты, уговорить пользователей почистить персональные каталоги, чтобы освободить место, найти запчасти по всей стране.

С ростом популярности профессии возникла потребность в документации знаний об администрировании. "Идя навстречу пожеланиям трудящихся" Тим О'Reilly и его команда в конце 80-х начали публиковать документацию по UNIX. В 1989 коду было опубликовано первое издание книги Эви Немет Unix System Adminstration Handbook (в это время появилось множество директорий `/and so on/passwd`, вместо `/etc/`).

## 5 Конкурентное программирование

К середине 1960-х годов операционные системы уже достигли такого уровня сложности, который был выше человеческого понимания. Оглядываясь назад, Билл Линч (1972) заметил, что:

"Несколько проблем оставались нерешенными в операционной системе Exec II, и их нужно было избегать теми или иными специальными средствами. В 1962 году, когда разрабатывалась система, проблема взаимоблокировок вообще не понималась. В результате в системе было запрограммировано несколько надоедливых взаимоблокировок."

С середины 1960-х до середины 1970-х ученые-компьютерщики разработали концептуальную основу, которая сделает операционные системы более понятными. Эта новаторская попытка привела к открытию фундаментальных принципов параллельного программирования. Сила этих идей была продемонстрирована на нескольких влиятельных моделях операционных систем.

Dijkstra (1968a) и Habermann (1967) смогли доказать по индукции, что система THE не имеет взаимоблокировок. Лауэсен использовал аналогичный аргумент, чтобы доказать, что сопрограммы Boss 2 в конечном итоге обработают любой запрос на обслуживание.

Период появления таких концепций как: семафоры, мониторы, слои абстракции, удалённый вызов процедур.

*Игра для понимания концепций https://deadlockempire.github.io/. Цель сломать систему.*

## 6 Персональные компьютеры

В 1970-х микропроцессоры и полупроводниковая память сделали возможным создание мощных персональных компьютеров. Снижение стоимости оборудования в конечном итоге позволило людям владеть такими компьютерами. Xerox PARC был лидером в разработке многих технологий, которые сейчас считаются само собой разумеющимися: растровые дисплеи, мышь, лазерные принтеры и Ethernet.

Графические пользовательские интерфейсы, разработанные Дугом Энглебартом (1968), Аланом Кеем (1977) и другими, использовались в различных экспериментальных системах Alto (Лэмпсон, 1988). Xerox Star был первым коммерческим компьютером с мышью и оконным интерфейсом. Он был основан на Alto, но работал в три раза быстрее и имел 512 Кбайт памяти.

Система Macintosh была прямым потомком системы Star (Poole 1984, Hiltzik 1999). В 1990-х годах мышь и экранные окна превратили Интернет в глобальную коммуникационную среду.

## 7 Распределённые системы

Развитие Интернета и персональных компьютеров позволило создавать дешёвые алтернативы суперкомпьютерам - кластеры. Вычисления на них были дешевле, чем на мейнфреймах (суперкомпьютерах). Известными проектами были Beowolf, Amoeba. Другим популярным приложением таких системы стало распределённое хранение данных.

Amoeba — амбициозная распределенная система, разработанная учеными-компьютерщиками в Нидерландах: Опыт работы с распределенной операционной системой Amoeba. Эндрю С. Таненбаум, Робберт ван Ренесс, Ханс ван Ставерен, Грегори Дж. Шарп, Сапе Дж. Маллендер, Джек Янсен и Гвидо ван Россум (1990).


## Что случилось в 1991? Рождение Linux.

К концу 1990 года казалось, что UNIX неотвратимо движется к мировому господству. Эту систему выбирали как для ведения бизнеса (Taco Bell, McDonalds's), так и для исследовательских и научных рассчётов. Группа CSRG (Computer Systems Research Group - исследовательская группа по компьютерным системам) в Беркли как раз выпустила 4.3BSD-Reno. Коммерческие выпуски UNIX также пользовались успехом (SunOS). Оборудование персонального компьютера стало предметом широкого потребления, было надежным и относительно недорогим. На тот момент назрела нехватка UNIX с открытым исходным кодом. 

В 1991 группа разработчиков основали компанию Berkley Software Design, Inc. Компания BSDI предоставляла исполняемые файлы и исходный код для полностью коммерческой версии BSD UNIX. Именно её выбирали первые провайдеры ISP на заре развития Интернета. Компания продемонстрировала взрывоподбный рост.

Спохватившись, AT&T начала судебный процесс, заявив о копировании кода и краже производственных секретов. В результате судебного разбирательства в течение двух лет из кода BSD было удалено три файла из более 18000. К сожалению, это период неопределённости оказал негативное влияние на весь мир UNIX. 

В 1987 Танненбаум выпустил небольшой клон системы UNIX - MINIX под лицензией, разрешающий использование только в образовательных целях. Желая получить свободно распространяемую версию UNIX, финский студент Линус Торвальдс написал собственную микроядерную систему-клон Linux. Так началась эра Linux.

## Итоги 

Таким образом важными техническими инновациями были:
- идея операционной системы,
- сериализация задач на магнитной плёнке (tape batching),
- fifo планирование (first in, first out scheduling),
- спулинг (input/output spooling),
- процессорное мультиплексирование (processor multiplexing),
- неделимые операции (indivisible operations),
- загрузка страниц по требованию (demand paging),
- планирование задач с приоритетами (priority scheduling),
- удалённое создание задач (rеmote job entry),
- одновременное взаимодействие пользователей с системой (simultaneous user interaction),
- файловые системы постоянного доступа (on-line file systems),
- иерархические файловые системы,
- расширяемые ядра,
- концепции параллельного программирования,
- верифицированные параллельные языки (secure parallel languages),
- графические интерфейсы (GUI),
- удалённые сервера (remote servers).

За это время компьютеры ушли от вида специализированных устройств, проводящих расчёты военного назначения, к универсальным машинам для обработки данных. Это не могло стать возможным без эволюции операционных систем. Администрирование этих систем сформировалось как профессия.


# Архитектура ОС

Наверное к этому моменту у вас уже сложилось представление о том, что такое операционная система. Можно дать два определения ОС. С одной стороны, операционная система - это интерфейс между hardware и software, слой абстракции для прикладных программ и аппаратного обеспечения. С другой стороны, операционная система - это менеджер ресурсов. 

Типичная архитектура состоит из 3 компонент:
- ядро,
- оболочка,
- пользовательские программы.


# Ссылки

- Hansen. The evolution of operating systems
- Таненбаум. Современные операционные системы
- Немет Э. Руководство системного администратора (Краткая история системного администрирования)
- Hamming. The Art of Doing science and engineering (Главы 1-5)
- Michael W. Lucas. Absolute FreeBSD, 3rd Edition
- Rebel Code. Linux and the Open Source Revolution
- Петцольд, Чарльз. Код. Тайный язык информатики
- https://elektronika.su/
- https://yandex.ru/museum/
- https://computerhistory.org/