Обширное и бурно развивающееся семейство Unix оказало огромное идейное влияние на развитие операционных систем в 80-е и 90-е годы XX столетия. Генеалогия систем семейства опубликована на сайте [perso.wanadoo.fr ] и слишком обширна для того, чтобы ее можно было полностью привести в книге.

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

Родоначальником семейства следует, по-видимому, считать не первую версию Unix, а Multics , совместно разрабатывавшуюся в 1965-1969 гг. General Electric и Bell Laboratories . За это время General Electric выделило подразделение, занимавшееся работами над Multics и аппаратной платформой для нее (GE-645), в отдельную компанию Honeywell .

Multics была первой из промышленных систем, предоставлявших:

  • создание процессов системным вызовом fork;
  • страничную виртуальную память;
  • отображение файлов в адресное пространство ОЗУ;
  • вложенные каталоги;
  • неструктурированные последовательные файлы;
  • управление доступом на основе ограниченных ACL (колец доступа).

Multics оказала огромное влияние не только на разработчиков Unix - значительные следы идейного влияния этой системы прослеживаются так же в RSX-11 и VAX/VMS фирмы DEC. Последние Multics-системы были доступны в Internet в 1997 г.

В 1969 г. Bell Laboratories отказалась от работ над Multics и начала разработку собственной ОС для внутренних нужд. По-видимому, основной причиной этого шага было осознание несоответствия между амбициозными целями проекта Multics (ОС была весьма требовательна к ресурсам и могла работать только на больших компьютерах Honeywell), в то время как материнской компании Bell Labs - American Telephone & Telegraph - требовалась единая операционная среда, способная работать на различных миникомпьютерах, используемых в подразделениях телефонной сети США.

В Bell Laboratories был объявлен внутренний конкурс на разработку переносимой ОС, способной работать на миникомпьютерах различных поставщиков. К проекту были предъявлены следующие основные требования:

  • многоплатформенность;
  • вытесняющая многозадачность;
  • многопользовательский доступ в режиме разделения времени;
  • развитые телекоммуникационные средства.

Один из участников работ над Multics , К. Томпсон, разработал крайне упрощенное ядро ОС, названное UNIX, для миникомпьютера PDP-7. К 1972 г. К. Томпсон и Д. Ритчи переписали ядро системы в основном на языке С и продемонстрировали возможность переноса ОС на миникомпьютеры PDP-11. Это обеспечило выполнение всех требований конкурса, и UNIX была признана основной платформой для вычислительных систем, эксплуатируемых в AT&T.

Легенды доносят до нас более колоритные детали ранних этапов истории новой системы. Так, одна из очень популярных легенд, излагаемая в той или иной форме несколькими источниками, утверждает, что история UNIX началась с разработанной для Multics игровой программы под названием Star Wars (звездные войны - сама эта программа и даже правила игры до нас не дошли). Уволенный из группы разработчиков Multics за разгильдяйство (мы приводим здесь наиболее радикальный вариант легенды, не заботясь о его согласовании с историческими фактами), Томпсон занялся "оживлением" неиспользуемой PDP-7, стоявшей в углу машинного зала. Оживление заключалось в написании ядра ОС, реализующего подмножество функциональности Multics, достаточное, для того чтобы перенести и запустить его любимые Star Wars [Бах 1986].

Первые версии UNIX были рассчитаны на машины без диспетчера памяти. Процессы загружались в единое адресное пространство. Ядро системы размещалось в нижних адресах ОЗУ, начиная с адреса 0, и называлось сегментом реентерабельных процедур . Реентерабельность обеспечивалась переустановкой стека в момент системного вызова и запретом переключения задач на все время исполнения модулей ядра. На машинах с базовой адресацией выполнялось перемещение образов процессов по памяти и сброс образа процесса на диск (задачный своппинг).

