Начало цифровой эпохи60-е годы можно назвать для СССР началом цифровой эпохи — для появившихся отечественных машин М-20, М-220, М-222, БЭСМ-4 и БЭСМ-6 требовалась, как сейчас говорят, программная платформа из системного и прикладного ПО. Например, для первых алгоритмических языков Алгол и Фортран необходимо было срочно создать трансляторы [1], способные работать под ОС появляющихся ЭВМ.

Библиотека стандартных программ, ИС-2

Первой в ИПМ после машины «Стрела» появилась ЭВМ М-20, одна из самых мощных в 1959 году серийно выпускаемых машин в мире [2]. Система представления чисел — двоичная с плавающей запятой, 45 разрядов на коды чисел; оперативная память — 4096 45-разрядных слов; производительность — 20 тыс. операций в секунду. Вспоминает П. П. Головистиков, один из разработчиков М-20: «Начали работать над машиной трое: Сергей Алексеевич Лебедев, Михаил Романович Шура-Бура и я. Лебедев разрабатывал идеологию машины и ее структуру, Шура-Бура — систему команд и занимался проработкой математических вопросов, я перерабатывал их решения и требования в конкретные схемы». В результате был принят ряд новаторских на тот момент (1958 год) решений: система команд — трехадресная; допустимо совмещение выполнения арифметической операции с выборкой из оперативной памяти следующей команды; допустимо совмещение операций процессора с операциями ввода-вывода данных.

Весь 1958 год М-20 налаживалась в СКБ-245, куда были командированы инженеры ИПМ для отладки узлов машины. Для приемки машины были написаны две тестовые программы. Кроме того, для ЭВМ «Стрела», работавшей в то время в ИПМ, был создан эмулятор МС («М-20 на Стреле»), позволяющий заранее отлаживать программы для М-20. Однако основная работа по программному обеспечению для М-20 началась с создания библиотеки стандартных программ (СП). Начиная с августа 1958 года, еще до установки машины, группе выпускников механико-математического факультета МГУ было поручено создать библиотеку стандартных программ: ввод-вывод на внешние устройства, переводы чисел из двоичной в десятичную систему счисления и обратно, тригонометрические функции, логарифм, операции с матрицами и др. Кроме того, нужно было разработать интерпретирующую систему, которая бы заведовала этой библиотекой, — в результате была создана интерпретирующая система ИС-1.

Шура-Бура тщательно следил за экономией памяти и тактов работы М-20, поскольку библиотечная система навсегда отнимала у счетных задач ее часть и поэтому обязана была работать быстро. Вскоре стало ясно, что ИС-1 тратит лишние такты и занимает много памяти, поэтому, отказавшись от излишнего универсализма и виртуозно используя систему команд М-20, Шура-Бура за одно воскресенье написал новую интерпретирующую систему ИС-2. Организация СП была сохранена в том же виде, что и в ИС-1, но получилась более понятной и удобной. Например, часто используемые куски прикладных расчетных программ можно было оформить как стандартные программы и обращаться к ним через ИС-2.

Система сразу получила широкое признание и фактически стала предвестником будущих ОС, выполняя динамическое связывание, подкачку и смену используемых подпрограмм, причем все это делалось с мизерными накладными расходами и весьма скромными запросами на память. Высокая эффективность ИС-2 и продуманный интерфейс с основной программой сделали ее неотъемлемой частью комплекта поставки M-20.

Несколько слов стоит сказать о программе ПАПА (Программа Автоматического Присвоения Адресов) для М-20 (разработчик В. В. Мартынюк). В процессе программирования и отладки в кодах машины возникала необходимость переставить, заменить, вставить или выбросить отдельные группы команд или заимствовать некоторые куски из уже имеющихся. Такие действия, выполняемые вручную, очень трудоемки — требуют систематической коррекции большого числа адресов. ПАПА освобождала программиста от этой механической работы — она формировала программу с нужного адреса и выдавала ее на перфокарты для последующего ввода и счета.

Когда в конце 1958 года первый экземпляр М-20 привезли в ИПМ, она уже была освоена как инженерами, так и программистами, а для математиков начались семинары по системе команд и ИС-2. Надо сказать, что М. В. Келдыш следил за изучением, как бы сейчас сказали, основ информатики всеми сотрудниками института, издав, например, в апреле 1961 года приказ о сдаче техминимума.

