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] следующие отличительные особенности системы.
Некоторые из перечисленных особенностей были позаимствованы
другими ОС. Так, переназначение ввода-вывода и конвейеры реализуются командными
процессорами ОС семейства СР/М, начиная с 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 при помощи
собственного обработчика страничного отказа.