В Multics и современных системах Unix, fork реализуется посредством копирования страниц при модификации. Ранние версии UNIX физически копировали образ процесса. Большая часть (по некоторым оценкам, до 90%) fork немедленно продолжается исполнением системного вызова exec , поэтому одной из первых оптимизаций, придуманных в университетских версиях системы, было введение системного вызова vfork . Порожденный этим вызовом процесс исполнялся на самом образе родителя, а не на его копии. Создание нового образа процесса происходило только при исполнении exec . Для того чтобы избежать возможных проблем взаимоисключения (например, при вызове нереентерабельных функций стандартной библиотеки), исполнение родителя приостанавливалось до тех пор, пока потомок не выполнит exec или не завершится.

Выделяют [Баурн 1986] следующие отличительные особенности системы.

  • Порождение процессов системным вызовом fork , который создает копию адресного пространства в пользовательской области процесса.
  • Результат завершения процесса хранится в его дескрипторе и может быть считан только родителем. В списке процессов такой дескриптор выглядит как процесс в специальном состоянии, называемом зомби (zombie ).
  • Процессы-сироты (продолжающие исполнение после завершения родителя) усыновляются процессом с идентификатором, равным 1.
  • Процесс с идентификатором 1 запускается при загрузке системы (по умолчанию это /bin/ink ) и запускает все остальные обязательные задачи в системе. Наличие такого процесса иногда объявляют необходимым и достаточным критерием для причисления той или иной системы к семейству Unix.
  • Древовидная структура пространства имен файловой системы: дополнительные ФС монтируются в те или иные точки корневой ФС и идентифицируются затем точкой монтирования, а не именем устройства, на котором расположены.
  • Файлы рассматриваются ОС как неструктурированные потоки байтов и не типизованы на уровне ОС (в частности, на уровне ОС нет деления файлов на записи).
  • Файловая система поддерживает множественные имена файлов в виде жестких и, у более поздних версий, символических связей.
  • Отложенное удаление файлов: если процесс открыл файл, а другой процесс его удалил, то первый процесс может продолжать работу с файлом, и физическое удаление происходит только после того, как первый процесс его закроет.
  • Лозунг "все - файл", который, впрочем, последовательно реализован только в экспериментальной системе Plan 9 - в реальных Unix системах практически всегда присутствуют объекты, к которым не применимы файловые операции: переменные среды, структуры данных ядра в ранних версиях (позднее они были оформлены в виде псевдофайловой системы /ргос ), объекты SysV IPC и примитивы взаимоисключения POSIX Thread Library в современных системах.
  • Своеобразный командный язык, основанный на широком применении переназначения ввода-вывода и конвейеров (последовательностей задач, соединенных трубами).

Некоторые из перечисленных особенностей были позаимствованы другими ОС. Так, переназначение ввода-вывода и конвейеры реализуются командными процессорами ОС семейства СР/М, начиная с MS DOS 3.30. cmd.exe - командный процессор OS/2 и Windows NT/2000/XP - даже правильно понимает конструкцию cmdiine | more 2>&1 . Стандартные командные процессоры UNIX портированы практически на все современные ОС. Функциональный аналог Korn Shell включен в стандартную поставку Windows 2000.

Жесткие связи файлов (однако, без отложенного удаления) поддерживаются FCS2 (файловой системой VAX/VMS), NTFS и jfs при использовании под OS/2. Точки монтирования (подключение дополнительных ФС в дерево каталогов существующей ФС) реализованы в Windows 2000 и Toronto Virtual File System для OS/2.

Системный вызов CreateProcess Windows NT/2000/XP может имитировать семантику fork: для этого достаточно передать в качестве имени программы для нового процесса пустой указатель.

Библиотека ЕМХ для OS/2 реализует fork при помощи собственного обработчика страничного отказа.

Исследовательский UNIX

Первый перенос ОС UNIX

Седьмая редакция

Возникновение группы университета г. Беркли (BSD)

UNIX System III и первые коммерческие версии системы

AT&T System V Release 2 и Release 3

2. Основные понятия ОС UNIX и базовые системные вызовы

Основные понятия

Пользователь

Интерфейс пользователя

Привилегированный пользователь

Программы

Процессы

Перенаправление ввода/вывода

Основание и история

