Введение

Операционная система совместного использования времени Multics ("MULTiplexed Information and Computing Service") — влиятельная ранняя операционная система совместного использования времени, основанная на концепции одноуровневой памяти. Нейтан Грегори пишет, что Multics «оказал влияние на все современные операционные системы с тех пор, от микрокомпьютеров до мейнфреймов». Первоначальное планирование и разработка Multics начались в 1964 году в Кембридже, штат Массачусетс. Первоначально это был совместный проект, возглавляемый MIT (Project MAC с Фернандо Корбато) совместно с General Electric и Bell Labs. Она была разработана на компьютере GE 645, который был специально для неё спроектирован; первый был поставлен в MIT в январе 1967 года. GE предлагала свои более ранние системы 635 с ранней системой совместного использования времени, известной как «Mark I», и планировала предложить 645 с Multics в качестве более крупного преемника. Bell Labs вышла из проекта в 1969 году, когда стало ясно, что создание рабочей системы в краткосрочной перспективе невозможно. Вскоре после этого GE решила полностью покинуть компьютерную индустрию и продала подразделение компании Honeywell в 1970 году. Honeywell предлагала Multics в коммерческих целях, но с ограниченным успехом. Multics обладает многочисленными функциями, предназначенными для обеспечения высокой доступности, чтобы поддерживать вычислительную инфраструктуру, аналогичную телефонной и электроэнергетической. Для достижения этого используются модульная аппаратная структура и программная архитектура. Система может масштабироваться, просто добавляя больше соответствующих ресурсов, будь то вычислительная мощность, оперативная память или дисковое пространство. Раздельные списки контроля доступа для каждого файла обеспечивают гибкий обмен информацией, но полную конфиденциальность при необходимости. Multics имеет ряд стандартных механизмов, позволяющих инженерам анализировать производительность системы, а также ряд механизмов адаптивной оптимизации производительности. Благодаря множеству новых и ценных идей Multics оказала значительное влияние на компьютерную науку, несмотря на свои недостатки. Наиболее заметным её влиянием на компьютерную индустрию стало вдохновение для создания Unix, которая унаследовала многие функции Multics, но могла работать на менее дорогостоящем оборудовании. Unix была разработана в Bell Labs, чтобы позволить команде Multics продолжить свои исследования, используя более компактные машины, сначала PDP 7, а затем PDP 11.

Новые идеи

