Multics
Multics (МФА [mʌltɪks], от англ. Multiplexed Information and Computing Service — «Мультиплексные информационные и вычислительные сервисы») — ранняя операционная система с разделением времени исполнения программ, основанная на концепции одноуровневой памяти.
Multics | |
---|---|
Разработчик | MIT, GE, Bell |
Первый выпуск | 1965[1] |
Последняя версия | MR 12.5 (1992) |
Поддерживаемые языки | английский |
Тип ядра | многоуровневое |
Лицензия | MIT License |
Состояние | историческое |
Репозиторий исходного кода | web.mit.edu/multics-hist… |
Следующая | UNIX |
Веб-сайт | Multics Internet Server |
Медиафайлы на Викискладе |
Разработка операционной системы 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 оказала очень большое влияние на компьютерную отрасль благодаря многим новаторским и ценным идеям, заложенным в неё. Хотя система и подвергалась многочисленным насмешкам со стороны критиков[2], она всё же показала, что заложенные в неё концепции имеют право на долгосрочную жизнь в мире операционных систем.
Система 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 в основном оптимизировали код по размеру, а не по эффективности использования центрального процессора, что было обосновано стремлением к экономии памяти в многопользовательской системе.
См. также
- Операционная система
- Разделение времени
- Лаборатории Белла
- BESYS — предшественник Multics разработанный в Bell Labs
- Unix — в его основе лежат наработки взятые у Multics, был более ориентирован на «однозадачность»
- Фернандо Корбато, лидер проекта Multics, пока в нём участвовал MIT
- Виктор Высоцкий, один из лидеров проекта BESYS, предшественника Multics
- Луи Пузен, представивший термин оболочка (shell) в командном языке системы Multics.
Примечания
Литература
- F. J. Corbato, V. A. Vyssotsky, Знакомство и описание системы Multics (англ.)
- F. J. Corbato, C. T. Clingen, J. H. Saltzer, Multics — Первые семь лет (англ.)
- F. J. Corbató, V. A. Vyssotsky, Introduction and Overview of the Multics System (AFIPS 1965) is a good introduction to the system.
- F. J. Corbató, C. T. Clingen, J. H. Saltzer, Multics – The First Seven Years (AFIPS, 1972) is an excellent review, written after a considerable period of use and improvement over the initial efforts.
- J. J. Donovan, S. Madnick, Operating Systems, is a fundamental read on operating systems.
- J. J. Donovan, Systems Programming, is a good introduction into systems programming and operating systems.
- Jerome H. Saltzer, Introduction to Multics (MIT Project MAC, 1974) is a considerably longer introduction to the system, geared towards actual users.
- Elliott I. Organick, The Multics System: An Examination of Its Structure (MIT Press, 1972) is the standard work on the system, although it documents an early version, and some features described therein never appeared in the actual system.
- V. A. Vyssotsky, F. J. Corbató, R. M. Graham, Structure of the Multics Supervisor (AFIPS 1965) describes the basic internal structure of the Multics kernel.
- Jerome H. Saltzer, Traffic Control in a Multiplexed Computer System (MIT Project MAC, June 1966) is the original description of the idea of switching kernel stacks; one of the classic papers of computer science.
- R. C. Daley, P. G. Neumann, A General Purpose File System for Secondary Storage (AFIPS, 1965) describes the file system, including the access control and backup mechanisms.
- R. J. Feiertag, E. I. Organick, The Multics Input/Output System. Describes the lower levels of the I/O implementation.
- A. Bensoussan, C. T. Clingen, R. C. Daley, The Multics Virtual Memory: Concepts and Design, (ACM SOSP, 1969) describes the Multics memory system in some detail.
- Paul Green, Multics Virtual Memory – Tutorial and Reflections Архивная копия от 5 марта 2001 на Wayback Machine is a good in-depth look at the Multics storage system.
- Roger R. Schell, Dynamic Reconfiguration in a Modular Computer System (MIT Project MAC, 1971) describes the reconfiguration mechanisms.
- Paul A. Karger, Roger R. Schell, Multics Security Evaluation: Vulnerability Analysis (Air Force Electronic Systems Division, 1974) describes the classic attacks on Multics security by a "tiger team".
- Jerome H. Saltzer, Michael D. Schroeder, The Protection of Information in Computer Systems (Proceedings of the IEEE, September 1975) describes the fundamentals behind the first round of security upgrades; another classic paper.
- M. D. Schroeder, D. D. Clark, J. H. Saltzer, D. H. Wells. Final Report of the Multics Kernel Design Project (MIT LCS, 1978) describes the security upgrades added to produce an even more improved version.
- Paul A. Karger, Roger R. Schell, Thirty Years Later: Lessons from the Multics Security Evaluation (IBM, 2002) is an interesting retrospective which compares actual deployed security in today's hostile environment with what was demonstrated to be possible decades ago. It concludes that Multics offered considerably stronger security than most systems commercially available in 2002.
Ссылки
- Сайт, всецело посвященный системе Multics
- Исходные коды Multics
- Документация по ОС Multics на сайте bitsavers.org (англ.)
- multicians.org is a comprehensive site with a lot of material
- Multics papers online
- Multics glossary
- Myths discusses numerous myths about Multics in some detail, including the myths that it failed, that it was big and slow, as well as a few understandable misapprehensions
- Multics security
- Unix and Multics
- Multics general info and FAQ Includes extensive overview of other software systems influenced by Multics
- Honeywell, Inc., MULTICS records, 1965–1982. Charles Babbage Institute, University of Minnesota. Multics development records include the second MULTICS System Programmers Manual; MULTICS Technical Bulletins that describe procedures, applications, and problems, especially concerning security; and returned "Request for Comments Forms" that include technical papers and thesis proposals.
- Official source code archive at MIT
- Архивировано 30 ноября 2001 года.
- Multics repository at Stratus Computer Архивная копия от 9 июля 2008 на Wayback Machine
- Multics at Universitaet Mainz
- Active project to emulate the Honeywell dps-8/m Multics CPU
- Various scanned Multics manuals
- Multicians.org and the History of Operating Systems, a critical review of Multicians.org, plus a capsule history of Multics.