История ОС UNIX началась в недрах Bell Telephone Laboratories (теперь AT&T Bell Laboratories) и связана с известными теперь всем именами Кена Томпсона, Денниса Ритчи и Брайана Кернигана (два последних имени знакомы читателям и как имена авторов популярнейшей книги по языку программирования Си, издававшейся в нашей стране на русском языке).

Проект операционной системы Multics: неудача с положительными последствиями

С 1965 по 1969 год компания Bell Labs совместно с компанией General Electric и группой исследователей из Масачусетского технологического института участвовала в проекте ОС Multics. Целью проекта было создание многопользовательской интерактивной операционной системы, обеспечивающей большое число пользователей удобными и мощными средствами доступа к вычислительным ресурсам. В этом курсе мы не ставим задачу познакомить слушателей с ОС Multics. Это могло бы быть темой отдельного большого курса. Однако отметим хотя бы некоторые идеи, которые содержались в проекте MAC (так назывался проект ОС Multics).

Во-первых, эта система основывалась на принципах многоуровневой защиты. Виртуальная память имела сегментно-страничную организацию, разделялись сегменты данных и сегменты программного кода, и с каждым сегментом связывался уровень доступа (по выполнению для сегментов команд и уровень чтения и записи для сегментов данных). Для того, чтобы какая-либо программа могла вызвать программу или обратиться к данным, располагающимся в некотором сегменте, требовалось, чтобы уровень выполнения этой программы (точнее, сегмента, в котором эта программа содержалась, был не ниже уровня доступа соответствующего сегмента). Такая организация позволяла практически полностью и с полной защитой содержать операционную систему в системных сегментах любого пользовательского виртуального адресного пространства.

Во-вторых, в ОС Multics была спроектирована и реализована полностью централизованная файловая система. В централизованной файловой системе файлы, физически располагающиеся на разных физических устройствах внешней памяти, логически объединяются в один централизованный архив или древовидную иерархическую структуру, промежуточными узлами которой являются именованные каталоги, а в листьях содержатся ссылки на файлы. В том случае, когда при поиске файла в архиве по его имени оказывалось, что соответствующий накопитель (магнитный диск или магнитная лента) не был установлен на устройство внешней памяти, ОС обращалась к оператору с требованием установить нужный том внешней памяти. Естественно, такая дисциплина существенно облегчала операторскую работу и администрирование файловой системы, хотя и затрудняла выполнение таких рутинных действий как перенос части файловой системы с одного компьютера на другой. Позже мы увидим, какой изящный компромисс был выбран при реализации ОС UNIX.

Далее, наличие большой сегментно-страничной виртуальной памяти позволило использовать отображение файлов в сегменты виртуальной памяти. Другими словами, при открытии файла в виртуальной памяти соответствующего процесса образовывался сегмент, в который полностью отображался файл, располагающийся во внешней памяти. (Следует отметить, что в файловой системе ОС Multics на базовом уровне поддерживались файлы со страничной структурой. Более сложные организации являлись надстройкой). Дальнейшая работа с файлом происходила на основе общего механизма управления виртуальной памятью.

Операционная система Multics, хотя и не была полностью доведена до стадии коммерческого продукта, обогатила мировое сообщество системных программистов массой ценных идей, многие из которых сохраняют свою актуальность по сей день и используются применительно не только к операционным системам. Основным недостатком ОС Multics, который, по всей видимости, и помешал довести систему до уровня программного продукта, была ее чрезмерная сложность. Среди участников проекта Multics находились Кен Томпсон и Деннис Ритчи.

Решение о прекращении участия в проекте Multics было принято на самом верхнем уровне руководства Bell Labs, и сотрудники, по существу, были поставлены перед свершившимся фактом. Более того, руководство компании, разочарованное результатами весьма дорогостоящего проекта, вообще не желало больше вести какие-либо работы, связанные с операционными системами.

Возникновение и первая редакция ОС UNIX