Multics реализует единый уровень хранения для доступа к данным, упраздняя четкое различие между файлами (называемыми сегментами в Multics) и памятью процесса. Память процесса состоит исключительно из сегментов, отображенных в его адресное пространство. Для чтения или записи в них процесс использует обычные инструкции центрального процессора (CPU), а операционная система обеспечивает сохранение всех изменений на диске. В терминологии POSIX это эквивалентно отображению каждого файла в память (mmap); однако в Multics отсутствует понятие памяти процесса, отделенной от памяти, используемой для хранения отображенных файлов, как это реализовано в Unix. Вся память в системе является частью некоторого сегмента, который представлен в файловой системе; это включает временную память процесса, его стек ядра и т.д. Сегменты ограничены 256 килословами, что составляет чуть более 1 МБ, поскольку аппаратное обеспечение Multics использовало 18-битные адреса слов для содержимого сегмента. Более крупные файлы являются "многосегментными файлами" и обрабатываются иначе. На практике ограничение в 256 кВт редко встречалось, поскольку в то время один мегабайт памяти был непомерно дорог. Еще одной важной инновацией Multics стала динамическая связь, позволяющая работающему процессу предоставлять доступ к внешним подпрограммам путем добавления содержащих их сегментов в свое адресное пространство. Это позволяет приложениям всегда использовать последнюю версию любой внешней подпрограммы, поскольку эти подпрограммы хранятся в других сегментах, которые динамически связываются только при первой попытке процесса выполнить код в них. Поскольку различные процессы могут использовать разные правила поиска, разные пользователи могут использовать разные версии внешних подпрограмм. Не менее важно, что при соответствующих настройках в средствах безопасности Multics код в другом сегменте может получить доступ к структурам данных, поддерживаемым в другом процессе. Динамическая связь в Multics не требует специальных динамических библиотек (DLL); программа может динамически связываться с любым исполняемым сегментом, к которому у нее есть права доступа. Таким образом, для взаимодействия с приложением, работающим частично как демон (в другом процессе), процесс пользователя просто выполняет обычную инструкцию вызова процедуры в сегмент кода, с которым он был динамически связан (сегмент кода, реализующий некоторую операцию, связанную с демоном). Код в этом сегменте может затем изменять данные, поддерживаемые и используемые демоном. После завершения действия, необходимого для начала запроса, простая инструкция возврата из процедуры возвращает управление процессу пользователя коду пользователя. Multics также поддерживает чрезвычайно агрессивную онлайн-реконфигурацию: центральные процессоры, банки памяти, дисковые накопители и т.д. могут быть добавлены и удалены во время работы системы. В системе MIT, где велась большая часть ранней разработки программного обеспечения, обычной практикой было разделение мультипроцессорной системы на две отдельные системы в нерабочее время путем постепенного удаления достаточного количества компонентов для создания второй рабочей системы, оставляя остальные работающими для исходных пользователей. Тестирование системного программного обеспечения можно было проводить на второй системе, а затем компоненты второй системы добавлялись обратно в основную пользовательскую систему, не отключая ее. Multics поддерживает несколько процессоров; это одна из первых мультипроцессорных систем. Multics — первая крупная операционная система, разработанная с учетом требований безопасности с самого начала. Несмотря на это, ранние версии Multics неоднократно подвергались взлому. Это привело к дальнейшей работе, которая повысила безопасность системы и предвосхитила современные методы разработки безопасных систем. Взломы стали очень редкими после внедрения аппаратной базы второго поколения, которая имеет аппаратную поддержку кольцевой безопасности — многоуровневое усовершенствование концепции мастер-режима. В 1973 году группа экспертов ВВС США провела тестирование безопасности Multics под кодовым словом ZARF. 28 мая 1997 года Агентство национальной безопасности США рассекретило использование кодового слова ZARF. Multics — первая операционная система, предоставляющая иерархическую файловую систему, в которой имена файлов могут иметь практически произвольную длину и синтаксис. Один и тот же файл или каталог может иметь несколько имен (обычно длинное и короткое), а также поддерживаются символические ссылки между каталогами. Multics впервые использует стандартную концепцию стеков для каждого процесса в ядре, с отдельным стеком для каждого уровня безопасности. Она также первой реализовала командный процессор, реализованный как обычный пользовательский код — идею, позже использованную в оболочке Unix. Она также одна из первых, написанных на языке высокого уровня (Multics PL/I), после системы Burroughs MCP, написанной на ESPOL, расширенной версии ALGOL. Внедрение Multics в защищенные вычислительные среды также стимулировало разработку инновационных вспомогательных приложений. В 1975 году Морри Гассер из MITRE Corporation разработал генератор произносимых случайных слов для удовлетворения требований к паролям таких установок, как Центр обработки данных ВВС (AFDSC), обрабатывающий секретную информацию. Чтобы избежать угадываемых паролей, AFDSC решила назначать пароли, но пришла к выводу, что ручное назначение требует слишком больших административных затрат. Таким образом, был исследован и разработан на PL/I генератор случайных слов. Вместо того чтобы основываться на фонемах, система использовала фонетические сегменты (приближения второго порядка к английскому языку) и другие правила для повышения произносимости и случайности, которые статистически моделировались по сравнению с другими подходами. Потомок этого генератора был добавлен в Multics во время проекта Guardian.

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