Программа техминимума для М-20

В 1965 году в ИПМ появилась полупроводниковая машина БЭСМ-4 [3], совместимая с М-20, но имевшая больше памяти, и для нее Шура-Бура и его сотрудники модернизировали систему ИС-2 (новое название — ИС-22) и библиотеку стандартных программ.

Алгол-60, ТА-2

Вскоре после установки М-20 поступили сообщения о новом языке Алгол-58, толчком к разработке которого стало появление в 1957 году языка Фортран. В США к нему отнеслись прохладно, а в Европе приняли с энтузиазмом. Разумеется, Алгол в конце концов пробился и к американским компьютерам, но так и не одолел Фортран, стартовавший первым и уже завоевавший рынок. Американцы настаивали на языке, который был бы близок к уже используемым ими на своих компьютерах, а европейцев интересовали не столько компьютеры, сколько мощь языка при решении сложных математических задач.

Как только появилось сообщение об Алголе, три коллектива отечественных программистов взялись за создание трансляторов для машины М-20: группа из ОКБ-1 трудилась над транслятором ТА-1 под руководством С. С. Лаврова, группа из ИПМ создавала транслятор ТА-2 (М. Р. Шура-Бура и Э. З. Любимский), группа из СО АН (А. П. Ершов) работала над транслятором Альфа [4]. Разработчики ТА-2 взяли за основу полный вариант языка Алгол-60. Авторы ТА-1 и Альфа-транслятора отказались от рекурсивных процедур и некоторых других трудно реализуемых элементов языка. Главные задачи этих групп — скорость трансляции (ТА-1) и эффективность получаемого кода (Альфа-транслятор).

ТА-2 создавался сотрудниками отдела программирования ИПМ, и особых трудностей работа не вызывала за исключением программирования блока процедур — наиболее сложной части транслятора. Реализация рекурсивности и учет всех типов параметров, определенных в описании Алгола-60, требовали от программистов высокой квалификации и изобретательности. К весне 1963 года транслятор был готов к эксплуатации, и в июне все разработчики ТА-2 отправились в Киев на Международную конференцию социалистических стран — «Методы автоматического программирования и машинные языки» c докладами и с транслятором на магнитных лентах. Разработчики Альфа-транслятора привезли с собой тест «Man or Boy», написанный Дональдом Кнутом, тогда еще малоизвестным программистом. Тест, как вспоминал Дмитрий Корягин, «проверял потенцию рекурсивности, обеспечиваемую транслятором». Если транслятор допускал более чем 10-уровневую рекурсивность, то он получал оценку «Man», в противном случае — «Boy». ТА-2 с этим тестом справился, доказав свою мужественность. Однако для реализации рекурсии требовался большой объем памяти, а возможности М-20 были весьма скромными (около 20 Кбайт), поэтому программным путем было реализовано поле «математической памяти» (виртуальной памяти) со сплошной адресацией, включающей как оперативную, так и внешнюю память, правда, за это нужно было платить увеличением времени доступа к данным. Для того времени это было очень важное решение — автор программы на Алголе мог не знать емкостей отдельных блоков внешней памяти и соотношения их скоростей, а его программа все равно работала правильно.

На той же конференции 1963 года был сделан доклад «Алгоритм организации информации в машинах с большой памятью», в котором на семь лет раньше, чем на Западе, была предложена концепция В-дерева. Однако труды конференции не были опубликованы, и, возможно, поэтому в книге «Искусство программирования» Кнут написал, что В-дерево появилось в 1970 году, а об авторстве советских программистов упоминаний не было.

КЭВМ

Параллельно с работами по Алголу началось движение за создание ассоциации пользователей ЭВМ М-20 — на учредительном собрании членов ассоциации весной 1961 года Шура-Бура был избран председателем совета ассоциации, а в июле ассоциация решением Президиума АН СССР получила статус юридического лица и официальное название «Комиссия по эксплуатации вычислительных машин М-20» (КЭВМ).

Заседание Комиссии по эксплуатации вычислительных машин под председательством М. Р. Шура-Бура, Колонный зал Дома союзов
Заседание Комиссии по эксплуатации вычислительных машин под председательством М. Р. Шура-Бура, Колонный зал Дома союзов

 