Принято считать, что исходным толчком к появлению ОС UNIX явилась работа Кена Томпсона по созданию компьютерной игры "Space Travel". Он делал это в 1969 году на компьютере Honeywell 635, который до этого использовался для разработки проекта MAC. В это же время Кен Томпсон, Деннис Ритчи и другие сотрудники Bell Labs предложили идею усовершенствованной файловой системы, прототип которой был реализован на компьютере General Electric 645. Однако компьютер GE-645, который был рассчитан на работу в режиме разделения времени и не обладал достаточной эффективностью, не годился для переноса Space Travel. Томпсон стал искать замену и обнаружил, что появившийся к этому времени 18-разрядный компьютер PDP-7 с 4 килословами оперативной памяти и качественным графическим дисплеем вполне для этого подходит.

После того, как игра была успешно перенесена на PDP-7, Томпсон решил реализовать на PDP-7 разработанную ранее файловую систему. Дополнительным основанием для этого решения было то, что компания Bell Labs испытывала потребность в удобных и дешевых средствах подготовки и ведения документации. В скором времени на PDP-7 работала файловая система, в которой поддерживались: понятие inodes, подсистема управления процессами и памятью, обеспечивающая использование системы двумя пользователями в режиме разделения времени, простой командный интерпретатор и несколько утилит. Все это еще не называлось операционной системой UNIX, но уже содержало родовые черты этой ОС.

Название придумал Брайан Керниган. Он предложил назвать эту двухпользовательскую систему UNICS (Uniplexed Information and Computing System). Название понравилось, поскольку, помимо прочего, оно напоминало об участии сотрудников Bell Labs в проекте Multics. В скором времени UNICS превратилось в UNIX (произносится так же, но на одну букву короче).

Первыми реальными пользователями UNIX стали сотрудники патентного отдела Bell Labs. Однако существовали некоторые проблемы, связанные с PDP-7. Во-первых, эта машина не принадлежала компьютерной группе (была только во временном пользовании). Во-вторых, возможности этого компьютера не удовлетворяли потребности исследователей. Поэтому в 1971 году был приобретен новый 16-разрядный компьютер фирмы Digital Equipment PDP-11/20, и на него была перенесена UNIX. Существовавший к этому времени вариант системы был написан на языке ассемблера, так что можно представить, что перенос был совсем не простым делом. На PDP-11 система поддерживала большее число пользователей. Кроме того, была реализована утилита форматирования текстовых документов roff (тоже на языке ассемблера).

В ноябре 1971 года был опубликован первый выпуск документации по ОС UNIX ("Первая редакция"). В соответствии с этой "Первой редакцией" назвали и соответствующий документации вариант системы. Впоследствии это стало традицией: новая редакция ОС UNIX объявлялась при выходе в свет новой редакции документации.

Вторая редакция появилась в 1972 году. Наиболее существенным качеством "Второй редакции" было то, что система была переписана на языке Би ("B"). Язык и интерпретирующая система программирования были разработаны Кеном Томпсоном под влиянием существовавшего языка BCPL. Во второй редакции появились программные каналы ("pipes").

Появление варианта системы, написанного не на языке ассемблера, было заметным продвижением. Однако сам язык Би во многом не удовлетворял разработчиков. Подобно языку BCPL язык Би был бестиповым, в нем поддерживался только один тип данных, соответствующий машинному слову. Другие типы данных эмулировались библиотекой функций. Деннис Ритчи, который всегда увлекался языками программирования, решил устранить ограничения языка Би, добавив в язык систему типов. Так возник язык Си ("C"). В 1973 году Томпсон и Ритчи переписали систему на языке Си. К этому времени существовало около 25 установок ОС UNIX, и это была "Четвертая редакция".

В июле 1974 года Томпсон и Ритчи опубликовали в журнале Communications of the ACM историческую статью "UNIX Timesharing Operating System", которая положила начало новому этапу в истории системы. ОС UNIX заинтересовались в университетах. Этому способствовала политика компании Bell Labs, которая объявила о возможности бесплатного получения исходных текстов UNIX для использования в целях образования (нужно было платить только за носитель и документацию).

Появившуюся к этому времени "Пятую редакцию" ОС UNIX одними из первых получили Калифорнийский университет г. Беркли и университет Нового Южного Уэльса г. Сидней (Австралия).

Исследовательский UNIX