В 1964 году Multics был разработан изначально для мэйнфрейма GE 645, 36-битной системы. Компьютерный бизнес GE, включая Multics, был приобретен компанией Honeywell в 1970 году; примерно в 1973 году поддержка Multics была реализована на машинах Honeywell 6180, которые включали улучшения безопасности, в том числе аппаратную поддержку защитных колец. Bell Labs вышла из проекта в 1969 году; некоторые из сотрудников, работавших над ним, впоследствии создали систему Unix. Разработка Multics продолжалась в MIT и General Electric. В 1975 году в MIT использование Multics сокращалось и к 1976 году не вернулось к прежним уровням. В конечном итоге, снизив цены, MIT удалось привлечь пользователей обратно к Multics в 1978 году. Honeywell продолжала разработку системы до 1985 года. Было установлено около 80 крупных объектов, стоимостью в несколько миллионов долларов, в университетах, в промышленности и государственных учреждениях. Во французской университетской системе в начале 1980-х годов было несколько установок. После прекращения поддержки Multics компанией Honeywell пользователи перешли на другие системы, такие как Unix. В 1985 году Multics получил сертификацию как защищенная операционная система уровня B2, используя критерии оценки надежных компьютерных систем Национального центра компьютерной безопасности (NCSC), подразделения АНБ – это была первая операционная система, оцененная на этом уровне. Multics распространялся с 1975 по 2000 год компанией Groupe Bull в Европе и компанией Bull HN Information Systems Inc. в Соединенных Штатах. В 2006 году Bull SAS опубликовала исходный код версий Multics MR10.2, MR11.0, MR12.0, MR12.1, MR12.2, MR12.3, MR12.4 и MR12.5 под лицензией свободного программного обеспечения. Последняя известная установка Multics, работающая на аппаратном обеспечении Honeywell, была выведена из эксплуатации 30 октября 2000 года в канадском Министерстве национальной обороны в Галифаксе, Новая Шотландия, Канада.

Текущий статус

В 2006 году компания Bull HN передала исходный код MR12.5, финальной версии Multics 1992 года, в MIT. Большая часть системы теперь доступна как свободное программное обеспечение, за исключением некоторых дополнительных компонентов, таких как TCP/IP. В 2014 году Multics был успешно запущен на современном оборудовании с помощью эмулятора, разработанного участниками сообщества Multics Гарри Ридом и Чарльзом Энтони. Версия 1.0 эмулятора стала доступна в 2017 году. Релиз 12.6f Multics поставляется вместе с версией 1.0 эмулятора и включает в себя несколько новых функций, в том числе историю и редактирование командной строки с использованием видеосистемы.

Команды

Ниже приведен список программ и команд для выполнения типичных вычислительных задач, поддерживаемых командной строкой Multics.

Активные функции

Язык оболочки Multics поддерживает "активные функции", которые похожи на команды, но возвращают строковое значение. Активная функция вызывается путем заключения имени активной функции и ее аргументов в квадратные скобки, а возвращаемая активной функцией строка подставляется в команду вместо вызова этой функции. Например, при обработке команды запускается активная функция; она возвращает полный путь к рабочему каталогу, который подставляется в команду, так что команда выводит рабочий каталог. Некоторые программы могут выступать в роли команд или активных функций; при запуске как команды ее результат выводится на экран, а при запуске как активной функции ее результат возвращается в виде строки. Одна из точек зрения утверждала: "В Multics они пытались создать гораздо более универсальную и гибкую операционную систему, но потерпели полный провал". Однако эта точка зрения, как сообщается, была опровергнута в компьютерном сообществе, поскольку многие технические инновации Multics используются в современных коммерческих вычислительных системах. Упоминается альтернативное происхождение названия: Питер Ньюман из Bell Labs, наблюдая за демонстрацией прототипа, предложил игру слов UNICS – произносится как "евнухи" – как "кастрированный Multics", хотя Деннис Ричи, как утверждается, отрицал это. Кен Томпсон в расшифровке интервью 2007 года с Питером Зайбелем описывает Multics как "переусложненную и перестроенную систему, во всем чрезмерную. Она была почти непригодной для использования. Они [Массачусетский технологический институт] до сих пор утверждают, что это огромный успех, но это явно не так". Говоря о влиянии Multics на Unix, Томпсон отметил, что "из Multics мне настолько понравились иерархическая файловая система и оболочка – отдельный процесс, который можно заменить другим процессом". Деннис Ричи писал, что на разработку UNIX оказал влияние CTSS.

Другие операционные системы

