Multics

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Multics
Логотип Multics
Разработчик

MIT, GE, Bell

Последняя версия

MR 12.5 — 1992

Тип ядра

многоуровневое

Лицензия

MIT License

Состояние

историческое

Веб-сайт

Multics Internet Server

Multics (англ. Multiplexed Information and Computing Service) — одна из первых операционных систем с разделением времени исполнения программ (англ. time-sharing operating system).

Описание[править | править вики-текст]

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

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

Система 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.

Дополнительные замечания[править | править вики-текст]

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

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

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

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

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

Дополнительный материал[править | править вики-текст]

Ссылки[править | править вики-текст]