Multics

Multics
Изображение логотипа
Разработчик Массачусетский технологический институт[2][3], General Electric[2][3] и Bell Labs[2][3][…]
Первый выпуск 1965[4]
Последняя версия
Поддерживаемые языки английский
Поддерживаемые платформы GE 645[вд] и Honeywell 6000 series[вд]
Лицензия лицензия MIT
Репозиторий исходного кода web.mit.edu/multics-hist…
Следующая UNIX
Веб-сайт multicians.org (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Multics (МФА: [mʌltɪks]; аббр. от англ. Multiplexed Information and Computing Service[5][⇨]) — ранняя операционная система с разделением времени исполнения программ, основанная на концепции одноуровневой памяти.

Разработка операционной системы Multics была начата в 1964 году и в её основу вошли труды, наработанные во время создания в Bell Labs операционной системы BESYS, руководителем проекта которой являлся Виктор Высотский. Изначально в проекте по разработке Multics были заняты Массачусетский технологический институт (MIT), а также компании General Electric (GE) и сама Bell Labs. Компания Bell Labs вышла из проекта в 1969 году, а в 1970 году компьютерный бизнес компании General Electric (вместе с Multics) отошёл к компании Honeywell, которая продала его Bull. Multics был задуман компанией General Electric как коммерческий продукт, и стал таковым уже под руководством компании Honeywell, хотя так никогда и не нашёл успеха на компьютерном рынке.

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

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

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

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

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

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

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

До появления больших баз данных и графических данных огромных объёмов данное ограничение по размеру файлов нарушалось крайне редко.

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

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

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

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

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

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

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

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

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

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

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

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

Компания Bell Labs вышла из проекта в 1969 году. Несколько человек, разрабатывавших систему Multics в этой компании, перешли к созданию системы UNIX. Позднее созданная система UNIX показала внешнее сходство с системой Multics, в том числе в названиях используемых команд. Однако философия дизайна UNIX была совершенно другой, ориентированной на создание системы как можно меньших размеров, и настолько простой, насколько это будет возможно, в чём и было её основное отличие от системы Multics.

Название «UNIX» (изначально «Unics») было образовано от «Multics». Буква U в названии UNIX означала «Uniplexed» («односложная») в противоположность слову «Multiplexed» («комплексная»), лежавшему в основе названия системы Multics, для того, чтобы подчеркнуть попытку создателей UNIX’а отойти от сложностей системы Multics для выработки более простого и работоспособного подхода.

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

Также в начале 1980-х годов во Франции в нескольких университетах были установлены компьютеры с системой Multics.

После того как компания Honeywell прекратила поддержку системы Multics, пользователи мигрировали на другие системы, в том числе и на системы UNIX.

Последняя машина с Multics была остановлена 31 октября 2000 года в канадском Министерстве обороны.

В 2007 году исходный код и документация Multics были переданы компанией BULL Массачусетскому технологическому институту и опубликованы на сайте MIT.

Текущее состояние

В 2006 году Bull HN выпустила исходный код для MR12.5, окончательного выпуска Multics 1992 года, в MIT[7]. Большая часть системы теперь доступна в виде свободного программного обеспечения, за исключением некоторых дополнительных частей, таких как TCP/IP[8].

В 2014 году Multics был успешно запущен на современном оборудовании с помощью эмулятора[9]. Версия эмулятора 1.0 доступна с 2017 года[10]. Выпуск 12.6f Multics сопровождается выпуском эмулятора 1.0 и добавляет несколько новых функций, включая усовершенствованную систему ввода-вывода, а также возможность редактирования видео вывода[11].

Последняя версия на текущий момент MR12.7 вышла 30 июля 2021 года и доступна в репозитории GitHub[12][13].

Поддерживаемые команды

Ниже приведен список программ и команд для базовых компьютерных задач, которые поддерживаются интерфейсом командной строки Multics[14][15][16].

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

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

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

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

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

См. также

Примечания

  1. https://github.com/dancrossnyc/multics/releases/tag/MR12.7
  2. 1 2 3 https://www.youtube.com/watch?v=de2Hsvxaf8M&t=23s
  3. 1 2 3 https://www.youtube.com/watch?v=QFK6RG47bww&t=5m46s
  4. https://www.multicians.org/
  5. «Мультиплексные информационные и вычислительные сервисы»
  6. Myths about Multics. Дата обращения: 7 октября 2006. Архивировано 1 февраля 2014 года.
  7. Van Vleck, Tom Open Source for Multics (англ.). Multicians.org. Дата обращения: 8 сентября 2022. Архивировано 10 февраля 2014 года.
  8. Anthony, Charles Re: [dps8m-developers] Multiprocessor and/or networked Multics (англ.). Sourceforge.net. Дата обращения: 8 сентября 2022. Архивировано 21 марта 2022 года.
  9. RingZero - Multics reborn (англ.). WikidotCom. Дата обращения: 8 сентября 2022. Архивировано 3 марта 2022 года.
  10. Multics Simulator (англ.). Дата обращения: 8 сентября 2022. Архивировано 23 августа 2022 года.
  11. Installing Multics (англ.). Дата обращения: 8 сентября 2022. Архивировано 23 августа 2022 года.
  12. Multics Release 12.7 (англ.). Дата обращения: 8 сентября 2022. Архивировано 5 мая 2022 года.
  13. MR12.7 (англ.). Дата обращения: 8 сентября 2022. Архивировано 8 сентября 2022 года.
  14. Honeywell Bull, Inc. Multics Commands and Active Functions (англ.) (PDF) (февраль 1985). Дата обращения: 7 сентября 2022. Архивировано из оригинала 6 июня 2022 года.
  15. Unix and Multics (англ.). Дата обращения: 7 сентября 2022. Архивировано 21 марта 2022 года.
  16. Multics Commands (англ.). Дата обращения: 7 сентября 2022. Архивировано 16 августа 2000 года.

Литература

Ссылки