В поставляемые вместе с машиной библиотеки и трансляторы ИС-2, ТА-1 и ТА-2 со временем вносились исправления, а с появлением новых ЭВМ, совместимых с М-20 (М-220, М-220М, М-222) потребовалась модификация библиотек, ИС-22 и трансляторов (ТА-1М, ТА-2М, транслятор с Автокода на БЭСМ-4 и М-220 — авторы Ю. М. Баяковский и Т. Н. Михайлова). Совершенствовалась и операционная система ОС 4/220 для БЭСМ-4 и М-220. Новинки и исправления распространялись на лентах и перфокартах через координирующую группу КЭВМ, члены которой организовывали консультации, семинары и помогали в установке трансляторов. В 1969 году было выполнено сравнительное тестирование ТА-1М, ТА-2М и Альфа, позволившее КЭВМ сформулировать рекомендации при выборе транслятора для конкретной машины.

КЭВМ привлекла к своей деятельности широкую компьютерную общественность и в течение многих лет была инициатором и организатором различных программистских и инженерных форумов. В 1971 году в КЭВМ входило около 250 отечественных организаций.

АЛМО

Конец 50-х — начало 60-х годов ознаменовались не только активным созданием трансляторов — начался лавинообразный процесс языкотворчества. И среди системных программистов, создававших трансляторы в машинных кодах, возникла идея специализированных языков для создания трансляторов и других больших систем. Такой язык должен быть машинно ориентированным и одновременно языком-посредником. Для того чтобы создать трансляторы с M языков на N машин нужно написать M*N трансляторов, а с использованием языка-посредника достаточно M трансляторов с исходного языка на язык-посредник и N трансляторов с языка-посредника на N машин. Первой такой попыткой был язык UNCOL [5], разработанный Мэлвином Конвеем в 1958 году, а у нас были созданы языки АЛМО (ИПМ), Эпсилон и Сигма (СО АН СССР).

АЛМО (АЛгоритмический Машинно Ориентированный) — это язык и абстрактная вычислительная машина со своей памятью нескольких видов и набором операций, близких к системам команд физической ЭВМ. Все вместе это позволяет выполнять программу, написанную на языке АЛМО, почти так же эффективно, как и программу, написанную специально для конкретной машины. Организация системы программирования на базе АЛМО предполагает следующую схему работы: для каждой машины должен быть создан компилятор с языка АЛМО на язык этой машины; транслятор с каждого проблемно-ориентированного языка, например Алгола, пишется на АЛМО, а затем он переводится с помощью компилятора в код конкретной машины; программа, написанная на проблемно-ориентированном языке, переводится на АЛМО транслятором, работающим в коде машины, а затем компилятором в код машины, где и исполняется.

Первым был создан компилятор АЛМО-БЭСМ-4, затем транслятор Комплекс Алгол, транслятор Фортран-АЛМО, а затем начал создаваться транслятор Алгамс-АЛМО. Комплекс Алгол — это транслятор с Алгола и средства отладки, позволяющие получить информацию о месте аварийного останова в терминах языка и предпринять некоторые действия (например, сделать необходимые выдачи). Алгамс-АЛМО — транслятор с языка Алгамс, дополненного рекурсивными процедурами. Алгамс был разработан в 1963–1966 годах Группой по автоматизации программирования для машин среднего типа (ГАМС), созданной комиссией многостороннего сотрудничества Академий наук социалистических стран. В основу Алгамса был положен язык Алгол с ограничениями, облегчающими процесс трансляции. Фортран-АЛМО — транслятор с языка Фортран IV. Несколько позже началась работа по созданию транслятора Форшаг-АЛМО, который наряду с выполнением функций, присущих обычным трансляторам, позволял вести пошаговую, пооператорную трансляцию программы на Фортран IV в диалоговом режиме.

Компилятор АЛМО-БЭСМ-4 заработал в 1968 году, а АЛМО-БЭСМ-6 был готов к 1970 году. Компиляторы АЛМО появлялись и на других машинах — например, на машине СПЭМ, созданной в Военно-космической Академии (ВИКИ) им. А. Ф. Можайского в Ленинграде.

АЛМО использовался в разных организациях не только как промежуточный язык, но и как язык программирования для создания систем программ. К ним прежде всего относятся программы решения задач логического и информационного характера. АЛМО, хотя и не создавался специально для решения таких задач, тем не менее подкупал своей эффективностью и возможностями.