В 1975 году компания Bell Labs выпустила "Шестую редакцию" ОС UNIX, известную как V6 или Исследовательский UNIX. Эта версия системы была первой коммерчески доступной вне Bell Labs. К этому времени большая часть системы была написана на языке Си. Небольшие размеры языка и наличие сравнительно легко переносимого компилятора придавали ОС UNIX V6 новое качество реально переносимой операционной системы. Кроме того, потенциальное наличие на разных аппаратных платформах компилятора языка Си делало возможным разработку мобильного прикладного программного обеспечения.

| Multics

Multics (англ. Mult iplexed I nformation and C omputing S ervice - «Мультиплексная информационная и вычислительная служба») - ранняя операционных систем с разделением времени исполнения программ, основанная на концепции одноуровневой памяти.

Предыстория

Проект МАС (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) начался как чисто исследовательский в MIT в 1963 году. Потом он разросся в лабораторию компьютерных наук (LCS), а в наши дни назыается Лаборатория компьютерных наук и искусственного интеллекта.

В начале 60-х был всплеск интереса к системам с разделением времени. Джон МакКарти написал заметку под заглавием “Программа для оператора с разделением времени для проекта IBM 709” в 1959 году. Корбато, Мервин-Даггет и Далей в 1962 году написали в статье, что “мы на пороге третьего глобального изменения к подходу использования компьюьтеров, из-за разделения времени”. Сначала это рассматривали как способ поднять эффективность использования компьютера, но очень быстро пришли к идее многопользовательской системы. Деннис Ритчи потом скажет, что самый медленный этап в цикле “написать-скомпилировать-выполнить-отладить” стал определяться человеком, а не машиной.

В рамках проекта МАС получился значительный вклад в системы с разделяемым временем, включая разработку операционной системы CTSS (Compatible Time-Sharing System). Во второй половине 60-х было создано несколько других систем с разделением времени, например BBN, DTSS, JOSS, SDC, и пр. Но все это не имеет отношения к этой статье. А вот Multiplexed Information and Computing Service (MULTICS) - имеет.

Multics

Это совместная разработка MIT, Bell Telephone Laboratories (BTL) и General Electric (GE) по созданию ОС с разделением времени для компьютера GE-645.

В то время “использовать компьютер” значило практически исключительно “программировать”. То есть, необходимо было более эффективно выполнять упомянутый выше цикл «написать-отладить».

Multics должен был стать прикладным ПО, которое может поддерживать до 1000 пользователей одновременно. Еще из ТЗ (цитируется по “Введению и обзору в систему Multics”, Корбато, Высоцкий, 1965):

  • Работа в режиме 24х7 без сбоев
  • Наличие фреймворка, который можно будет дописать и усовершенствовать по мере надобности
  • Поддержка различных языков программирования и интерфейсов пользователя. Саму систему писали в основном на языке высокого уровня PL/I.
  • Поддержка широкого набора приложений
  • Поддержка удобного, гибкого и быстрого удаленного доступа
  • Иметь иерархическую структуру контроля, распределения ресурсов и авторизации
  • Иметь надежную ФС
  • Поддержка управления доступа к данным
  • Наличие онлайн-документации
BTL отошел от этого проекта в начале 1969 года. Multics развивался как коммерческий продукт даже после череды перепродаж. Honeywell выкупил компьютерный бизнес GE, а Bull выкупил Honeywell. В целом, проект удался и заметно повлиял на многие последующие. Последний компьютер под управлением Multics выключили 31 октября 2000 года.

Вадим Марков @BubaVV

(GE) и . Компания Bell Labs вышла из проекта в году, а в году компьютерный бизнес компании General Electric (вместе с Multics), отошел к компании . Multics был задуман компанией General Electric как коммерческий продукт, и стал таковым уже под руководством компании Honeywell, хотя так никогда и не нашел успеха на компьютерном рынке.

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

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

Инновационные идеи

Multics была одной из первых операционных систем, реализовавшей плоскую модель хранения данных, четко разделяющей концепции (называемых в системе Multics сегментами ) и вычислительных процессов . Память вычислительных процессов состояла из сегментов, каждый из которых обладал своим адресным пространством. Для чтения или записи в сегменты, вычислительный процесс использовал инструкции системы, а операционная система брала на себя всю заботу по сохранению измененных данных на компьютера.

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