Операционная система Prime Computer, PRIMOS, была названа Уильямом Подуской, одним из основателей компании, "Multics в коробке". Позже Подуска основал компанию Apollo Computer, чьи операционные системы AEGIS и Domain/OS, иногда называемые "Multics в спичечной коробке", развивают концепцию Multics для сетевой графической рабочей станции. Операционная система Stratus VOS компании Stratus Computer (ныне Stratus Technologies) испытывает очень сильное влияние Multics, и как внешний пользовательский интерфейс, так и внутренняя структура имеют множество сходств с этим старым проектом. Высокая надежность, доступность и функции безопасности Multics были расширены в Stratus VOS для поддержки нового семейства отказоустойчивых компьютерных систем, обеспечивающих безопасную и надежную обработку транзакций. Stratus VOS является наиболее прямым потомком Multics, который до сих пор активно разрабатывается и используется в производстве. Система многоконсольного разделения времени (MCTS) компании General Motors для компьютера Control Data Corporation STAR 100 была разработана на основе Multics. Архитектура защиты Multics, ограничивающая доступ кода с одного уровня системы к ресурсам другого, была принята в качестве основы для функций безопасности операционной системы VME компании ICL. Эдинбургская система множественного доступа (EMAS) особенно опирается на концепцию одноуровневой памяти, используемую в Multics, обеспечивая доступ к файлам только путем их отображения в память. Все адресное пространство памяти связано с сегментом.

Технические детали

Jerome H. Saltzer, Introduction to Multics (MIT Project MAC, 1974) представляет собой значительно более подробное введение в систему, ориентированное на реальных пользователей. Elliott I. Organick, The Multics System: An Examination of Its Structure (MIT Press, 1972) является основополагающей работой по системе, хотя она описывает раннюю версию, и некоторые описанные в ней функции так и не были реализованы в финальной версии. В. А. Высоцкий, Ф. Дж. Корбато, Р. М. Грэм, Структура супервизора Multics (AFIPS 1965) описывает базовую внутреннюю структуру ядра Multics. Jerome H. Saltzer, Traffic Control in a Multiplexed Computer System (MIT Project MAC, июнь 1966 г.) представляет собой оригинальное описание идеи переключения стеков ядра; одна из классических работ в области компьютерных наук. R. C. Daley, P. G. Neumann, A General Purpose File System for Secondary Storage (AFIPS, 1965) описывает файловую систему, включая механизмы контроля доступа и резервного копирования. R. J. Feiertag, E. I. Organick, The Multics Input/Output System описывает нижние уровни реализации ввода/вывода. A. Bensoussan, C. T. Clingen, R. C. Daley, The Multics Virtual Memory: Concepts and Design (ACM SOSP, 1969) подробно описывает систему виртуальной памяти Multics. Paul Green, Multics Virtual Memory – Tutorial and Reflections представляет собой глубокое и всестороннее изучение системы хранения Multics. Roger R. Schell, Dynamic Reconfiguration in a Modular Computer System (MIT Project MAC, 1971) описывает механизмы динамической переконфигурации.

Безопасность

Пол А. Каргер, Роджер Р. Шелл, Multics Security Evaluation: Vulnerability Analysis (Air Force Electronic Systems Division, 1974) описывает классические атаки на безопасность Multics, проведенные "командой тигров". Джером Х. Солтцер, Майкл Д. Шредер, "Защита информации в компьютерных системах" (Proceedings of the IEEE, September 1975) описывает фундаментальные принципы, лежащие в основе первого этапа модернизации системы безопасности; еще одна классическая работа. М. Д. Шредер, Д. Д. Кларк, Дж. Х. Солтцер, Д. Х. Уэллс, "Финальный отчет о проекте разработки ядра Multics" (MIT LCS, 1978) описывает обновления безопасности, добавленные для создания еще более совершенной версии. Пол А. Каргер, Роджер Р. Шелл, "Тридцать лет спустя: уроки оценки безопасности Multics" (IBM, 2002) представляет собой интересную ретроспективу, сравнивающую реальную развернутую безопасность в современных враждебных условиях с тем, что было продемонстрировано возможным десятилетия назад. В ней делается вывод, что Multics обеспечивала значительно более высокий уровень безопасности, чем большинство коммерчески доступных систем в 2002 году.