Система программирования на базе языка АЛМО получила название Универсальной. В среднем времена счета, полученные по готовым программам различных задач, для трансляторов Универсальной системы были не хуже, чем для трансляторов, написанных вручную. Более того, для трансляторов Фортран-АЛМО и Форшаг времена счета были даже лучше, чем для транслятора Фортран-Дубна. В трансляторы Универсальной системы не включались алгоритмы оптимизации циклов, вследствие чего в готовой программе не используется эффективная команда окончания цикла. Это значит, что использование АЛМО в качестве языка для написания транслятора и двойная трансляция не приводили к замедлению работы.

Следует отметить, что система программирования на базе языка АЛМО — явление уникальное в мировой программной инженерии, ведь язык UNCOL так и остался теоретическим языком и система трансляторов на его основе не появилась. Создание машинно ориентированного языка и действующей системы трансляторов на его основе, несомненно, было значительным достижением.

ОС ИПМ

Первый серийный экземпляр БЭСМ-6 появился в ИПМ во второй половине 1966 года и был установлен в зале, где раньше стояла «Стрела». Вместе с машиной была поставлена первая для БЭСМ-6 ОС Диспетчер-68 (Д-68), а позднее появились Мониторная система ДУБНА, ОС ДИСПАК и ОС ИПМ.

Для БЭСМ-6 в ИПМ сразу был разработан язык Автокод с транслятором БЕМШ (по первым буквам фамилий авторов: Бочкова З. Ф., Езерова Г. Н., Михелев В. М., Штаркман В. С.). Автокод — язык символьного кодирования, рассчитанный на специалистов, знакомых со структурой и системой команд машины. В Автокоде введены мнемонические обозначения команд, символическая адресация объектов программы. Предусмотрены различные способы задания данных и констант, распределения памяти. Поддерживалась перемещаемость оттранслированных программ, запись их в архив автокодных программ (АРАП), возможность связи на уровне меток нескольких независимо транслированных кусков в одну программу с помощью редактора внешних связей (РВС) и загрузчика. Сначала БЕМШ был подключен к Д-68, а впоследствии входил в состав математического обеспечения ОС ИПМ, ОС ДИСПАК и Мониторной системы ДУБНА. Однако Автокод оставался машинно-ориентированным языком, обеспечивающим перевод «один в один» предложения, составленного в символах, в машинную команду, поэтому очень скоро был создан язык описания макрокоманд более высокого уровня.

В 1967 году был опубликован «Проект системы математического обеспечения БЭСМ-6» (технические условия), включавший Универсальную систему программирования и операционную систему ОС ИПМ. При разработке ОС ИПМ широко использовались принятые в обществе механизмы взаимодействия: все задачи рассматривались как члены коллектива, которые могут вступать друг с другом в различные отношения — от совершенной изоляции до полного разделения всех ресурсов. Каждый ресурс (память, файл, устройство) имел своего хозяина, который мог его отдавать или сдавать в аренду любой другой задаче, оговаривая соответствующие права использования. Обмен сообщениями между задачами обладал всеми особенностями почтовых отправлений, включая уведомление о вручении. Каждая задача могла открывать до восьми процессов, для управления которыми использовался аппарат событий, а также прямые команды открытия, закрытия, прерывания и пуска. Одни задачи могли вызывать другие, выстраивая таким образом деревья подчинения произвольной глубины. При вызове подчиненной задачи можно было определить режим управления, при котором главной задаче в любой момент были доступны любые ресурсы подчиненной.

Отладка ОС ИПМ шла трудно — в институте была лишь одна машина БЭСМ-6, на ней считались прикладные задачи математических отделов, сотрудники которых полагали, что если есть уже какая-то операционная система, то ее достаточно, однако Келдыш был другого мнения. Профессор А. К. Платонов вспоминает: «Мстислав Всеволодович вызвал меня и сказал: “Вы освободите БЭСМ-6, не мешайте Михаилу Романовичу делать ОС ИПМ”, а мы в то время готовились к пуску на Луну, соревнуясь с американцами. Я попытался что-то горячо возразить, но он тихо сказал: “Вы не спорьте, вы выполняйте!” — это были самые жесткие слова, какие я от него услышал».

