Си и UNIX: немного истории
С. В. Мелихов
Операционная система UNIX была создана в конце шестидесятых годов, и отнюдь не на пустом месте: в течение всего этого десятилетия велись интенсивные разработки языков программирования и операционных систем. Ведь было время, когда программист при создании очередной программы должен был снова повторить уже сделанную работу, когда – страшно подумать – не было даже базовых средств ввода-вывода. Конечно, как и современные хакеры, тогдашние программисты выжимали из «железа» все, что было можно, но проходило немного времени, менялась машина – и даже очень нужные программы приходилось выбрасывать или переписывать заново.
Так вот, все шестидесятые годы лучшие умы создавали то, чем мы сейчас пользуемся. Именно тогда родились интерактивный режим и режим разделения времени, были изучены способы управления страничной памятью, механизмы защиты информации, планирование заданий, принципы построения файловых систем и т. д., появился ряд экспериментальных операционных систем, были разработаны языки программирования PL/I, APL, Симула, Алгол и Кобол. Поскольку у каждого языка находились свои приверженцы и свои критики, в компьютерном обществе разгорелись жаркие дискуссии, в холе которых, естественно, возникла идея создать нечто, свободное от недостатков и обладающее всеми мыслимыми достоинствами. Такую попытку в Англии предприняли Лондонский и Кембриджский университеты. Их проект назывался «Комбинированный язык программирования» (сокращенно CPL), и, разумеется, он не был доведен до конца. Однако кое-что создано было, и это кое-что называлось Basic CPL. Примерно тогда же в Америке фирмы Bell Laboratories, General Electric и Массачусетский технологический институт (MIT) создавали операционную систему Multics, но в некоторый момент Bell Laboratories отказалась от участия в проекте и даже ликвидировала машину, на которой производились работы.
Почему мы вспоминаем об этих, казалось бы, неудачных, разработках? Потому что во многом благодаря им родились язык программирования Си и операционная система UNIX.
После краха Multics в фирме Bell Laboratories осталась команда талантливых людей, про которых необходимо сказать следующее:
- они были полны идей и желания работать;
- начальство не интересовалось тематикой их работы;
- как следствие п.2, они не имели ни своей машины, ни финансирования – не правда ли, очень знакомая ситуация? Но мы не будем знать всей правды, если не вспомним, что
- им очень хотелось поиграть в "Звездный поход" (Star Track).
Эту игру, которую у нас в стране знает, наверное, каждый, кто имел дело с Не-Персональными-Компьютерами, написали Кэн Томпсон и Деннис Ритчи в системе разделения времени GECOS. Но то ли система плохо делила время, то ли этого самого времени не хватало, но играть было невозможно. Оглядевшись по сторонам, будущие создатели UNIX обнаружили компьютер PDP 7 фирмы DEC. Это была относительно дешевая машина с очень простой архитектурой и с видеотерминалом, ее богатейшее программное обеспечение состояло из ассемблера и загрузчика, а многопользовательскую работу она не поддерживала. Итак, в 1969 г. Томпсон и Ритчи начали писать для PDP 7 операционную систему, используя для разработки и отладки ту самую большую машину, которая плохо делила время, а для переноса информации – перфоленты. Сначала появился кросс-ассемблер (программа, позволяющая на одной машине транслировать программы, написанные на ассемблере другой), вслед за ним постепенно возникли ядро, файловая система и интерпретатор командного языка. И, наконец, родились два ключевых понятия: образ процесса и «развилка» (fork) – примитив образования нового процесса. С высоты наших сегодняшних знаний мы можем сказать, что они реализовали объектный подход, но непосредственных участников событий больше занимал тот факт, что PDP 7 смогла одновременно обслуживать двух пользователей.
В 1970 г. Брайан Керниган окрестил новорожденную операционную систему UNIX. Несмотря на младенческий возраст, ее тут же заставили работать: начальство решило использовать вычислительную технику для подготовки документов патентного отдела фирмы. Была куплена более мощная PDP 11/20 все той же фирмы DEC, для нее переписали UNIX, и процесс подготовки документов был успешно автоматизирован. Так патентный отдел Bell Laboratories стал первым пользователем UNIX.
Параллельно с разработкой операционной системы Кэн Томпсон занимался и языком программирования Би (В), который был прямым потомком Basic CPL (сокращенно BCPL) и, подобно ему, не имел типов данных и оперировал только машинными словами. Но в PDP 11 команды представлялись байтами, а ведь на языке Би был написан ассемблер системы UNIX! Так что в язык Би ввели типы данных, и новый язык назвали NB. Однако попытка переписать на NB систему не удалась, поскольку выполнение программ было недостаточно быстрым. После переработки и создания компилятора язык был назван Си (С), и, хотя в нем тогда еще не было структур и глобальных переменных, этот язык так понравился создателям, что новые утилиты они стали писать непосредственно на нем. Так появились на свет операционная система UNIX и язык Си. За прошедшие годы в них, конечно, было внесено много усовершенствований, но подробно рассказывать о них нет смысла, поскольку предмет нашего разговора в его нынешнем виде каждый может «пощупать своими руками».
Статя опубликована в журнале "Мир ПК" 1992 г. №10, стр. 42