В Multics была так же спроектирована и реализована большая сегментно-страничная виртуальная память, позволившая использовать отображение файлов в сегменты виртуальной памяти. Иными словами, при открытии файла в виртуальной памяти соответствующего процесса образовывался сегмент, в который полностью отображался файл, располагающийся во внешней памяти. (Следует отметить, что в файловой системе ОС Multics на базовом уровне поддерживались файлы со страничной структурой. Более сложные организации являлись надстройкой.) Дальнейшая работа с файлом происходила на основе общего механизма управления виртуальной памятью.

Одним из главных неудобств такого подхода (появившемся в основном из-за различий электронных архитектур вычислительных машин, на которой система работала), было ограничение размера сегмента до 256 * 1024 32-битных слов, что приблизительно равно 1 Мегабайту по сегодняшним стандартам. Поэтому для работы с файлами, большими по размеру чем установленный лимит, должен был использоваться дополнительный код в исполняемых программах. Сами файлы, по размеру большие чем 256 * 1024 32-битных слов, представлялись системой в виде ряда соединенных воедино сегментов.

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

В системе Multics была впервые реализована и следующая инновационная идея, а именно - динамическе связывание (dynamic linking) исполняемой программы с библиотеками кода. Благодаря динамическому связыванию, исполняемый процесс мог запрашивать у системы о подключении дополнительных сегментов к собственному адресному пространству, а именно сегментов, содержащих полезный код для исполняемой программы.

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

В равной степени важным являлось и то, что с правильной настройкой системы безопасности в Multics, код из одного сегмента мог получать доступ к структурам данных, инициализированными в совершенно другом процессе. Для такого взаимодействия между пользовательскими и отдельными -процессами, процесс пользователя должен был динамически подключить сегмент кода, ассоциированный с этим процессом, и вызывать находящиеся там методы. Код, находящийся в подключенном сегменте мог напрямую работать с используемыми в даемон-процессе структурами данных. Когда вызванный код из подключенного сегмента заканчивал работу, выполнение возвращалось в пользовательский процесс через обычную процедуру возвращения из вызываемого метода.

Стоит заметить, что две приведенные выше идеи так до сих пор и не были реализованы в полной мере на сегодняшних самых распространенных операционных системах, несмотря на большое развитие компьютерной техники, начавшееся в ; хотя в своей нынешней реализации эти идеи формируют то что мы называем динамическими связями (dynamic linking) в компьютерных системах.

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

Как было уже упомянуто, система Multics могла работать на многопроцессорных компьютерах, по существу явившись одной из самых первых мульти-процессорных операционных систем.

Multics была так же одной из первой систем, в которой большое внимание уделялось безопасности взаимодействия между программами и пользователями. Более того, Multics возможно была самой первой операционной системой, задуманной изначально и реализованной как безопасная, не смотря на то что ранние версии системы Multics все-таки неоднократно взламывались хакерами. Взломы системы приводили к доработкам системы безопасности, которые в конечном счете определили широко распространенные подходы к архитектуре безопасности в операционных системах, и сделали саму систему Multics более безопасной. Как только в систему было установлено электронное оборудование второго поколения со встроенной поддержкой привилегий пользователей (определяющих права пользователя на доступ к данным и программам), взломы системы Multics стали очень редким явлением.

Дополнительно к тому, что в Multics одной из первых была реализована иерархическая файловая система, имена файлов могли быть практически произвольной длины и содержать любые символы. Файл или директория могли иметь несколько имен (короткое и длинное); так же были доступны для использования символьные ссылки между директориями.

Так же в Multics был впервые реализован (теперь уже стандартный) подход использования для каждого вычислительного процесса в системы, с отдельным стеком для каждого уровня безопасности вокруг ядра.

Multics так же явилась одной из самых первых операционных систем, написанных на языке высокого уровня. Изначально был использован PL/I, а для компьютеров Burroughs B5000 Multics была переписана на .

История проекта