Стабильная версия ОС ИПМ появилась в 1970 году и успешно эксплуатировалась все 70-е годы, разделяя время с ОС ДИСПАК, причем некоторые задачи могли считаться только на ОС ИПМ — например, задачи отдела А. А Самарского: в ОС ИПМ была реализована виртуальная память, чего в ДИСПАК в то время не было. В проекте ОС ИПМ впервые в мире были сформулированы подходы к разработке операционных систем, намного опередившие свое время, — многие современные ОС построены сегодня на принципах, впервые предложенных в проекте системы математического обеспечения БЭСМ-6.

РЕФАЛ

В. Ф. Турчин — создатель языка РЕФАЛ
В. Ф. Турчин — создатель языка РЕФАЛ

В конце 1964 года в ИПМ пришел Валентин Федорович Турчин, который в 33 года уже был известным физиком-теоретиком, соавтором известных сборников «Физики шутят» и «Физики продолжают шутить», а также автором комедии «Защита диссертации» по мотивам защиты диссертации «Качение бревна по наклонной плоскости с учетом сучковатости» на соискание ученой степени кандидата бревнологических наук в Научно-исследовательском институте бревен и сучков (НИИБС).

Турчин начал работу в ИПМ, выступив с докладом на тему «Метаалгоритмический язык для символьных преобразований», позже получивший название РЕФАЛ (АЛгоритмический язык РЕкурсивных Функций). Язык был воспринят тогда критически — зачем нужен еще один язык для символьных преобразований, когда уже есть, например, Лисп? Но Турчин считал, что РЕФАЛ больше подходит для таких символьных задач, как преобразование программ, алгебраические преобразования, доказательство теорем. Он организовал РЕФАЛ-семинар, куда привлек студентов МГУ, в 1968–1969 годах на БЭСМ-6 был запущен интерпретатор с языка, а затем и компилятор. Однако в 1972 году Турчин ушел из ИПМ, это случилось вскоре после того, как он написал «Письмо к вождям», которое подписали А. Д. Сахаров и Рой Медведев. Вскоре Турчин был вынужден уехать из страны, а подписанный к печати типографский набор его книги с описанием концепции метасистемного перехода «Феномен науки» был рассыпан. Вместе с тем, как и АЛМО и ОС ИПМ, язык РЕФАЛ намного опередил свое время и сегодня оказался весьма эффективным, например для символьной обработки [6].

***

Уже в 60-е годы в СССР были заложены основы современной информатики, а уровень ряда разработок был намого выше появившихся позднее западных аналогов. Как бы то ни было, в стране сформировалась научная школа программирования, выходцы которой продолжали активно работать в цифровую эпоху, создавая, например, такие высокопроизводительные параллельные системы, как современный суперкомпьютер К-100.

Литература

  1. Галина Езерова, Энгелина Луховицкая. Первый компилятор // Открытые системы.СУБД. — 2013. — № 7. — С. 52–53. URL: http://www.osp/ru/os/2013/07/13037356 (дата обращения 18.09.2014).
  2. Наталья Дубова. Очерки истории советской вычислительной техники // Открытые системы.СУБД. — 1999. — № 1. — С. 69–76. URL: http://www.osp.ru/os/1999/01/179659 (дата обращения 18.09.2014).
  3. Вера Карпова, Леонид Карпов. Первая БЭСМ: начало пути // Открытые системы.СУБД. — 2007. — № 10. — С. 74–79. URL: http://www.osp.ru/os/2007/10/4706915 (дата обращения 18.09.2014).
  4. Наталья Черемных, Ирина Крайнева. Альфа-язык и транслятор // Открытые системы.СУБД. — 2014. — № 6. — С. 39–41. URL: http://www.osp.ru/os/2014/06/13042317 (дата обращения 18.09.2014).
  5. Тед Льюис. О Java по Гамбургскому счету // Открытые системы.СУБД. — 1997. — № 6. — С. 18–22. URL: http://www.osp.ru/os/1997/06/179299 (дата обращения 18.09.2014).
  6. Александр Речинский, Виктор Горбунов, Леонид Эйсымонт. Суперкластер с глобально адресуемой памятью // Открытые системы.СУБД. — 2011. — № 7. — С. 21–25. URL:http://www.osp.ru/os/2011/07/13010476 (дата обращения 18.09.2014)

Галина Езерова (keldysh111@gmail.com), Энгелина Луховицкая (luhov@list.ru) — сотрудники ИПМ им. М. В. Келдыша РАН (Москва).