- PVSM.RU - https://www.pvsm.ru -
Это перевод фрагмента из статьи, который, на мой взгляд, уместно вынести в отдельный пост. Основная статья: habrahabr.ru/post/193798/ [1]
Проект МАС (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) начался как чисто исследовательский в MIT в 1963 году. Потом он разросся в лабораторию компьютерных наук (LCS), а в наши дни назыается Лаборатория компьютерных наук и искусственного интеллекта
В начале 60-х был всплеск интереса к системам с разделением времени. Джон МакКарти написал заметку под заглавием “Программа для оператора с разделением времени для проекта IBM 709” в 1959 году. Корбато, Мервин-Даггет и Далей в 1962 году написали в статье, что “мы на пороге третьего глобального изменения к подходу использования компьюьтеров, из-за разделения времени”. Сначала это рассматривали как способ поднять эффективность использования компьютера, но очень быстро пришли к идее многопользовательской системы. Деннис Ритчи потом скажет, что самый медленный этап в цикле “написать-скомпилировать-выполнить-отладить” стал определяться человеком, а не машиной.

В рамках проекта МАС получился значительный вклад в системы с разделяемым временем, включая разработку операционной системы (тогда таких слов не было, но давайте так говорить для определенности — прим. перев.) CTSS (Compatible Time-Sharing System). Во второй половине 60-х было создано несколько других систем с разделением времени, например BBN, DTSS, JOSS, SDC, и пр. Но все это не имеет отношения к этой статье. А вот Multiplexed Information and Computing Service (MULTICS) — имеет.
Это совместная разработка MIT, Bell Telephone Laboratories (BTL) и General Electric (GE) по созданию ОС с разделением времени для компьютера GE-645.
В то время “использовать компьютер” значило практически исключительно “программировать”. То есть, необходимо было более эффективно выполнять упомянутый выше цикл «написать-отладить».
Multics должен был стать прикладным ПО, которое может поддерживать до 1000 пользователей одновременно. Еще из ТЗ (цитируется по “Введению и обзору в систему Multics”, Корбато, Высоцкий, 1965):
BTL отошел от этого проекта в начале 1969 года. Multics развивался как коммерческий продукт даже после череды перепродаж. Honeywell выкупил компьютерный бизнес GE, а Bull выкупил Honeywell. В целом, проект удался и заметно повлиял на многие последующие. Последний компьютер под управлением Multics выключили 31 октября 2000 года.
Хотя BTL вышел из проекта, некоторые его сотрудники захотели продолжить самостоятельно. Например, Кен Томпсон, Деннис Ритчи, Стью Фельдман, Дуг МакИлрой, Боб Моррис, Джо Оссанна. Томпсон работал над игрой Space Travel на GE-635. Ее написали сначала для Multics, а потом переписали на Фортране под GECOS на GE-635. Игра моделировала тела Солнечной системы, а игроку надо было посадить корабль куда-нибудь на планету или спутник. Ни софт, ни железо этого компьютера не годились для такой игры. Томпсон искал альтернативу, и переписал игру под бесхозный PDP-7. Память была объемом 8К 18-битных слов, и еще был процессор векторного дисплея для вывода красивой для того времени графики. Томпсон с помощью Ритчи переписал игру для PDP-7 на ассемблере. В процессе работы также получился софтверный блок работы с плавающей запятой. Игра работала на голом железе, без ОС.
Томпсон и Ритчи полностью вели разработку на кросс-ассемблере на GE и переносили код на перфолентах. Томпсону это активно не нравилось, и он начал писать ОС для PDP-7, начиная с файловой системы. Система стала собираться на самой себе в конце 1969 года. Уже было ядро, редактор, ассемблер, простенький шелл и файловые утилиты типа cat, cp, rm. Это был UNICS, название — тонкий троллинг Multics. Потом оно мутировало в UNIX. Это можно считать нулевым изданием.
Первая версия команды cpобрабатывала аргументы попарно:
# cp file11 file12 file21 file22 ...
Команда dsw (delete using switches) позволяла интерактивно удалять файлы.
Влияние Multics и еще более ранней системы CTSS на современные юниксоподобные системы:
ls, pwd, chdir (cwd в Multics), mail, man (help в Multics).rc. В CTSS была программа RUNCOM.roff, команда для рендеринга текста. В CTSS и Multics документация готовилась командой RUNOFFРитчи писал в одной из статей по истории: “В целом, UNIX — очень консервативная система. Только небольшая часть реализованных в ней идей действительно новая. Но для наследия CTSS даже это неплохо. ”
У PDP-7 UNIX была файловая система с inodes, но они содержали очень мало информации — список физических блоков и минимальные метаданные: размер, время создания и тип файла. Специальные файлы и каталоги поддерживались, но не было путей к файлам. Зато была буферизация. Еще из существенных ограничений:
PDP-7 UNIX также положил начало высокоуровневому языку B, который создавался под влиянием языка BCPL. Деннис Ритчи сказал, что В — это С без типов. BCPL помещался в 8 Кб памяти и был тщательно переработан Томпсоном. В постепенно вырос в С. Напомню, что ядро и программы PDP-7 UNIX были полностью написаны на ассемблере.
Пример ханойских башен на BCPL [2]
UNIX также работал на PDP-9. В 1969 году также запустили первый узел ARPANET и опубликовали первый RFC.
Группа разработчиков UNIX уболтала BTL купить более продвинутый компьютер, PDP-11/20 с 24 Кб памяти. Они пообещали написать систему правки и редактирования документации для запуска без ОС, а UNIX использовать только для разработки. UNIX на новом компьютере запустили в начале 1971 года. 12 Кб памяти было занято ядром, еще немного — программами, а все остально ушло под рамдрайв.
Первое издание работало на PDP-11/20 без MMU и аппаратной защиты памяти. Так что стабильность работы и устойчивость к сбоям была не на высоте. Мультипрограммности тоже не было, но пути к файлам уже появились. Была документация к таким системным вызовам: break, cemt, chdir, chmod, chown, close, creat, exec, exit, fork, fstat, getuid, gtty, ilgins, intr, link, mkdir, mount, open, quit, read, rele, seek, setuid, smdate, stat, stime, stty, tell, time, umount, unlink, wait, write.
Из языков программирования поддерживались ассемблер, B, BASIC, FORTRAN. С еще не было.
Файлы среды разработки на В и ассемблере:
/bin/as ассемблер. Файл вывода по умолчанию называется a.out
/bin/ld редактор ссылок (по контексту скорее линковщик, но из оригинала такой перевод получить очень затруднительно — прим. перев.). В одной директории может одновременно работать только один пользователь из-за конфликта временных файлов
/bin/nm выводит таблицу символов из результата работы ассемблера или загрузчика
/bin/strip удаляет лишние символы из бинарников
/bin/un выводит список не определенных в программе символов
/etc/as2 второй проход ассемблера
/etc/ba ассемблер B (prog.i —> prog.s)
/etc/bc компилятор B (prog.b —> prog.i)
/etc/bilib библиотека интерпретатора В
/etc/brt1, /etc/brt2 рантайм В
/etc/liba.a ассемблерные подпрограммы
/etc/libb.a библиотека подпрограмм для В
/usr/b/rc шелл-скрипт для компиляции программы на В в бинарник. Работает по цепочке program.b —> program.i —> program.s —> a.out
В первом издании нигде не упомянут копирайт. Документация представляла собой внушительный семитомник: cm.bell-labs.com/cm/cs/who/dmr/1stEdman.html [3]. Краткое содержание:
В следующих изданиях появился восьмой том, посвященный обслуживанию системы.
Каждая логическая страница мануала называлась man page и содержала заглавие, краткое описание, текст, список затрагиваемых файлов, ссылки, диагностику, баги и автора. Документацию готовили в редакторе ed и форматировали программой roff. Самая первая страница была посвящена команде cat.
Во втором издании добавили компилятор С, сс. Он был написан на другом языке. Появились новые команды и системные вызовы: :(1), cc, echo(1), exit(1), goto(1), if(1), login(1), m6(1), man(1), mt(1), opr(1), stty(1), tmg(1), tss(1), kill(2), sleep(2), sync(2), atan(3), hypot(3), nlist(3), qsort(3), salloc(3), and sqrt(3).
:(1) Ничего не делает. Изначально это была метка для goto, нужно было научить шелл игнорировать такие строки
cc(1) компилятор С
m6(1) макропроцессор общего назначения
opr(1) отправляет задание на печать
tmg(1) компилятор компиляторов. TMG — это язык для написания компиляторов.
tss(1) интерфейс для удаленного доступа к ОС Honeywell TSS.
salloc(3) библиотека для работы со строками произвольной длины
Во втором издании все также не было ни мультипрограммности, ни защиты памяти, зато появился копирайт
Эта версия заработала на PDP-11/45 с защитой памяти и поддержкой большого ее объема — до 256 Кб.
Из новых фич следует обратить внимание на конвейеры и мультипрограммность. Кроме того:
cdb(1) дебаггер С
crypt(3) процедура шифрования паролей
proof(1) прото-diff
ps(8) список процессов
sno(1) компилятор и интерпретатор SNOBOL III
speak(1) Синтезатор речи. На вход получает поток слов, выдает их произношение
typo(1) цитата из мануала: "… ищет в документе редкие слова, опечатки и hapax legomena [4] и печатает их в стандартный вывод")
yacc(6) компилятор компиляторов
Это фактически третье издание, переписанное на С. Также поддерживаются новые модели PDP-11 — /60 и /70. Из-за разработки на языке более высокого уровня объем системы вырос на треть. Были небольшие обновления команд, язык В исключен из поставки.
Что еще есть на эту тему на Хабре
habrahabr.ru/post/114588/ [5]
habrahabr.ru/post/126369/ [6]
habrahabr.ru/post/147774/ [7] — очень хорошо написано. Текст местами повторяется, потому что обе статьи опираются на один и тот же первоисточник
habrahabr.ru/post/46432/ [8]
Автор: BubaVV
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/unix-2/43613
Ссылки в тексте:
[1] habrahabr.ru/post/193798/: http://habrahabr.ru/post/193798/
[2] Пример ханойских башен на BCPL: http://www.kernelthread.com/projects/hanoi/html/bpl.html
[3] cm.bell-labs.com/cm/cs/who/dmr/1stEdman.html: http://cm.bell-labs.com/cm/cs/who/dmr/1stEdman.html
[4] hapax legomena: http://ru.wikipedia.org/wiki/%D0%93%D0%B0%D0%BF%D0%B0%D0%BA%D1%81
[5] habrahabr.ru/post/114588/: http://habrahabr.ru/post/114588/
[6] habrahabr.ru/post/126369/: http://habrahabr.ru/post/126369/
[7] habrahabr.ru/post/147774/: http://habrahabr.ru/post/147774/
[8] habrahabr.ru/post/46432/: http://habrahabr.ru/post/46432/
[9] Источник: http://habrahabr.ru/post/194160/
Нажмите здесь для печати.