Изначально Multics была разработана для 36-битных мэйнфреймов GE-645, а позднее - и для машин серии Honeywell 6180.

Дополнительные замечания

Удивительно что ядро системы Multics, находящееся постоянно в памяти компьютера, и в те далекие дни часто высмеиваемое за свой размер и сложность, занимало всего 135 Килобайт кода.

Первые компьютеры GE-645 имели память размером 512 * 1024 32-х битных слов (или 2 Мегабайта по сегодняшним меркам), поэтому ядро системы занимало не так уж и много места.

Стоит так же заметить, что вся операционная система, включая сложный компилятор языка PL/I, пользовательские команды и дополнительные библиотеки, состояла из примерно полутора тысяч исходных файлов, каждый из которых содержал примерно по 200 строк кода. В скомпилированном виде весь этот код занимал около 4.5 Мегабайт, что было огромным размером по тем временам.

Компиляторы Multics в основном оптимизировали код по размеру, а не по эффективности использования центрального процессора, что было обосновано экономией памяти в многопользовательской системе.

Смотри также

  • Фернандо Корбато (Fernando J. Corbato), лидер проекта Multics пока в нем участвовал
  • (Victor A. Vyssotsky), один из лидеров проекта сайт, всецело посвященный системе Multics

Помимо широко распространенных машин, проектируемых в соответствии со сложившимися стандартами, часто создаются машины, в которых особо выделяется какое-либо свойство. Так, наибольшее внимание в начале и середине 80-х годов привлекли своими графическими возможностями машины Macintosh и Amiga. В первой из них дисплей был монохромным, во второй - цветным, но обе отличались высокой разрешающей способностью и скоростью вывода графической информации на дисплей.

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

Пи - система

В начальный период развития персональных компьютеров была создана операционная система USCD p-system. Основу этой системы составляла так называемая П-машина - программа, эмулирующая гипотетическую универсальную вычислительную машину. П-машина имитирует работу процессора, памяти и внешних устройств, выполняя специальные команды, называемые П-кодом. Программные компоненты Пи-системы (в том числе компиляторы) составлены на П-коде, прикладные программы также компилируются в П-код. Таким образом, главной отличительной чертой системы являлась минимальная зависимость от особенностей аппаратуры ПЭВМ. Именно это обеспечило переносимость Пи-системы на различные типы машин. Компактность П-кода и удобно реализованный механизм подкачки позволял выполнять сравнительно большие программы на ПЭВМ, имеющих небольшую оперативную память.

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

Операционная система Multics

Итак, все началось в далеком 1965-м... Четыре года компания American Telegraph & Telephone Bell Labs совместно с фирмой General Electric и группой исследователей из Масачусесткого технологического института творила проект Os Multics (также именуемый MAC - не путать с МасOS). Целью проекта было создание многопользовательской интерактивной операционной системы, обеспечивающей большое число пользователей удобными и мощными средствами доступа к вычислительным ресурсам. Эта ОС основывалась на принципах многоуровневой защиты. Виртуальная память имела сегментно-страничную организацию, где с каждым сегментом связывался уровень доступа. Для того, чтобы какая-либо программа могла вызвать программу или обратиться к данным, располагающимся в некотором сегменте, требовалось, чтобы уровень выполнения этой программы был не ниже уровня доступа соответствующего сегмента. Также впервые в Multics была реализована полностью централизованная файловая система. То есть, даже если файлы находятся на разных физических устройствах, логически они как бы присутствуют на одном диске. В директории же указан не сам файл, а лишь линк на его физическое местонахождение. Если вдруг файла там не оказывается, умная система просит вставить соответствующий девайс. Помимо этого, в Multics наличествовал большой объем виртуальной памяти, что позволяло делать имэйджи файлов из внешней памяти в виртуальную. Увы, но все попытки наладить в системе относительно дружественный интерфейс провалились. Было вложено много денег, а результат был несколько иной, нежели хотелось ребятам из Bell Labs. Проект был закрыт. Кстати, участниками проекта значились Кен Томпсон и Денис Ритчи. Несмотря на то, что проект был закрыт, считается, что именно ОС Multics дала начало ОС Unix.