Не знаю, для чего и для кого я пишу
эти заметки. Может быть, это – попытка
посмотреть на себя со стороны прожитых лет
и как-то оценить свои деяния. Какое-то количество деревьев
я посадил, двух сыновей вырастил (не один, конечно,
на то и семья). Немного поучаствовал в строительстве
дома (не своего), построил пару туалетов.
А останется ли после меня какой-то след в науке
кроме десятка быстро устаревающих книг?
Или это сродни кругам на воде
после брошенного камня?
Не знаю. Время рассудит.
1. Последние годы учебы в ГГУ. Стрела-1
В сентябре 2006 года исполнилось ровно 50 лет с того дня, когда я впервые не только увидел настоящую ЭВМ, но и начал на практике осваивать свою будущую профессию программиста. Произошло это в результате договоренности между сотрудниками Горьковского государственного университета (ГГУ) и Московского государственного университета (МГУ). Шесть студентов 5-го курса физико-математического факультета – Бебихов В.А., Бочкарева Т.Е., Виткина И.А., Кетков Ю.Л., Корнилова В.М. и Первин Ю.А., которые рискнули специализироваться по новой для ГГУ специальности "вычислительная математика", были направлены на годичную стажировку в Москву.
Этому предшествовали следующие события. Начиная с 1954 года по приглашению со стороны ведущих ученых Горьковского исследовательского физико-технического института (ГИФТИ), физико-математического и радиофизического факультетов ГГУ в наш город начали приезжать московские ученые, закладывавшие основы новой науки – кибернетики. Годом ранее не без помощи академических ретроградов, запретивших на государственном уровне развитие генетики в СССР, кибернетика в нашей стране была объявлена "буржуазной лженаукой".
Самым известным среди гостей был профессор Алексей Андреевич Ляпунов. Он работал на кафедре "вычислительной математики" на мехмате МГУ и по совместительству заведовал отделом программирования в Отделении Прикладной Математики (ОПМ) при Математическом институте АН СССР имени акад. В.А. Стеклова. А.А. Ляпунов был достаточно известным исследователем в области теории множеств. Начав в новой для себя роли работу на одной из первых отечественных ЭВМ "Стрела-1", Алексей Андреевич сумел предугадать влияние вычислительной техники (ВТ) на развитие различных научных направлений. Он активно отстаивал позиции гонимых наук, и ему удалось сплотить многих ученых – генетиков, физиологов, лингвистов, математиков. Под его руководством с 1955 года при кафедре " вычислительной математики" на мехмате МГУ работал научный семинар по смежным вопросам кибернетики и физиологии. Часть семинаров проходили на квартире А.А.Ляпунова, и сопровождались они непременным чаепитием с пирожками, что дополнительно привлекало молодых слушателей. В 1955 году в журнале "Природа" была опубликована первая статья А.А. Ляпунова об использовании вычислительных машин для перевода с одного языка на другой (в соавторстве с О.С. Кулагиной). Вскоре журнал "Вопросы философии" опубликовал его статью "Основные черты кибернетики" (в соавторстве с С.Л. Соболевым и А.И. Китовым).
Вместе с А.А. Ляпуновым к нам приезжали его коллеги из ОПМ, аспиранты и преподаватели МГУ. Среди них – С.В. Яблонский, заложивший основы многозначной логики, А.Г. Витушкин, занимавшийся исследованием сложности задачи табуляции функций, М.Л. Цетлин, разрабатывавший биопротез руки, О.С.Кулагина, трудившаяся над программами автоматического перевода с французского языка, и многие другие. А.А. Ляпунов познакомил нас с Игорем Андреевичем Полетаевым, автором первой отечественной книги по кибернетике "Сигнал", изданной с большим опозданием в 1958 году. Семинары, которые обычно проходили в 52-ой аудитории старого здания ГГУ (ул. Свердлова 37), привлекали не только преподавательский состав физмата и радиофака. Среди слушателей было довольно много студентов. На одном из семинаров А.А. Ляпунов рассказал о придуманных им операторных схемах программ – предвестниках будущих трансляторов. А вскоре он привез своего ученика Ю.И. Янова, который продолжил рассказ об операторных схемах и их преобразованиях. Иногда на этих семинарах появлялись и одиозные биологи, которые в лице профессора Е.М. Воронцова не менее яростно отстаивали признанные властями позиции академика Т.Д. Лысенко. Упоминание о генетике и кибернетике приводило их в бешенство.
Эти семинары оказали свое влияние на решение указанной шестерки студентов физмата специализироваться в области вычислительной математики. На четвертом курсе для знакомства с этим предметом вполне хватало допотопных арифмометров с ручным приводом (типа "Феликс") и более современных электромеханических калькуляторов немецкого производства ("Reinmetall", "Mersedes"). Знакомству с этой техникой, с практическими методами решения уравнений, с учетом распространения погрешности вычислений мы обязаны Юрию Исааковичу Неймарку. Но электронных вычислительных машин в то время не только в ГГУ, но и в городе Горьком еще не было. Поэтому и было принято решение отправить первую группу "вычислителей" в Москву. Благо расходы со стороны ГГУ были минимальными – проезд и суточные нам не оплачивались. Основная материальная помощь заключалась в переводе студенческой стипендии на почтовое отделение МГУ. Правда, руководство мехмата позаботилось о предоставлении нам мест в студенческом общежитии в Черемушках. Лекции за 5-ый курс мы посещали вместе со студентами мехмата МГУ, а производственная и дипломная практика проходила в разных организациях – ВЦ АН СССР, ВЦ МГУ, лаборатории управляющих машин и ОПМ МИ АН СССР. Мы с Первиным попали в ОПМ и проходили практику в 9-ом отделе. А.А. Ляпунов был официальным руководителем наших дипломных работ.
Тема дипломной работы Ю.Первина была открытой – ему предстояло написать первую в СССР игровую программу "Морской козел" (разновидность игры в домино). В те времена сотрудники ОПМ в обеденный перерыв сражались не только в шахматы и пинг-понг, но и "забивали козла". А моя дипломная работа оказалась закрытой. Мне поручили написать программу для решения обратной задачи Штурма-Лиувилля. Однако исходные данные для нее были связаны с секретной тематикой (в те времена ОПМ был головной организацией по разработке методов и программ для решения задач ядерной физики). По ходу выполнения дипломной работы мне пришлось познакомиться с численными методами решения систем обыкновенных дифференциальных уравнений и запрограммировать в машинных кодах Стрелы-1 метод Рунге-Кутта. Но гораздо более интересной оказалась возможность воспользоваться первыми средствами автоматизации программирования, разработанными в 9-ом отделе – программирующей программой ПП-2 [1] и программой автоматического присвоения адресов ПАПА [2]. Эти средства были разработаны в 1955-56 гг и находились еще в стадии начального и не очень активного освоения программистами других отделов. Поэтому появление в 9-ом отделе своего подопытного кролика было встречено очень доброжелательно. ПАПА позволяла автоматизировать процесс замены условных (символических) адресов в машинных командах на автоматически вычисляемые физические адреса. В определенном смысле, текст программы походил на строки автокодов (ассемблеров) за тем исключением, что в машинных командах указывались числовые коды операций. ПП-2 позволяла автоматизировать и сам процесс написания программы по соответствующей операторной схеме. По сути дела, она явилась прообразом трансляторов с алгоритмических языков, появившихся в нашей стране спустя 5 лет.
Во время пребывания в Москве я познакомился с некоторыми однокурсниками моего старшего брата. Большинство из них тогда учились в аспирантуре, совмещая учебу с проведением учебных занятий и работой. Именно они заложили базу профессионального программирования в нашей стране.
Среди них аспирант А.А. Ляпунова – Андрей Петрович Ершов, который уже читал лекции по программированию для студентов мехмата. Впоследствии А.П. Ершов превзошел своего учителя и стал академиком, возглавившим клан советских программистов. Под его руководством в ВЦ АН СССР была создана одна из первых программирующих программ для ЭВМ типа БЭСМ, разработаны расширения алгоритмического языка АЛГОЛ-60 и созданы соответствующие АЛЬФА-трансляторы для БЭСМ-6. Он очень много сделал для становления информатики как предмета обучения в школе. До конца дней своих А.П. Ершов возглавлял отдел программирования в Вычислительном центре Сибирского отделения АН СССР.
Анатолий Георгиевич Витушкин, аспирант А.Н. Колмогорова, до поступления в МГУ был выпускником суворовского училища. На одном из занятий у него в руках взорвался запал боевой гранаты. В результате будущий офицер лишился зрения и двух пальцев на левой руке. А советская математика в его лице приобрела блестящего ученого – одного из самых молодых член-корреспондентов АН СССР. Будучи слепым, А.Г. Витушкин неплохо играл в шахматы, на слух изучал и исполнял классические музыкальные произведения – фортепьянные концерты Грига, Рахманинова, Чайковского. Одним из его хобби была разработка читающего автомата для слепых. На входе автомата предполагалось установить миниатюрную телевизионную камеру, которая считывала страницу текста. Оптическая система должна была выделять в поле зрения отдельную букву, в образе которой логическим дешифратором распознавались такие графические элементы как горизонтальный, вертикальный или наклонный отрезок прямой, дуга окружности с той или иной ориентацией (выпуклость влево/вправо, вверх/вниз). Совокупность графических признаков выделенной буквы сравнивалась с эталонными образцами, и полученный таким образом двоичный код управлял шестеркой соленоидов со штырями-сердечниками, формировавших на выходе тактильный узор опознанного символа в системе Брайля. К разработке проекта этого автомата А.Г. Витушкин привлек и меня. Какое-то время меня даже зачислили в штат ОПМ в качестве лаборанта по совместительству.
Большую роль в моем профессиональном становлении сыграл Эдуард Зиновьевич Любимский, который в то время работал научным сотрудником 9-го отдела и назывался просто Сашей. Он был моим непосредственным опекуном как в освоении программирования на ЭВМ "Стрела-1", так и в использовании средств автоматизации программирования. Именно он вместе с Сергеем Сергеевичем Камыниным и Михаилом Романовичем Шурой-Бурой разработал программирующие программы ПП-1 и ПП-2 для ЭВМ типа Стрела. Спустя несколько лет Э.З. Любимский возглавил коллектив, разработавший один из первых отечественных трансляторов ТА-2 с языка АЛГОЛ-60 для ЭВМ тип М-20. Именно ему вместе с С.С. Камыниным принадлежит идея создания алгоритмического машинно-ориентированного языка АЛМО и серии трансляторов, использовавших АЛМО в качестве языка-посредника. В 1966 году он был одним из оппонентов на защите моей кандидатской диссертации. А через пару лет он пригласил меня в сборную команду программистов СССР, которая в 1968-69 гг разработала операционную систему ОС ИПМ для БЭСМ-6. Многие идеи этой системы были положены в основу докторской диссертации Э.З. Любимского, который до настоящего времени является ведущим профессором кафедры математического обеспечения МГУ и одновременно заведует отделом в Институте Прикладной Математики РАН им. акад. М.В. Келдыша.
Многое я почерпнул из общения с другим научным сотрудником 9-го отдела Всеволодом Серафимовичем Штаркманом. Этому человеку были подвластны не только нюансы программирования в машинных кодах, но и детали инженерной реализации узлов и блоков ЭВМ. Он принимал активное участие в проектировании системы команд на первых отечественных ЭВМ типов Стрела и М-20. Его перу принадлежит одна из моих первых книг по программированию "Система команд быстродействующей электронной вычислительной машины Стрела-1". Он был руководителем группы, разработавшей отечественный транслятор языка машинных команд для ЭВМ БЭСМ-6. Автокод БЕМШ (Бочкова – Езерова – Морозова – Штаркман) был одним из главных средств разработки различных программных систем для флагмана нашей вычислительной техники. В руках В.С. Штаркмана я увидел первые фотографии обратной стороны Луны, которые были обработаны на БЭСМ-6 и только спустя несколько дней появились на страницах газет.
В 1956 году нас очень удивил приказ по ОПМ, в котором сообщалось о награждении орденами группы ученых ОПМ, среди которых находились и сотрудники 9-го отдела. В их число входили и такие корифеи как зам. зав. отделом д.ф.-м.н., профессор М.Р. Шура-Бура, и почти наши ровесники Э.З. Любимский и В.С. Штаркман, которым тогда было по 24-25 лет. Позже мы узнали, что эти правительственные награды наши знакомые получили за успешное завершение одного из этапов ядерной программы СССР.
В то время штатная численность сотрудников ОПМ примерно в 7-8 раз превышала количество сотрудников МИ АН СССР, к которому было приписано отделение. Инженерно-технические подразделения, возглавляемые А.Н. Мямлиным, насчитывали до 300 сотрудников, обслуживавших первую серийную ЭВМ "Стрела-1". Они обеспечивали круглосуточную работу перфораторных, холодильных и энергетических установок, профилактику, ремонт и эксплуатацию ЭВМ и ее периферийных устройств. Все это хозяйство располагалось в отдельном двухэтажном корпусе, находившемся под бдительным оком вооруженной охраны, подчинявшейся генералу КГБ. Ничего удивительного в этом нет. ОПМ был ведущим разработчиком математического и программного обеспечения систем, использовавшихся в ядерных центрах Сарова и Челябинска. Здесь же создавались программы управления полетами будущих космических аппаратов. Руководителями научных отделов ОПМ были академики Я.Б. Зельдович, А.Н. Тихонов, А.А. Самарский, член-корреспондент И.М. Гельфанд, доктора наук А.А. Ляпунов, Д.Е. Охоцимский, М.Р. Шура-Бура. А возглавлял отделение академик Мстислав Всеволодович Келдыш, избранный впоследствии Президентом АН СССР.
Таким образом, мы в нужное время оказались в нужном месте.
2. Машина ГИФТИ
2.1. Первая тройка программистов в г. Горьком
После окончания ГГУ пять из шести вычислителей были распределены на работу в ГИФТИ. Инна Виткина получила приглашение от А.П. Ершова и уехала на работу в только что созданный Вычислительный центр СО АН СССР. Я, Ю. Первин и В. Максимова были приписаны к инженерной группе, занимавшейся разработкой первой в Горьком ЭВМ, получившей название "Машины ГИФТИ". Т.Е Бочкарева и В.А. Бебихов попали в группу, занимавшуюся эксплуатацией серийной аналоговой вычислительной машины МН-8, которую институт приобрел для исследования сложных динамических систем. Спонсором, обеспечившим покупку этого дорогостоящего оборудования, было Особое Конструкторское Бюро Машиностроения (ОКБМ), возглавляемое И.И. Африкантовым.
Проект первой в СССР вузовской цифровой вычислительной машины был задуман в 1955-56 гг. сотрудниками кафедры теории колебаний радиофизического факультета ГГУ и активно поддержан ее новым заведующим Николаем Александровичем Железцовым. Задолго до этого интерес к работам в новом направлении был проявлен его предшественником – академиком Александром Александровичем Андроновым. Ему довелось участвовать в работе одной серьезной комиссии, проверявшей целесообразность расходования довольно больших средств в лаборатории управляющих машин. Выводы комиссия сделала правильные, и впоследствии на базе лаборатории, возглавляемой чл.-корр. АН СССР И. С. Бруком и разработанной там ЭВМ М-2, был создан Институт электронных управляющих машин (ИНЭУМ).
Первый период был более характерен работами теоретического направления. К ним относятся блестящая дипломная работа Марка Исааковича Фейгина, связанная с исследованием динамики поведения триггера (1952 г.), проект арифметического устройства ЭВМ последовательного действия (Михаил Яковлевич Эйнгорин, 1954 г.), система команд и архитектура ЭВМ с двухуровневой памятью (Аркадий Моисеевич Гильман, 1955 г.). Две последние работы были представлены на Всесоюзной конференции «Пути развития советского математического машиностроения и приборостроения», состоявшейся в 1956 г.
Воплощение двоичной логики в железо началось с цифровой лабораторной работы – специализированной машины со странным названием "7´7". Автором этого проекта был М. Фейгин, который довел свой замысел до ума в 1953 г. вместе с бригадой студентов младшего курса в составе И. Клибановой, Е. Сабаева и А. Сергиевского. Машина "7´7" умела вычислять произведение трехразрядных двоичных чисел, и с ее помощью ассистент В.А. Дозоров наводил страх на студентов физмата и радиофака. Он подменял исправные элементы схемы на неисправные, а задача обучающихся состояла в локализации ошибочного диода по таблице получающихся результатов.
Наряду с учебными макетами подобного рода и глубокими теоретическими изысканиями на кафедре началась и более кропотливая экспериментальная работа по созданию отдельных узлов и блоков цифровой техники. В 1954-55 гг. довольно много дипломных работ (С. Буторин, А. Гончаров, Б. Караулов, Б. Кожинская и др.) было посвящено решению этих практических задач. Исторически сложилось так, что выпускники кафедры, посвятившие себя новой тематике, группировались вокруг Аркадия Степановича Тарантовича (выпускника 1953 г). В составе группы инженеров-разработчиков, включенной в штат ГИФТИ и активно поддерживаемой ее директором Яковом Никитичем Николаевым, появились Александр Михайлович Гончаров (выпускник 1955 г.), Марк Давыдович Брейдо, Нина Всеволодовна Жеглова, Григорий Дмитриевич Зарницын и Рафек Хасьянович Садеков (выпускники 1956 г). Основной объем работ по изготовлению блоков машины ГИФТИ выпал на группу, опекаемую Зоей Семеновной Кечиевой. В ее составе работали техники и монтажники Леша Алексеев, Саша Аралов, Валя Блинничева, Лева Маркин, Вена Монахов, Толя Рожков и чертежница Дина Мануилова. В разработке силовых компонент (блоки питания, сетевые фильтры) принимал активное участие Виктор Иванович Королев. Дизайн пульта ЭВМ и разработка электронной схемы управления встроенным растровым дисплеем выполнены Геннадием Григорьевичем Денисовым.
В 1957 г общее руководство работами по созданию, монтажу и вводу машины ГИФТИ в эксплуатацию было поручено к.ф.-м.н. Артемию Сергеевичу Алексееву, который возглавил образованный к концу года Вычислительный центр ГИФТИ и руководил им, практически, до конца своей жизни. На фото 1 представлены сотрудники ГИФТИ, так или иначе причастные к разработке проекта машины ГИФТИ.
Слева направо: Г.Д. Зарницын, А. Аралов, Р.Х. Садеков, Н.А. Железцов, Н.В. Жеглова, А.М. Гильман, М.Я. Эйнгорин, А.М. Гончаров, В.А. Дозоров
В основу машины ГИФТИ был положен проект А. М. Гильмана, однако в процессе его реализации многие функциональные узлы подверглись серьезным изменениям. Машина ГИФТИ представляла собой универсальную ЦВМ последовательного действия с оперативной памятью из 2016 слов длиной по 32 бита. Специально для нее в ОКБМ был изготовлен магнитный барабан, вращавшийся со скоростью 6000 об./мин. На этом барабане помимо ячеек оперативной памяти были реализованы сверхбыстрые рециркуляционные регистры, позволившие довести скорость работы арифметического устройства до 6000 сложений в сек.
"Память" машины ГИФТИ – А.М. Гончаров и А.С. Тарантович
Замечу, что ранее разработанные отечественные ЭВМ обладали быстродействием 100 оп/сек (Урал-1), 2000 оп/сек (Стрела-1) и 7000 оп/сек (БЭСМ). Причем в двух последних компьютерах была реализована более дорогостоящая параллельная арифметика. В арифметическом устройстве машины ГИФТИ была реализована схема ускоренного умножения и смоделирована оригинальная схема ускоренного деления двоичных чисел. К разработке последней приложил руку и я [3]. Моя тяга к изучению "железа" ЭВМ, наверное, была инициирована общением с В.С. Штаркманом. Упомяну в связи с этим еще одну публикацию, направленную на оптимизацию конструкции дешифратора памяти [4].
М.Д. Брейдо и Г.Д. Зарницын за отладкой арифметического устройства
Общая производительность машины ГИФТИ сдерживалась медленной оперативной памятью. Однако система ее команд предусматривала довольно много операций типа регистр-регистр или память-регистр. Впоследствии такой подход стал основным в архитектуре машин третьего поколения – ЕС ЭВМ и СМ ЭВМ. Одной из интересных особенностей логики выполнения команд машины ГИФТИ была система автоматической модификации исполнительного адреса и управления приращением в индексном регистре. На пульте машины находилась электронно-лучевая трубка, предназначенная для просмотра содержимого регистров и ячеек оперативной памяти, используемая как своеобразный растровый дисплей. Ввод данных и программ производился с перфоленты со скоростью 300 знаков в сек, тогда как электромеханический трансмиттер фототелеграфного аппарата выжимал всего 7 знаков в сек. Для вывода результатов вычислений использовался обычный рулонный телетайп РТА-51.
Пульт машины ГИФТИ. Справа – телетайп РТА-50.
По сравнению с ЭВМ типа Стрела, занимавшей тогда машинный зал площадью в 300 кв.м. и потреблявшей более 300 кВт электроэнергии, машина ГИФТИ поражала своими скромными параметрами (комната в 25 кв.м, 560 ламп, потребляемая мощность – порядка 11 кВт).
Одна из трех стоек машины ГИФТИ. Справа – типовые блоки.
Машина ГИФТИ оказалась пятой в стране универсальной цифровой вычислительной машиной вслед за ЭВМ БЭСМ (разработчик – ИТМ и ВТ, руководитель акад. С.А.Лебедев, кстати, нижегородец по происхождению), Стрела-1 (разработчик – Московский завод САМ, руководитель Ю.Я. Базилевский), М-2 (разработчик – лаборатория управляющих машин АН СССР, руководитель чл.-корр. И.С. Брук), Урал-1 (разработчик – Пензенский завод САМ, руководитель Б.И. Рамеев). И она была первым компьютером, разработанным вузовскими учеными.
Первый коллектив пользователей машины ГИФТИ состоял из трех выпускников физмата – Ю.Л. Кеткова, В.М. Корниловой и Ю.А. Первина. Мы помогали инженерам доводить конструкцию ЭВМ, составляли первые тесты, занимались разработкой программ нулевого цикла – подпрограмм ввода/вывода числовой информации, вычисления элементарных функций, реализации численных методов интегрирования, решения задач линейной алгебры, систем обыкновенных дифференциальных уравнений. К новому 1958 году на экране нашего дисплея появилась первая цифровая мультипликация: на фоне елочки, контуры которых были образованы неподвижными битовыми комбинациями, опускались снежинки – перемещающиеся ярко светящиеся точки (двоичные "единицы"). Электронная докладная, сопровождающая этот графический шедевр и адресованная начальнику Вычислительного центра, содержала требование повысить зарплату (зарплата программистов, зачисленных на должности и.о. старших научных сотрудников, составляла 880 руб. и не так уж и намного превосходила их студенческую стипендию).
Первые инженерно-технические задачи, которые решались на машине ГИФТИ, были связаны с исследованиями систем обыкновенных дифференциальных уравнений высокого порядка. Главным поставщиком задач такого рода была лаборатория, возглавляемая Н.А. Железцовым, которая по заданию ОКБМ разрабатывала и исследовала схемы управления ядерными реакторами. В силу закрытости этих работ лаборатория именовалась как "п/я 88". Поначалу такие задачи решались на большой аналоговой вычислительной машине МН-8, многочисленные блоки которой соединялись в соответствии с математической моделью исследуемого объекта. Коммутация блоков осуществлялась вручную с помощью проводников на специальной панели, занимала много времени, требовала тщательной проверки и настройки параметров интегрирующих усилителей. Затраты на операции такого рода занимали несколько дней, и до тех пор, пока исследовалось поведение одной системы, коммутационную панель МН-8 нельзя было занимать для набора другой схемы. Погрешности аналоговых блоков и нестабильность их параметров не всегда гарантировали требуемую точность решения.
На машине ГИФТИ ввод программы решения аналогичной задачи занимал считанные секунды и после получения многометровых распечаток с таблицами исследуемых функций пользователь мог неспешно их анализировать, освобождая компьютер для решения других задач. Первым моим клиентом был сотрудник "секретного ящика" Андрей Владимирович Сергиевский. Впоследствии он стал директором ГИФТИ и несколько лет проработал директором НИИ ПМК.
Следующую группу исследователей, вкусивших прелести численных методов решения дифференциальных уравнений, составили сотрудники Людмилы Николаевны Беллюстиной, занимавшиеся качественным исследованием динамических систем. Вскоре появились и первые внешние заказчики – проф. С.А. Жевакин (НИРФИ), проф. И.И. Трянин (ГИИВТ), молодые аспиранты проф. А.Г. Угодчикова (ГИСИ) и др. К 1960 г группа программистов в ВЦ ГИФТИ насчитывала в своих рядах уже более 20 человек, для которых я был неформальным начальником.
До 1961 года машина ГИФТИ была в Вычислительном центре единственной цифровой ЭВМ, на которой успешно решались многие научно-технические задачи и воспитывались первые кадры горьковских программистов.
2.2. Как я бодался с Горнером
Для вычисления значений элементарных и специальных функций на каждой ЭВМ разрабатывается библиотека соответствующих стандартных подпрограмм. В большинстве случаев используются подходящие полиномы, с той или иной степенью точности аппроксимирующие нужную функцию:
y = f(x) ≈ Pn(x) = a0•xn + a1•xn-1 + ... + an-2•x2 + an-1•x + an
Поэтому задаче вычисления значения полинома в заданной точке всегда уделялось большое внимание. Исторически сложилось так, что для ее решения все использовали классическую схему Горнера:
Pn=(...((a0•x + a1)•x + a2)•x + ...+ an-1) •x + an
Эта схема требует в общем случае выполнения (n+1) операции умножения и n операций сложения. Интуитивно чувствуется, что по числу операций схема Горнера является самой оптимальной, однако этот факт никогда ранее не доказывался.
В 1957 году была закончена разработка машины ГИФТИ, и мне предстояло написать для нее программы вычисления элементарных функций. Среди литературы, посвященной этим вопросам, мне попалась на глаза свежая статья Джона Тодта "Мотивы для работы в области численного анализа", опубликованная в журнале "Математическое просвещение" (№ 75, вып. 1, 1957). В этой статье описывалась идея нового способа вычисления полинома 6-ой степени. Речь шла о том, чтобы на предварительном этапе пересчитать коэффициенты ai исходного полинома в некоторые другие коэффициенты bj, а затем воспользоваться следующей схемой:
q1=(x+b1)•x
q2=(q1+x+b2)•(q1+b3) (1)
q3=(q2+b4)•(q1+b5)+b6
Из условия q3 = P6 = x6+a1x5+a2x4+a3x3+a4x2+a5x +a6 и приравнивания выражений при одинаковых степенях x составлялись уравнения для нахождения неизвестных коэффициентов bj. Среди полученных уравнений были и квадратные, которые могли не иметь вещественных корней. Но в тех случаях, когда по коэффициентам ai можно было вычислить вещественные bj , схема (1) позволяла снизить количество операций на заключительной стадии подсчета значения полинома: вместо 6 умножений и 6 сложений (как это было в схеме Горнера) требовалось выполнить 3 умножения и 7 сложений. Предварительная обработка коэффициентов исходного полинома выполнялась один раз, зато при последующих многократных вычислениях по схеме (1) удавалось сократить количество наиболее медленных операций умножения.
Машина ГИФТИ, для которой мне пришлось создавать библиотеку стандартных подпрограмм, была вычислительной машиной последовательного действия, и операция умножения на ней выполнялась в 32 раза медленнее, чем операция сложения. Поэтому идея Тодта показалась мне очень привлекательной, и основное, что я в ней разглядел – возможность повысить степень промежуточного полинома при очередном умножении не на 1 (как это происходит в схеме Горнера), а на 2 за счет умножения на квадратный множитель. Довольно быстро мне удалось построить похожие схемы для полиномов четной степени n=2k≥6, в которых предварительная обработка всегда приводила к вычислению вещественных коэффициентов bj. В один из приездов А.Г. Витушкина в Горький я рассказал ему о новых схемах, требовавших после предварительной обработки выполнения [(n+1)/2]+[n/4] умножений и (n+1) сложений. Вернувшись в Москву, он показал мои схемы своим будущим дипломникам Э.Г. Белаге и В.Я. Пану и предложил им тоже заняться этой задачей.
В результате этого "соревнования" Э.Г. Белаге удалось доказать, что применение предварительной обработки не позволяет построить схему вычисления полинома, использующую меньше, чем [(n+1)/2]+1 умножение и n сложений. В общем, этот результат интуитивно предсказывал и я, т.к. за одно умножение к каждому операнду можно было добавить только по одному коэффициенту bj , а их количество в общем случае (все ai линейно независимы) должно было точно равняться n+1. Для полиномов с комплексными коэффициентами Э.Г. Белага построил схему, требовавшую минимального количества операции. Однако для практических целей эта схема не годилась, т.к. операции умножения комплексных чисел существенно замедляли вычисления, да и каждое сложение удваивало количество тактов ЭВМ. Зато В.Я. Пан сумел построить схему предварительной обработки полинома с вещественными коэффициентами, которая позволяла найти вещественные bj и требовала на заключительном этапе [n/2]+2 умножений и (n+1) сложений. Моя схема и схемы Пана достаточно подробно описаны в книге из серии "Справочная математическая библиотека" – Математический анализ: Вычисление элементарных функций. – М.: Гос. изд. физ.-мат. литературы, 1963. За несколько лет до выхода этого справочника "соперники" постаралось застолбить свои приоритеты [5-9]. Жаль только, что ни Пан, ни Белага не сослались на предоставленные им схемы, которые я придумал чуть раньше. Хотя после первых публикаций мы с Витей Паном переписывались и обменивались очередными достижениями в деле улучшения схемы Горнера. Последующие работы В.Я. Пана в этой области [10-13] составили основу его кандидатской диссертации.
2.3. Как хитрая запятая доплыла до IBM
Арифметическое устройство машины ГИФТИ было предназначено для выполнения операций над двоичными числами с фиксированной запятой. Система команд предусматривала три положения запятой:
- в начале числа, при этом максимальное по модулю число было равно 2-2-27;
- в середине числа, при этом максимальное по модулю число было равно 214-2-15;
- в конце числа, т.е. все числа были целыми.
Любое из них мало подходило для решения задач, в которых наблюдался большой разброс в диапазоне исходных данных и промежуточных результатов. Поэтому приходилось вводить различные масштабные коэффициенты. Полученные таким образом результаты решения задачи приходилось также вручную подвергать обратным преобразованиям. Для освобождения программистов от этой довольно нудной работы З.С. Баталовой, входившей в состав нашей группы, было предложено разработать подпрограммы, моделирующие выполнение операций с плавающей запятой. При этом в качестве формата исходных данных было выбрано стандартное для конструкций более мощных ЭВМ того времени двоичное представление:
x = -1s•m•2p
Здесь
s –знак числа, (0 для положительных чисел, 1 для отрицательных)
p – двоичный порядок числа,
m – двоичная мантисса числа, обычно, нормализованная, т.е. 0.5≤ m <1.
Мантисса и порядок располагались в смежных ячейках памяти. Для мантиссы был выбран формат числа с фиксированной запятой, которое по модулю принадлежало диапазону [2-2-27, 2-27]. Порядок представлялся как целое число, по модулю принадлежащее диапазону [229-1, 0]. Это позволяло существенно расширить диапазон обрабатываемых числовых данных и забыть о проблеме масштабирования переменных в программах. Зина Баталова успешно справилась с этой работой и ее первая публикация по информатике появилась в журнале "Изв. ВУЗов. Радиофизика" [14].
Так был найден разумный компромисс, позволивший отказаться от неприятной ручной работы ценой снижения общей скорости работы программы – моделирование операций с плавающей запятой требовало изрядного количества дополнительных машинных тактов. Подпрограммы с плавающей запятой облегчали процедуру решения многих прикладных задач. Однако накладные расходы на подключение соответствующих подпрограмм, особенно на ввод и вывод данных были достаточно большими. Кроме того, подпрограммы использовали для своих нужд изрядное количество быстрых регистров.
Проанализировав плюсы и минусы нового режима решения задач, я решил улучшить эксплуатационные характеристики подпрограмм для выполнения операций с плавающей запятой за счет:
- сокращения объема подпрограмм;
- использования в них минимального количества ячеек специального запоминающего устройства (эти ячейки, выполненные на регистрах рециркуляции, обладали максимальным быстродействием, но их было очень мало);
- упрощения работы с данными на вводе и выводе.
В реализации этого плана мне помогла идея отказа от общепринятого формата представления числовых данных с плавающей запятой. После замены двоичного порядка p на десятичный порядок d (x=-1s×m×10d), удалось упростить преобразование данных на вводе и выводе и еще больше расширить диапазон представимых данных. Мантисса исходных данных вводилась по стандартной схеме ввода чисел с запятой в начале числа, а порядок вводился в восьмеричной системе, т.е. не требовал специального преобразования. Так же просто был организован и вывод результатов вычислений. Таким образом, отпала необходимость в специальных подпрограммах ввода и вывода числовых данных. При использовании нового способа представления чисел объем исходной программы увеличивался в 2-4 раза, одновременно в 10-12 раз возрастало время решения задачи. Информация об этом подходе была опубликована в следующем номере журнала "Радиофизика" [15]. А спустя несколько лет фирма IBM использовала аналогичную идею, заменив двоичный порядок шестнадцатеричным в своих знаменитых моделях IBM/360/370.
2.4. Коды Баркера
Одна из задач, которую мы пытались решить с помощью машины ГИФТИ, была связана с проектом новой радиолокационной станции, разрабатываемым на одном из предприятий г. Горького. Идея ее работы была основана на использовании кодов Баркера – дискретных кодов, состоящих из последовательности прямоугольных импульсов с синусоидальным заполнением в фазе и противофазе. Для упрощения задачи код Баркера можно представить себе как последовательность положительных и отрицательных импульсов. Например, при длине кода 5 такая последовательность задается цепочкой 1,1,1,-1,1. Сгенерировать такой сигнал можно с помощью следующей логической схемы:
Здесь используются пять задержек на некоторый фиксированный интервал времени dt, задающие требуемую частоту импульсов, инвертор "И", меняющий знак сигнала на своем входе, и сумматор. Если на Вход 1 подать импульс, то на выходе сумматора образуется нужная последовательность из пятерки положительных и отрицательных единиц. Сигнал, образованный на выходе сумматора, отправляется в сторону предполагаемой цели, отражается от нее и возвращается уже на Вход 2 этой же схемы. По результатам суммирования импульсов отраженного сигнала на выходе сумматора образуется следующая цифровая последовательность: 1,0,1,0,5,0,1,0,1. Обратите внимание на тот факт, что центральный суммарный импульс в 5 раз превышает амплитуду остальных импульсов, отраженных от цели. По сути дела, это – функция автокорреляции радиолокационного сигнала. Однако отраженный сигнал возвращается на приемник локатора с неизбежными шумами, и его амплитуда может оказаться ниже уровня шума. Известно, что n-кратное суммирование белого шума увеличивает его амплитуду в √n раз. Поэтому при использовании кода Баркера с достаточно большим n сигнал от реальной цели можно было бы четко выделить на фоне шумовых помех. Дело было за малым – заказчика интересовал код Баркера для n=30.
Первая идея, которая пришла к нам в голову – написать программу, которая бы перебирала все комбинации битов 30-разрядного двоичного кода и строила бы для них результирующий ответный сигнал. Но уже на сравнительно малых n мы убедились в том, что скорости машины ГИФТИ для перебора такого объема было явно недостаточно. Некоторые коды Баркера для n = 7, 9, 11 и 13 мы таким способом нашли, но мощности нашей ЭВМ на этом были исчерпаны. Почти параллельно с нами над этой проблемой трудились сотрудники Радиотехнического Института АН СССР Ю.В. Поляк и Р.В. Мошетов. Им удалось аналитически доказать, что для n=4k±1 при n>13 кодов Баркера не существует [16]. Поэтому мы решили использовать аналогичный подход для кодов четной длины. Нам удалось доказать, что для n=4k+2 кодов Баркера тоже не существует. Для некоторых значений n=4k (8, 12, 16 и 20) путем полного перебора, который удалось немного сократить за счет одного установленного нами свойства, кодов Баркера тоже не было обнаружено. Полученные результаты были тоже опубликованы [17]. А спустя 6 лет нам прислал письмо сотрудник МТИ R. Turyn, который заинтересовался работами советских авторов и предлагал встретиться в Москве на международном математическом конгрессе. Однако это предложение поступило в наш институт спустя пару месяцев после окончания конгресса. Видимо, спецслужбы долго искали наш адрес в Горьком. К тому же в те времена несанкционированные встречи с иностранцами не приветствовались.
3. Трагическая судьба ТЭВМ
После ввода в эксплуатацию машины ГИФТИ, модернизации ее устройств ввода и вывода, а также устранения дефектов конструкции коллектив разработчиков, насчитывающий 6 квалифицированных электронщиков и порядка 10-12 монтажников оказался на перепутье. Его надо было чем-то занять и, естественно, что новые задачи должны были соответствовать технологическим достижениям в стране – появились полупроводниковые приборы, пришедшие на смену радиолампам, ферритовые сердечники начали вытеснять прежние не очень оперативные запоминающие устройства (магнитные барабаны) и т.д.
И тогда по договору между ГИФТИ и Проектно-Технологическим Научно-Исследовательским Институтом Волго-Вятского Совнархоза (ПТНИИ ВВСНХ) было решено разработать ЭВМ нового поколения, получившую название ТЭВМ (Технологическая ЭВМ). Возник этот проект не спонтанно. Преподаватель кафедры теории колебаний А.М. Гильман, один из авторов проекта машины ГИФТИ, на протяжении нескольких лет разрабатывал программы, с помощью которых можно было бы автоматически формировать технологические карты для механической обработки деталей [18]. В дальнейшем подобные работы составили основу направления с аббревиатурой АСУ ТП (автоматизированные системы управления технологией производства). Однако эта деятельность не очень вписывалась в научные направления, развиваемые в ГИФТИ. Поэтому А.М. Гильман устроился на работу по совместительству в ПТНИИ, где был создан соответствующий отдел, а возглавил его бывший сотрудник ГИФТИ Ю.А. Первин. Не без их поддержки руководство ПТНИИ обратилось с соответствующей просьбой к директору ГИФТИ Я. Н. Николаеву и заручилось его согласием.
Начальный период работы над проектом ТЭВМ протекал довольно спокойно. Были отработаны полупроводниковые аналоги основных блоков компьютера. А.М. Гончаров и А.С. Тарантович разработали специальный автомат для отбора ферритовых сердечников с одинаковыми характеристиками – элементов оперативной памяти. К прошивке ферритовых матриц, из которых собирался куб будущего запоминающего устройства (ЗУ), кроме монтажников и техников привлекались и другие сотрудники ВЦ. Мне удалось придумать схему прошивки координатной матрицы ЗУ, более устойчивую к разбросу физических параметров ферритовых сердечников. В стандартной схеме по координате x (младшие разряды адреса) и координате y (старшие разряды адреса) в обмотки ферритов координатной матрицы подаются два токовых импульса. Их сумма в единственном сердечнике координатной матрицы, находящемся на пересечении заданных координат, оказывалась достаточной для перемагничивания сердечника, управлявшего выбором указанной ячейки памяти. Во все остальные ферриты указанных столбцов и строк координатной матрицы поступали импульсы, мощность которых была вдвое меньше, чем это требовалось для перемагничивания. Поэтому они не возбуждались и не посылали в куб ЗУ сигнал чтения. Однако из-за разброса физических характеристик некоторые ферриты координатной матрицы могли сработать и при полутоковом импульсе. Поэтому инженеры старались разработать схему выборки, при которой в сердечники координатной матрицы подавались импульсы меньшей мощности, например, по 1/3 тока перемагничивания. При этом в нужный сердечник подавались три такие импульса, а во все соседние поступал только один такой сигнал, который не мог их возбудить. Сложность заключалась только в том, чтобы придумать конструктивный способ прошивки ферритов координатной матрицы дополнительными сигнальными проводами. В работе [4] такой способ был предложен.
ТЭВМ представляла собой полупроводниковую машину последовательного действия, в которой было достигнуто довольно высокое быстродействие: за одну секунду она могла выполнить до 6000 логических операций, около 4000 сложений и порядка 260 умножений. Запятая была фиксирована между 18 и 19 разрядами, что позволяло оперировать с числами из диапазона 2-18 ≤ |x| ≤ 229-2-18. Специфика системы команд ТЭВМ [19] заключалась, в первую очередь, в возможности удобной работы с фрагментами 48-битного слова. В слове можно было выделить до 8 групп смежных двоичных разрядов, в которых могла находиться упакованная информация. Границы таких групп можно было либо набирать на пульте управления, либо изменять программным путем. Специальные команды ввода/вывода позволяли без какой-либо программной обработки вводить десятичные числовые данные в указанные группы и также автоматически переводить содержимое групп в десятичные числа при выводе. Система команд ТЭВМ включала довольно большой набор логических и арифметических операций над упакованными данными. Вторая немаловажная особенность ТЭВМ заключалась в использовании семи индексных регистров, с помощью которых можно было за один машинный такт не только модифицировать заданные адреса команды, но и соответствующим образом изменять содержимое указанного индексного регистра. Чтобы приблизительно оценить экономию от использования такого рода операций, было проведено сравнение технологических программ [20], разработанных по идентичным алгоритмам для ЭВМ Урал-4 (20000 машинных слов) и ТЭВМ (4000 машинных слов). Такая разница в объеме программ была достигнута и за счет развитой системы переадресации (в технологической программе использовалось до 30-35% команд с индексируемыми адресами).
Однако по мере приближения заключительного этапа, – межведомственных испытаний ТЭВМ, – отношения между заказчиком работ и их исполнителем постепенно портились. А.М. Гильман, считавший себя непревзойденным профессионалом в области архитектуры ЭВМ, пытался вносить все новые и новые изменения в конструкцию ТЭВМ. Коллектив разработчиков машины ГИФТИ, накопивший серьезный опыт при создании ЭВМ предыдущего поколения, со многими из этих изменений не соглашался. Возможно, что в ухудшении отношений сыграла свою роль и личностная неприязнь втянутых в конфликт людей. Может быть, А.М. Гильман хотел посчитаться с руководством ГИФТИ за то, что его идеи автоматизации технологических процессов не встретили взаимопонимания. Но, так или иначе, он приложил все усилия для того, чтобы руководство ПТНИИ отказалось от приемки ТЭВМ. Для директора ГИФТИ Я.Н. Николаева этот конфликт закончился потерей должности. Вместо эксплуатации более совершенной ТЭВМ, ей была уготована участь музейного экспоната (к сожалению, не сохранившегося до наших дней). Коллектив разработчиков распался – А.М. Гончаров ушел в качестве начальника ВЦ на завод радиодеталей, Г.Д. Зарницын перешел на должность начальника ВЦ в НИИ Радиосвязи, Р.Х. Садеков продолжил работу в роли начальника ЭВМ в ПТНИИ.
4. Серийная ЭВМ М-20
После того как лаборатория Н.А. Железцова почти полностью переключилась на решение своих задач с помощью цифровой ЭВМ, в ГИФТИ было принято решение о приобретении самой мощной на тот период серийной ЭВМ М-20. Спонсорскую помощь как в получении наряда на очень дефицитное изделие, так и в финансовом плане оказал наш постоянный заказчик – ОКБМ (в те времена самые мощные компьютеры в первую очередь выделялись предприятиям, работающим на оборонную промышленность). В мае 1960 года большая бригада инженеров и электромехаников во главе с Юрием Яковлевичем Хохловым выехала в Казань, где на заводе математических машин собирались и тестировались последние модели ЭВМ первого поколения – М-20. В составе бригады оказались и два программиста – Ю.Л. Кетков и В.А. Миронов. Нам предстояло ознакомиться с системой команд новой ЭВМ, ее программным обеспечением и тестовым хозяйством. Я получил дополнительное негласное поручение – свести к минимуму количество пустых блоков-заглушек путем замены их на сверхдефицитный ЗИП. Так как контроль за использованием блоков во время одновременной наладки очередной партии компьютеров на заводе был налажен из рук вон плохо, то к концу командировки в стойках нашей машины на местах заглушек оказался удвоенный комплект запасных блоков, очень пригодившихся нам во время эксплуатации М-20.
По тому времени М-20 была самым мощной ламповой ЭВМ первого поколения. Она имела оперативную память в 4096 45-разрядных ячеек и обладала средним быстродействием порядка 20 тысяч оп/сек. Числовые данные, обрабатываемые на М-20, были представлены в формате с плавающей запятой (1 бит – знак числа, 1 бит – знак порядка, 6 бит – двоичный порядок, 36 бит – двоичная мантисса). Машинная команда содержала 6-разрядный код операции, три 12-разрядных адреса и три битовых признака модификации адресов команды перед ее выполнением. Для модификации исполнительных адресов использовался единственный 12-разрядный индексный регистр (РА – регистр адреса). Содержимое РА можно было инициализировать, запоминать, увеличивать или уменьшать с помощью специальных команд, использовавшихся для организации циклов.
Единственная системная утилита, поставлявшаяся в комплекте машины, называлась "Интерпретирующей системой ИС-2". Она обеспечивала работу с библиотекой стандартных подпрограмм (СП), включавших средства преобразования числовых данных на вводе и выводе, процедуры вычисления элементарных функций и подпрограммы некоторых численных методов (решение систем линейных алгебраических уравнений, вычисление определенных интегралов, нахождение корней функций и др.). Разработка ИС-2 была выполнена в ОПМ под руководством М.Р. Шуры-Буры и при его непосредственном участии. Обращение к любой стандартной подпрограмме библиотеки ИС-2 выполнялось в две машинные команды:
k 016 k+1 7501 7610
k+1 nnn x Nсп y
Первая команда выполняла безусловную передачу управления в начало ИС-2, располагавшуюся в памяти с ячейки 7501, она же запоминала адрес возврата (k+1) в ячейке 7610. Во второй строке (ячейка с адресом k+1) располагалась информация о входных (адрес x) и выходных (адрес y) данных, номер вызываемой подпрограммы (Nсп) и дополнительные сведения (код nnn ), по разному использовавшиеся в разных СП. Подпрограмма, к которой происходило обращение в первый раз, вызывалась с магнитного барабана на специальное поле оперативной памяти. Это поле можно было расширить для того, чтобы на нем могло одновременно располагаться несколько наиболее часто использующихся СП. После переполнения поле очищалось, и последующие обращения к СП снова вызывали коды нужных подпрограмм в оперативную память. Библиотека СП, в принципе, была открытой и позволяла пополнять свой состав пользовательскими подпрограммами, оформленными по установленным правилам. Первые годы программы для М-20 составлялись только в машинных кодах.
Установке М-20 в старом здании ГГУ (ул. Свердлова 37) предшествовала довольно большая подготовительная работа по оборудованию мощной генераторной и холодильной установок, располагавшихся в подвальных помещениях. В машинном зале предстояло сделать фальшпол, под которым проходили воздуховоды с поступающим для охлаждения воздухом и размещалось кабельное хозяйство. М-20 потребляла порядка 200 кВт электроэнергии, и ее стойки нуждались в серьезном охлаждении. Система охлаждения была трехступенчатой – в шкафы с блоками снизу вдувался воздух с температурой 10-12 градусов, к верхней части шкафов температура воздуха уже доходила до 30-35 градусов. Затем нагретый воздух проходил через радиаторы с водой, которая, в свою очередь, охлаждалась мощной фреоновой установкой. Систему охлаждения удалось упростить, сведя ее к двухконтурному варианту – во дворе ГГУ пробурили артезианскую скважину, из которой зимой и летом поступала вода температурой в 8°.
Запуск М-20, который проводила пуско-наладочная бригада казанского завода математических машин, пришелся на 8 марта 1961 года (тогда этот день еще относился к разряду рабочих). Начальником машины был назначен Г.Д. Зарницын. Круглосуточная работа М-20 обеспечивалась четырьмя сменами инженеров. В утренней и вечерней сменах дежурили более опытные инженеры – С.Г. Кузин, Э.Л. Иванова, Л.Ф. Полова и переквалифицировавшийся из программистов В.А Миронов. Они довольно быстро научились находить и устранять неисправности в основных стойках М-20 (устройство управления, арифметическое устройство). Оперативная память находилась под опекой Г.Д. Зарницына. За работу внешних устройств (магнитные барабаны, магнитные ленты, алфавитно-цифровое печатающее устройство) отвечала группа, возглавляемая Е.П. Цветковым. Полезное время, которое отдавалось программистам для решения задач, в лучшем случае, составляло 8-10 часов, как правило, падавших на вечернее и ночное время. Дневное время обычно уходило на профилактику и ремонт машины и ее периферийных устройств. Первая неприятность нас ожидала на майские праздники – предстояло три выходных, и машину решили выключить. Сразу после включения, которое по технологии "холодного старта" занимало примерно 6 часов, в ЭВМ полетело порядка 800 ламп. Хорошо, что у нас оказался двойной комплект ЗИП, но после этого события машину больше не выключали.
4.1. Первая электронная таблица УИС-РГМ
В 1963 году в ВЦ ГИФТИ обратился главный инженер СКБ "ВолгоБалтСудопроект" А.А. Брайловский, который привел к нам иногородних заказчиков. Это были сотрудники отделения радиусографии НИИ Технологии Машиностроения (г. Ростов-на-Дону) Н.И. Курилов и В.Б. Перлин. По заказу СКБ в этом отделении разрабатывалась новая система подготовки плазовой документации для проекта нефтерудовоза, который должен был строиться на заводе "Красное Сормово". Метод радиусографии для проектирования судовой поверхности был придуман руководителем ростовского отделения Даниилом Самуиловичем Китаиновым. Идея этого метода заключается в следующем. Некоторым эвристическим способом внутри корпуса судна и на его поверхности проводится несколько плавных линий, построенных из отрезков прямых и дуг окружностей. Эти линии условно называются радиусографическим ключом. Любое продольное (батоксы и ватерлинии) или поперечное (шпангоуты) сечение судовой поверхности, в свою очередь представляется как линия, образованная отрезками прямых и сопрягающимися с ними дугами окружностей. Центры этих дуг и точки сопряжения фрагментов сечений находятся на линиях ключа.
На всех судостроительных заводах страны в те времена использовалась старинная (чуть ли не со времен Петра Первого) технология формирования чертежной документации. В натуральную величину на полу специального цеха (плаза) строился чертеж поперечных сечений, содержавший 21 теоретический шпангоут. Размеры некоторых конструктивных линий были заданы разработчиками проекта. Плавные промежуточные сечения строились с использованием гибких реек (англ. термин – spline), которые прижимались к полу специальными грузиками в форме утюжков. Через точки шпангоутов, расположенные на определенной высоте, также с помощью гибких реек проводились ватерлинии. Точно такие же построения выполнялись и по третьей координате (по ширине судна). Этот процесс носил название "согласования" чертежа. В дальнейшем полученные сечения использовались для образмеривания различных судовых деталей, определения размеров и профилей листов обшивки и др. Совершенно очевидно, что полученная таким образом чертежная документация для одного и того же проекта на разных судостроительных заводах, как правило, получалась разной. Поэтому при ремонте судна или установке на нем нового оборудования все приходилось делать только на заводе-изготовителе. На авиастроительных заводах тоже использовалась подобная технология, но чертежи сечений выполнялись в масштабе 1:10.
Основная идея радиусографического метода заключалась в попытке аналитически задать форму судовой поверхности и заменить вычерчивание и замеры сечений решением соответствующих геометрических задач и расчетом координат тех или иных точек. В отделении радиусографии НИИТМ была проделана довольно большая подготовительная работа – были созданы перечни стандартных графических задач, участвовавших в расчете различных сечений, подготовлены формуляры для записи последовательности вычислений и использования результатов решения каждой задачи в последующих построениях. Однако автоматизировать процесс обработки этих формуляров с помощью ЭВМ сотрудникам НИИТМ не удалось. Именно поэтому они обратились в ВЦ ГИФТИ с предложением о совместной работе.
Идея автоматизации подобного рода расчетов ассоциировалась у меня с обобщением логики машинных команд трехадресной машины М-20. Формат ее обычной команды выглядел следующим образом:
КОП А1 А2 А3
Здесь КОП – код операции;
А1 – адрес первого операнда в оперативной памяти;
А2 – адрес второго операнда в оперативной памяти;
А3 – адрес ячейки, в которую засылается результат выполненной операции
Я подумал, а почему бы не смоделировать машину, приспособленную для решения геометрических задач, в которой каждая "команда" выполняла соответствующий графический расчет и имела бы следующий вид:
SOURCE NЗАД DEST
Здесь SOURCE – вектор исходных данных;
NЗАД – номер решаемой задачи (аналог кода операции машинной команды);
DEST – вектор результатов
После анализа библиотек геометрических процедур было решено, что все вектора исходных данных содержат по 8 компонент, а все вектора результатов – по 3 компоненты. Фактическое количество параметров в некоторых задачах могло оказаться и меньше, тогда последние компоненты занимали место в памяти, но не использовались. Это позволяло организовать массивы исходных данных и массивы результатов в виде матриц с фиксированным количеством столбцов. Восьмеричная система, использовавшаяся на М-20 для нумерации ячеек оперативной памяти, очень удачно "ложилась" в выбранные размеры. Нумерация "ячеек" моделируемой графической ЭВМ могла восприниматься следующим образом. Первые три цифры определяли номер строки SOURCE (их можно было рассматривать как адрес "команды"), а младшая цифра соответствовала порядковому номеру исходного параметра (0 – первый параметр, 1 – второй, ..., 7 – восьмой). Для индикации результатов выполнения каждой графической "команды" было достаточно одной восьмеричной цифры, в которой использовались только три комбинации (4 – первый результат, 2 – второй результат, 1 – третий результат). Алфавитно-цифровых устройств подготовки данных в те времена на ЭВМ еще не было, поэтому пришлось ограничиться принятой цифровой индикацией строк и столбцов матрицы графической "программы".
Для организации логических операций в вычислительном процессе была введена группа дополнительных "задач", с помощью которых осуществлялись:
- проверка попадания переменных x, y, z в заданный диапазон и переход на соответствующую ветку графической программы;
- организация циклического повторения расчета с заданным шагом по той или иной координате;
- выдача тех или иных результатов решения на печать;
- рассылка полученных результатов по нужным клеткам матрицы исходных данных.
Оставалось только написать программу, которая бы эмулировала "графическую машину" на М-20. В таком эмуляторе была использована логика интерпретации вызовов стандартных программ – ИС-2. Библиотека графических задач была оформлена по правилам, принятым в ИС-2. Вызов нужной задачи осуществлялся по стандартной схеме. И это нашло свое отражение в названии УИС-РГМ (Универсальная интерпретирующая система радиусографического метода).
Процедура "программирования" сводилась к переписи таблиц НИИТМ на бланках машинных команд М-20 и могла выполняться неквалифицированным персоналом. Первая версия УИС-РГМ заработала в конце 1963 года, и по ее материалам я написал свою первую монографию (точнее, руководство системного программиста и руководство пользователя), которая была опубликована в Ростове-на-Дону под грифом "секретно". На данном грифе настояли наши заказчики, которые вели ряд проектов для оборонных предприятий (КБ Миля, КБ Антонова, СКБ Лазурит и др.).
Разработанный подход я назвал "матричным программированием". По сути дела, его идеология послужила прототипом для современных электронных таблиц.
5. НИИ ПМК и БЭСМ-3М
Осенью 1964 года при ГГУ вскоре после открытия факультета ВМК был создан НИИ Прикладной математики и кибернетики, первым директором которого стала Людмила Николаевна Беллюстина. Наиболее важная роль в создании НИИ ПМК, наверное, принадлежит Юрию Исааковичу Неймарку, Евгении Александровне Леонтович-Андроновой и Аркадию Моисеевичу Гильману. Основную часть штата нового института составили сотрудники ГИФТИ, перешедшие в НИИ ПМК вслед за своими лидерами. Самый крупный отдел института (отдел №2) возглавил Ю.И. Неймарк. Однако в НИИ ПМК появились и новые подразделения, которых ранее в ГИФТИ не было – отдел №3, нацелившийся на решение задач управления производством и технологическими процессами (его возглавил к.т.н. А.М. Гильман), отдел №4, первоначально ориентировавшийся на численное решение задач математической физики (его руководителем стал к.ф.-м.н. Соломон Иосифович Альбер), лаборатория бионики и биокибернетики (ее возглавил к.б.н. М.Ю Ульянов). Целиком перешла в НИИ ПМК группа, занимавшаяся компьютерной лингвистикой и возглавляемая Виктором Алексеевичем Аграевым. На ее базе в НИИ ПМК была создана лаборатория №8. Отделом №5, в задачи которого входила эксплуатация средств вычислительной техники, руководил Юрий Яковлевич Хохлов, ранее работавший главным инженером ВЦ ГИФТИ.
В связи с приобретением новой полупроводниковой ЭВМ БЭСМ-3м, совместимой по системе команд с компьютерами типа М-20, и появлением в научных подразделениях НИИ ПМК довольно большого контингента непрофессиональных пользователей, руководство института решило организовать при отделе №4 лабораторию автоматизации программирования. Самым простым способом для решения этой задачи было переманивание ведущих сотрудников ВЦ ГИФТИ, которые уже несколько лет занимались эксплуатацией ЭВМ с идентичной системой команд и с таким же набором обслуживающих программ. Зарплата заведующего лабораторией без степени меня не очень прельщала. В денежном исчислении добавка к зарплате была очень небольшой. В вычислительном центре моя штатная должность к тому времени достигла потолка – я числился главным инженером–конструктором, но перспектив дальнейшего роста без защиты кандидатской диссертации в ГИФТИ не было. А напористый С.И. Альбер искушал меня именно этим. После трехмесячных переговоров я сдался – 1 апреля 1965 года в штате 4-го отдела появились три новых программиста – Ю.Л. Кетков, Т.С. Ямпольская и Н.М. Станкевич. Одновременно с нами из ВЦ ГИФТИ в штат 4-го отдела была переведена лаборантка М.Л. Белова.
Начальная деятельность в новой лаборатории сводилась к освоению новых систем программирования – транслятора с алгоритмического языка АЛГОЛ-60 (ТА-2М), автокода БМ-4/220, пакета графических программ ГРАФОР, расширения интерпретирующей системы ИС-22. Приходилось обучать работе с этими средствами программистов из других подразделений, оказывать им консультации, помогать в поиске ошибок и отладке программ. Появление в городе ЭВМ, совместимых с М-20, расширило круг наших заказчиков. За аналогичной помощью к нам обращались сотрудники ГКТ БИП (ныне НИИ Измерительных Систем им. Ю.Е. Седакова), ОКБМ, Политехнического института. Одновременно с этой деятельностью мы довольно активно занимались разработкой новых стандартных программ для ИС-22. Несколько десятков таких СП было зарегистрировано в Государственном фонде алгоритмов и программ.
Вторым направлением нашей лаборатории было создание отдельных программ и систем для автоматизации проектных и конструкторских работ в судо- и авиастроении. Пригодились старые связи, накопленные на стадии внедрения радиусографического метода расчета сечений судовой поверхности и развертки листового материала, необходимого для обшивки судов. В числе наших заказчиков оказались ведущие судостроительные КБ г. Горького – СКБ Волгобалтсудопроект, ЦКБ Лазурит, СКБ по судам на подводных крыльях. Кроме них аналогичными услугами пользовался ряд иногородних предприятий судостроительной и авиационной промышленности – Николаевский судостроительный завод, ЦНИИ им. акад. Крылова (Ленинград), КБ Миля (Ростов-на Дону), КБ Ильюшина (Москва), п/я 202 (Новосибирск), КБ Антонова (г. Киев).
5.1. Линейные сплайны
Решение многих прикладных задач связано с аппроксимацией различных кривых – нелинейных характеристик систем автоматического регулирования, траекторий режущего инструмента на станках с числовым программным управлением, контуров сложных криволинейных поверхностей в судостроении и авиа строении и т.п.
Если нужно построить единственный отрезок прямой, наилучшим образом приближающий на отрезке [a, b] заданную кривую, то эта задача элементарно решается с помощью метода наименьших квадратов. И сводится она к решению системы линейных алгебраических уравнений второго или третьего порядков в зависимости от способа задания прямой – y = k•x + b или A•x + B•y +C = 0. Однако как только на заданном отрезке [a, b] нужно построить два звена оптимальной ломаной, то сразу появляется новый нелинейный параметр (точка излома) и дополнительные ограничения, связанные со стыковкой звеньев ломаной. И это резко осложняет задачу.
Еще сложней построить ломаную с неизвестным числом звеньев, каждое из которых аппроксимирует исходную кривую с требуемой точностью. Можно показать, что построение очередного звена ломаной эквивалентно ответу на вопрос – как далеко можно шагнуть вдоль кривой, чтобы стрелка прогиба построенной хорды была равна заданной точности. Конечно, для этой цели можно построить программу, которая постепенно увеличивая шаг одновременно вычисляла бы и стрелку прогиба очередного приближения. Но хотелось бы найти аналитическое решение, исключавшее такой перебор и позволявшее оценить количество звеньев оптимальной ломаной.
В конце 1965 года мне это удалось – я построил приближенные формулы для вычисления квазиоптимального шага h по значениям производных исходной функции и заданной точности аппроксимации ε:
для явного задания кривой y=f(x)
для параметрического задания кривой x=x(t), y=y(t)
Если в качестве параметра t выбирается длина дуги s (лонгальный параметр), то имеет место:
где K(sn) – кривизна в точке x(sn), y(sn).
Удалось доказать, что на участках кривых с монотонным изменением кривизны аппроксимация "вперед" (xn+1=xn+h) всегда позволяет строить звенья, которые отклоняются от кривой чуть больше, чем на ε. А при аппроксимации "назад" (xn+1=xn-h) все звенья ломаной уклоняются от кривой чуть меньше, чем на ε. Таким образом удалось получить верхнюю и нижнюю границы для оценки количества звеньев оптимальной ломаной. Для кривых второго порядка, чаще других используемых при конструировании судовых поверхностей, эти оценки оказались справедливыми не только для малых значений погрешности. Ю.С. Завьялов (ИМ СО АН СССР), составлявший антологию работ по сплайнам в СССР и за рубежом, отнес этот результат к числу первых конструктивных достижений в области линейных сплайнов [21].
Конец 1965 и начало 1966 года у меня ассоциируются с защитой кандидатской диссертации на соискание ученой степени кандидата физико-математических наук по теме "Об оптимальных методах нелинейной аппроксимации плоских кривых и системе автоматизации программирования для обработки геометрической информации". К форсированию этого рубежа много усилий приложил мой непосредственный начальник Соломон Иосифович Альбер, согласившийся стать моим научным руководителем. И хотя к результатам, включенным в тему диссертационной работы, он прямого отношения не имел, определенная заинтересованность у него была. Во-первых, я становился его первым кандидатом, во-вторых, защита повышала престиж нашего отдела и его заведующего, в-третьих, он активно отстаивал научную новизну полученных результатов, и защита могла стать тому подтверждением. Так или иначе, под его напором в 1966 г. были подготовлены две основополагающие статьи [22, 23] и на ученом совете Горьковского университета состоялась защита диссертации. В качестве первого оппонента выступил профессор Неймарк Ю.И. По первой части работы он имел хорошее представление и достаточно высоко оценил ее. Но программная часть диссертации первому оппоненту была неподвластна. И тут сказалась квалификация второго оппонента – первого кандидата наук по системному программированию в нашей стране Э.З.Любимского. Он был приглашен из ОПМ и второй раз выступил в роли моего опекуна. Тем более, что прототип универсальных интерпретирующих программ для ЭВМ типа М-20 был знаком ему не понаслышке – Любимский был непосредственным участником создания ИС-2 (22). С единственным голосом против Ученый Совет проголосовал за присуждение искомой ученой степени. До меня доходили слухи о том, что несколько заинтересованных лиц пытались выяснить фамилию проголосовавшего против. Но на меня этот момент никакого впечатления не произвел – я предпочитал не вмешиваться в околонаучные споры, характерные для того времени. Да и кто бы тогда считался с моим мнением – моя весовая категория находилась в самом низу карьеры научной деятельности.
6. Первое знакомство с БЭСМ-6. ОС ИПМ
В середине 1967 года Президиум Академии Наук СССР, которая тогда возглавлялась директором ИПМ академиком М.В.Келдышем, принял закрытое постановление о создании современного программного обеспечения флагмана нашей вычислительной техники – ЭВМ БЭСМ-6. Дело в том, что появившаяся в 1966 году БЭСМ-6 была оснащена наспех созданной операционной системой – диспетчером Д-67 (авторы Л.Н.Королев, А.Н. Томилин и др.) и упрощенной версией транслятора с автокода (автор Чайковский). В рамках нового проекта предполагалось создание многопользовательской операционной системы, функционально не уступающей по возможностям самой мощной зарубежной ОС Multics (разработка Массачусетского технологического института), и серией трансляторов с современных алгоритмических языков. К этому моменту в отделе автоматизации программирования ИПМ, возглавляемому М.Р.Шурой-Бурой, уже были начаты некоторые разработки. В стадии запуска находился транслятор с Автокода БЕМШ, разрабатывавшийся в секторе В.С. Штаркмана, во всю шли работы над проектом алгоритмического машинно-ориентированного языка АЛМО (Камынин С.С., Любимский) и трансляторов других языков в код АЛМО. В соответствии с принятым постановлением ОПМ мог привлекать к выполнению указанных работ лучшие программистские силы из любых организаций страны, в т.ч. из ядерных центров Сарова и Челябинска, из ведущих НИИ оборонной и космической промышленности.
Моя недавняя защита кандидатской диссертации, упрочившая связи с ОПМ, позволила С.И.Альберу обратиться к руководству ИПМ с предложением помощи, в результате чего двое сотрудников НИИ ПМК Кетков Ю.Л. и Салганская Н.М. в конце 1967 года были отправлены в длительную командировку в Москву. Нина Салганская удачно вписалась в коллектив трансляторщиков, создававших свою продукцию на базе языка АЛМО, а я попал в уже знакомый мне коллектив отдела, возглавивший работу над проектом операционной системы ОС ИПМ. В начальный момент в головную группу от ИПМ входили С.С.Камынин, Э.З.Любимский, И.Б.Задыхайло и В.С.Штаркман. От сторонних организаций в состав этой группы были включены представитель НИИ-4 майор Д.А.Корягин и представитель НИИ ПМК Ю.Л.Кетков. На роли лидеров претендовали В.С.Штаркман, имевший к тому времени опыт создания операционной системы ЭВМ "Весна", и тандем ЛЮКС (Любимский – Камынин). Однако видение архитектуры ОС у претендентов оказалось различным, и вскоре В.С.Штаркман отошел от работы в проекте ОС ИПМ, ограничившись совершенствованием Автокода БЕМШ. Он же принимал участие в создании драйверов некоторых внешних устройств.
После некоторого притирания друг к другу функции в головной группе разделились следующим образом. С.С.Камынин – генератор идей и непременный участник обсуждения текущей ситуации; Э.З.Любимский – фактический руководитель работ по созданию ОС ИПМ и проекта АЛМО; И.Б.Задыхайло и Д.А.Корягин – ответственные исполнители программ управления периферийными устройствами (в нашем проекте эта сфера получила название "супервайзер"); Ю.Л.Кетков – управление исполнителями операционной системы, заданиями, процессами и их ресурсами (эта сфера называлась "монитором").
Работы над основными компонентами ОС ИПМ продолжались более года. Члены головной группы решили отпускать усы и / или бороды и дали обет не сбривать свою растительность до тех пор, пока ОС ИПМ не будет сдана в эксплуатацию. Появление усатой команды в столовой ИПМ неизменно сопровождалось взрывами смеха и колкими замечаниями в адрес разработчиков программного обеспечения БЭСМ-6. В 1970 году началась опытная эксплуатация ОС ИПМ, которая была передана в ВЦ СО АН СССР. В издательском отделе ИПМ была выпущена серия препринтов, посвященных отдельным компонентам системы (один из них содержит общее описание монитора – [24]). Несколько докладов по проделанной работе (в т.ч. и с моим участием – [25,26]) были представлены на Второй Всесоюзной конференции по программированию в Новосибирске (1970 г). По материалам ОС ИПМ в 1971 году была подготовлена докторская диссертация Э.З.Любимского на тему "Возможности и принципы построения операционной системы для БЭСМ-6 (ОС ИПМ)", которая спустя 2 года была защищена в Институте Кибернетики АН УССР.
Слева направо: Э.З. Любимский, А.Д. Корягин, Ю.Л. Кетков, И.Б. Задыхайло, Л.В. Ухов (у входа в ИПМ АН СССР)
7. Появление Бейсика в нашей стране
Во время разработки ОС ИПМ нам очень не хватало режима диалога для отладки компонент системы. Несколько раз мы обсуждали идею многотерминального диалогового монитора, который позволял бы предоставить пользователям БЭСМ-6 оперативный доступ к своим программам. Впоследствии такой монитор под названием ДИМОН был разработан одним из членов нашей команды С.А. Усовым. Однажды Э.З. Любимский принес на работу руководство пользователя по интерпретирующей диалоговой БЭЙСИК-системе для ЭВМ фирмы General Electric (GE-400). У него возникла идея реализовать нечто похожее в рамках ОС ИПМ, но эту идею временно пришлось отложить. По руководству я познакомился с операторами входного языка BASIC (аббревиатура от Beginner All Purpose Symbolic Instruction Code – многоцелевой язык символических инструкций для начинающих). Бэйсик-система мне понравилась больше, чем система разделения времени на базе языка JOSS (сообщение об этой системе на одном из наших семинаров сделал сотрудник ВЦ АН СССР В.М. Курочкин).
Возвратившись после полуторагодичной командировки в Горький, я предложил сотрудникам своей лаборатории реализовать пошаговый компилятор с языка Бейсик. У нас еще не было такого большого проекта, к выполнению которого можно было подключить несколько человек. К пяти штатным сотрудникам отдела (М.М. Белослудцевой, Э.Н. Ильину, Ю.Л. Кеткову, И.М.Куракиной и В.С. Максимову) присоединился еще один энтузиаст из аналогичного подразделения НИРФИ – В.В. Бочаров. И до конца 1969 года нам удалось разработать пошаговый компилятор с языка Бейсик в код машины типа М-20. В рамках системы Горьковского университета к тому времени уже эксплуатировались две такие ЭВМ – БЭСМ-3М в НИИ ПМК и М-222 в ВЦ ГИФТИ.
При создании компилятора мы преследовали следующие цели. Во-первых, будущее его использование должно было максимально просто обеспечить режим разделения времени для поддержки одновременной работы нескольких терминалов. Для этого активному заданию временно выделялся основной куб памяти (МОЗУ-0 емкостью 4К 45-разрядных слов), где по фиксированной схеме распределения оперативной памяти располагались откомпилированная программа и ее исходные данные, интерпретирующая система ИС-2 и рабочее поле для ее стандартных подпрограмм. Второй куб (МОЗУ-1) использовался для работы компилятора и хранения управляющих таблиц, описывающих состояние каждого пользователя системы. Переключение на обслуживание очередного абонента предполагало смену содержимого единственного базового регистра.
Во-вторых, на магнитном барабане предполагалось хранить образы кубов оперативной памяти, соответствующие обслуживаемым пользователям. На ЭВМ типа М-222, располагавших 8 кубами оперативной памяти, сразу несколько готовых к исполнению программ могли находиться в оперативной памяти одновременно (это существенно экономило время свопинга).
Перед выполнением группы команд, соответствовавших очередному оператору активной программы, порядковый номер этого оператора фиксировался в виртуальном "счетчике команд", что позволяло идентифицировать ошибки периода выполнения с соответствующей строкой исходной программы. Управляющая программа по таймеру компьютера могла переключать внимание компилятора на обслуживание активных абонентов системы по кругу с полным периодом порядка 1-1.5 сек. Это позволяло практически мгновенно отреагировать на оператор, введенный с терминала пользователя, и либо превратить его в соответствующий эквивалент в машинных кодах, либо выдать сообщение о допущенной ошибке. Во время отсутствия завершенных сообщений с терминалов по фиксированным квантам времени осуществлялись запуски готовых к исполнению программ. Объем исходной программы мог доходить до 300 операторов, чего было вполне достаточно на начальной стадии обучения. Архив исходных программ располагался на магнитной ленте и мог одновременно хранить тексты до 64 программ на Бейсике.
Отмечу довольно важную особенность разработанного компилятора. Наряду с максимальным использованием ИС-2 для вычисления элементарных функций языка Бейсик, мы включили во входной язык оператор БЭСМ, позволяющий вставлять в текст исходной программы машинные команды с символическими адресами. По сути дела, эту идею мы заимствовали у транслятора с Алгола ТА-2М, где была реализована процедура M20-L. Основным назначением оператора БЭСМ, конечно, была возможность подключения довольно мощной библиотеки стандартных программ ИС-2/22. Но можно посмотреть и шире – в современных системах программирования (например, в компиляторах языка Си) возможность ассемблерных вставок реализуется с помощью оператора asm. Это ничем не отличается от оператора БЭСМ и его прототипа M20-L, которые были придуманы и реализованы задолго до появления аналогичных средств в сегодняшних алгоритмических языках высокого уровня.
Пошаговый компилятор с Бейсика был написан на автокоде БМ-4/220. В НИИ ПМК он эксплуатировался в пакетном режиме [29-31] с вводом исходной Бейсик-программы на перфокартах. При этом пропускная способность на студенческих задачах в 10-15 раз превосходила аналогичные показатели для системы программирования на Фортране (комплекс Ф-20). С небольшими изменениями схемы переключения пользователей и подключением драйверов электрифицированных пишущих машинок типа "Консул-254" компилятор активно использовался в ВЦ ГИФТИ в диалоговом режиме. Позднее шумящие терминалы были заменены на дисплеи типа "Видеотон-340". Преобразование пакетной версии Бейсик-системы в многопультовую систему коллективного пользования выполнили сотрудники ВЦ Д.М. Штейман, Л.Я. Дутышева и В.Г.Манишин. Диалоговый вариант получил название "Студент" [32, 33].
Оба варианта Бейсик системы привлекли широкое внимание со стороны учебных заведений и проектно-конструкторских организаций. Распространялись они на безвозмездной основе и были переданы более чем 150 организациям. Система "Студент" эксплуатировалась в ВЦ ГИФТИ до начала 80-х годов прошлого столетия. После серии публикаций [36-38] была подготовлена первая монография по языку Бейсик на русском языке, которую в 1978 году опубликовало издательство "Финансы и статистика" [39]. Она могла бы появиться много раньше, но рукопись почти два года пролежала без движения в портфеле М.Р.Шуры-Буры, который курировал в этом издательстве раздел программного обеспечения ЭВМ.
Среди других организаций, заинтересовавшихся реализацией Бейсика на отечественных ЭВМ второго поколения, отмечу ВЦ СО АН СССР и Институт математики АН БССР. В Новосибирске группа энтузиастов, возглавляемая П.К.Леоновым и Г.И.Сердюком, в 1972 г разработала проект диалоговой системы BASIC-6, которая должна была функционировать на БЭСМ-6 под управлением ОС ИПМ и обслуживать одновременно до 10 терминалов. Кроме доклада на конференции по "Теории языков и методы построения систем программирования" [34] и более поздней публикации в журнале "Кибернетика" [35] о судьбе системы BASIC-6 ничего не известно. Скорее всего, она была предана забвению, как и многие другие разработки, не доведенные до сколь-нибудь широкого внедрения. Примерно такая же судьба постигла и систему Бэйсик-ГАММА, разработанную в 1974 г для ЭВМ Минск-32.
8. В кильватере IBM/360/370. ЕС ЭВМ и М-4030
Если большинство ЭВМ второго поколения у нас и за рубежом, выпускавшиеся разными производителями, были не совместимы между собой ни по системам команд, ни по периферийному оборудованию, то первый удар по сложившейся ситуации нанесла фирма IBM. В 1966 году она объявила о проекте выпуска серии вычислительных машин разной производительности с моделями, совместимыми от младших к последующим в аппаратных и программных решениях. Первая серия получила название семейства IBM/360, вслед за которым с небольшим интервалом по времени было начато производство более совершенного семейства IBM/370. Ряд менее мощных зарубежных производителей выстроились вслед за IBM и включили в свою программу выпуск ЭВМ со сходной архитектурой (английская ICL, немецкая Siemens). Экономический выигрыш для догоняющих лидирующую корпорацию заключался в возможности использования типового периферийного оборудования и оснащения своих ЭВМ программами, разработанными для IBM/360/370. В тот момент примерно 70% зарубежного рынка ЭВМ был представлено моделями IBM.
Аналогичное решение было принято и в нашей стране. Но с выпуском ЕС ЭВМ мы запоздали примерно на 6-7 лет (первые модели появились в нашей стране в 1972 году). Во-вторых, решение о копировании зарубежных моделей ЭВМ в двух ведущих министерствах (МРП – министерство радиопромышленности и МЭП – министерство электронной промышленности) практически похоронило лучшие отечественные разработки. Конечно, такой политический шаг имел и положительные моменты. Нам удалось (правда, с очень большим запозданием и на довольно устаревшей технологической основе) наладить выпуск электронных компонент (широкую номенклатуру интегральных схем, многослойные печатные платы и др.) и совместимого с зарубежными моделями периферийного оборудования (однако крайне низкого качества). Без приобретения каких-либо лицензий мы раздобыли минимально необходимое программное обеспечение – операционные системы и соответствующий набор компиляторов. Однако, даже сейчас, спустя почти 40 лет, довольно трудно дать взвешенную оценку наших прошлых решений.
На первых порах такая серьезная фирма как IBM не обратила внимания на диалоговые возможности Бейсика. В рамках первых операционных систем MS-DOS преобладал пакетный режим обработки программ пользователей. Поэтому раньше других ЭВМ единой системы Бейсик появился на самой крошечной модели ЕС-1010, выпускавшейся в Венгрии. Но эта модель настолько выходила вон из ряда ЕС ЭВМ, что ни о каком переносе соответствующего Бейсик-интерпретатора речи не было.
8.1. Продолжение Бейсик-эпопеи
А у нас уже был накоплен опыт разработки и эксплуатации пошагового Бейсик-компилятора. И мы решили повторить эксперимент с созданием аналогичной версии, работающей под управлением MS-DOS. На первую версию, создававшуюся на БЭСМ-3М с нуля, мы потратили порядка 5-6 человеко-лет. И у нас уже были наработаны около полусотни ассемблерных макрокоманд, существенно упрощавших написание компилятора. Оставалось только перевести их в код новой ЭВМ и усовершенствовать схему управления. Почти тем же коллективом мы справились с этой работой за полгода и поделились своим опытом на двух Всесоюзных конференциях [40,41]. Я думаю, что мы действовали по той же схеме, что и Дж.Томпсон с Денизом Ритчи, когда они переносили операционную систему Unix с PDP-7 на PDP-11. Первая версия языка Си многим обязана набору макрокоманд, которые были накоплены в Bell Laboratories.
С появлением дисплейных станций типа ЕС-7920 мы перевели пакетную версию в режим диалога, и на протяжении нескольких лет в НИИ ПМК имелась возможность удаленной оперативной работы на Бейсике под управлением MS-DOS.
8.2. Диалог на ФОРТРАНЕ с ЕС ЭВМ
Появление ЕС ЭВМ привело к практически полному отказу от программирования на АЛГОЛ'е, который долгое время оставался "государственным" языком советских программистов. На смену пришел Фортран, язык еще более древний по происхождению, но получивший гораздо более широкое распространение благодаря поддержке со стороны фирмы IBM.
Наш институт довольно активно занимался разработкой программного обеспечения для решения проектно-конструкторских задач на крупнейших в области предприятиях авиационной промышленности. На заводе Гидромаш проектировали и изготавливали шасси для боевых и гражданских самолетов. СКБ "Восход" и Павловский машиностроительный завод были ведущими организациями в стране по проектированию и выпуску узлов гидравлики, использовавшихся на всех изделиях оборонной и космической промышленности. С решением задач, требовавших применения различного рода графопостроителей, мы справились довольно быстро. Помогло то, что еще на машинах типа М-20 мы достаточно хорошо освоили возможности одного из первых графических пакетов ГРАФОР [42]. Поэтому задолго до того, как авторы пакета "вспомнили" о наступлении ЕС ЭВМ, мы с В.С.Максимовым адаптировали этот пакет для Фортрана ЕС ЭВМ [43] и начали применять его не только в НИИ ПМК, но и в сторонних организациях.
Однако при всех преимуществах Фортрана IV, реализованного в составе системного программного обеспечения MS-DOS, в этом языке был существенный минус – он был совсем не приспособлен для организации работы в диалоговом режиме. В нем отсутствовала возможность общения прикладной программы с пультом пользователя. Автоматическое распределение памяти, выполняемое транслятором, лишало пользователя возможности проанализировать значения данных по их естественным обозначениям во время выполнения программы или изменить значения некоторых управляющих параметров. Фортран ЕС не располагал гибкими возможностями для работы с символьными данными, не умел анализировать запросы проектировщика на естественном языке, не мог передать управление пользователю для выбора оптимального продолжения схемы проектирования и т.д.
Для преодоления всех этих препятствий был разработан пакет ДИАФОР (от ДИАлог на ФОРтране) [44-46], который широко использовался для создания ряда подсистем САПР, эксплуатировавшихся в СКБ заводов Горького и Павлово.
9. Второе свидание с БЭСМ-6. "Чертеж"
10. Выход в космос ("Луна")
11. IBM-совместимые персоналки
11.1. Визуализация цифровых карт
11.2. Шаблоны печатных плат
11.3. Смена кресла по основной работе – профессорство
11.4. Переход в следующую весовую категорию
(защита докторской диссертации по совокупности работ)
11.5. Чукча, однако, – писатель. И его сын тоже
11.6. Увлечение MALAB'ом
12. Олимпиады по информатике. Даешь свободное ПО
Литература
- Камынин С.С., Любимский Э.З., Шура-Бура М.Р . Об автоматизации программирования с помощью программирующей программы. // Проблемы кибернетики, вып.1, 1958
- Мартынюк В.В. О методе символических адресов. // Проблемы кибернетики, вып. 6, 1961
- Кетков Ю.Л. Схема сокращенного деления на ЦВМ последовательного действия. // Изв. ВУЗов Радиофизика т.2, N 2, 1959
- Кетков Ю.Л. Прошивка координатной матрицы ЗУ на магнитных сердечниках, работающей по принципу многократного совпадения токов. // Изв.ВУЗов Радиофизика т.4, N 1, 1961
- Кетков Ю.Л. Об одном способе вычисления полиномов на математических машинах. //Изв. ВУЗов. Радиофизика, т.4, № 1, 1958 (дата поступления в редакцию 5.05.1958)
- Белага Э.Г. Некоторые вопросы вычисления многочленов. //ДАН, 123, № 5, 1958 (дата поступления в редакцию 13.06.1958)
- Пан В.Я. Некоторые схемы вычисления многочленов с вещественными коэффициентами. //ДАН, 127. №2, 1959 (дата поступления в редакцию 13.03.1959)
- Белага Э.Г. О вычислении значений многочленов от одного переменного с предварительной обработкой коэффициентов. //Проблемы кибернетики, вып. 5, 1961 (дата поступления в редакцию 30.05.1958)
- Пан В.Я. Некоторые схемы вычисления многочленов с вещественными коэффициентами. //Проблемы кибернетики, вып. 5, 1961 (дата поступления в редакцию 28.11.1958)
- Пан В.Я. Вычисление многочленов по схемам с предварительной обработкой коэффициентов и программа нахождения параметров. //ЖВМ и МФ, 2:1, 1962
- Пан В.Я. О вычислении многочленов пятой и седьмой степени с вещественными коэффициентами. //ЖВМ и МФ, 5:1, 1965
- Пан В.Я. О способах вычисления значений многочленов. //УМН, 21:1, 1966
- Пан В.Я. Об одновременном вычислении значений нескольких многочленов малых степеней (от двух до пяти). //ЖВМ и МФ, 6:2, 1966
- Баталова З.С. Производство операций с плавающей запятой на машине с фиксированной запятой. // Изв. ВУЗов. Радиофизика, т.2, №5, 1959.
- Кетков Ю.Л. Подпрограммы плавающей запятой. // Изв. ВУЗов. Радиофизика, т.3, № 1, 1960
- Поляк Ю.В., Мошетов Р.В. Научные труды РТИ АН СССР, т.1, № 124, 1959.
- И.М. Иванова, Ю.Л. Кетков, Т.С. Ямпольская О существовании кодов Баркера. // Изв. ВУЗов. Радиофизика, т.3, 1960
- Гильман А.М. Проектирование технологических карт механической обработки на электронно-вычислительных машинах. ГОСИНТИ. М., 1959
- Кетков Ю.Л., Жеглова Н.В. Система операций технологической машины. // Труды по вопросам применения электронных вычислительных машин в народном хозяйстве. – Горький, 1964
- Антонова В.М., Баталова З.С., Кетков Ю.Л. Некоторые особенности программирования задачи проектирования технологических карт на машине ТЭВМ. // Там же
- Завьялов Ю.С., Квасов Б.И., Мирошниченко В.Л. Методы сплайн-функций. – М.: Наука, 1980.
- Кетков Ю.Л. Об оптимальных методах кусочно-линейной аппроксимации. // Известия ВУЗов. Радиофизика, т.9, №5, 1966
- Кетков Ю.Л. Автоматизация проектирования поверхностей корпусов судов. // Сб. статей "Автоматизация технологического проектирования при помощи ЭВМ". М.: Машиностроение, 1966
- Кетков Ю.Л. Об оптимальных методах нелинейной аппроксимации плоских кривых и системе автоматизации программирования для обработки геометрической информации. – Автореферат диссертации на соискание ученой степени кандидата физико-математических наук. Горький, 1966. 8 с.
- Кетков Ю.Л. О приближенных методах кусочно-линейной аппроксимации плоских кривых. – В сб. "Ученые записки. Прикладная математика и кибернетика. Труды НИИ ПМК и факультета ВМК ГГУ". – Горький, 1967
- Задыхайло И.Б., Камынин С.С., Кетков Ю.Л., Корягин Д.А., Любимский Э.З., Штаркман В.С. Математическое обеспечение. Операционная система БЭСМ-6. Монитор. Препринт ИПМ АН СССР, М., 1969. 24 с.
- Задыхайло И.Б., Камынин С.С., Кетков Ю.Л., Корягин Д.А., Любимский Э.З., Шура-Бура М.Р., Штаркман В.С. Монитор ОС ИПМ. – Труды ВКП-2, Новосибирск, 1970
- Елтаренко А.Н., Задыхайло И.Б., Зеленина Л.А., Зусман И.Х., Камынин С.С., Кетков Ю.Л, Любимский Э.З., Шелепов Н.А. Управление задачами и процессами в ОС ИПМ. – Труды ВКП-2, Новосибирск, 1970
- Белослудцева М.М., Бочаров В.В., Ильин Э.Н., Кетков Ю.Л., Куракина И.М., Максимов В.С. BASIC-система пакетной обработки задач на ЭВМ типа БЭСМ-4, М-220. Инструкция по эксплуатации (руководство). – Горький, 1971
- Белослудцева М.М., Бочаров В.В., Ильин Э.Н., Кетков Ю.Л., Куракина И.М., Максимов. Использование алгоритмического разговорного языка BASIC на ЭВМ тиа БЭСМ-4. // Труды II Всесоюзной конференции по применению ЭВМ и математических методов планирования и управления предприятиями. Горький, 1971.
- Белослудцева М.М., Бочаров В.В., Ильин Э.Н., Кетков Ю.Л, Куракина И.М., Максимов В.С. BASIC-система пакетной обработки задач на ЭВМ типа БЭСМ-4, М-220, М-222. Учебное пособие. – Горький: изд. ГГУ, 1973. – 192 с
- Дутышева Л.Я., Манишин В.Г., Штейман Д.М. Совместимая система разделения времени "Студент" // УСиМ, 1975, №1.
- Дутышева Л.Я., Кетков Ю.Л., Кузин С.Г. Обучение программированию в СКП "Студент". – В сб. "Машинное обучение с помощью диалога". – Москва: МДНТП, 1976. – с.95-99
- Леонов П.К., Сердюк Г.И. Язык и архитектура системы BASIC-6 // Труды симпозиума. Теория языков и методы построения систем программирования. Киев – Алушта, Институт кибернетики АН СССР, 1972. – с.228-243.
- Головлева Н.В., Леонов П.К., Сердюк Г.И. [и др.] Система BASIC-6 как универсальный диалоговый процессор. // "Кибернетика", 1976, №3, с.29-32
- Кетков Ю.Л., Рябов А.Н. Программирование на БЭЙСИКЕ: Входной язык системы программирования БЭЙСИК-222. Учебное пособие. – Горький, 1977. – 73 с
- Кетков Ю.Л., Максимов В.С., Рябов А Н. Входной язык программирования БЭЙСИК-222. // ГосФАП, рег. номер П003233, 1978
- Кетков Ю.Л., Рябов А.Н. Эффективная система программирования BASIC - 222. //Программирование, 1978, №1.
- Кетков Ю.Л. Программирование на БЭЙСИКЕ. –М.: Статистика, 1978. – 178 с
- Ильин Э.Н., Кетков Ю.Л., Максимов В.С. Опыт разработки системы программирования БЭЙСИК-ЕС. – Всесоюзная конференция "Методы трансляции". Новосибирск, 1981
- Ильин Э.Н., Кетков Ю.Л., Максимов В.С., Максимова Ю.В., Тафорина Н.М. Основные характеристики диалоговой системы программирования БЭЙСИК-ЕС. – 3-я Всесоюзная конференция "ДИАЛОГ-83". Протвино, 1983
- Баяковский Ю.М., Галактионов В.А., Михайлова Т.Н. Графор. Графическое расширение Фортрана. – М.: Наука. Главная редакция физ.-мат. литературы, 1985. – 288 с.
- Максимов В.С. Использование машинной графики в системах проектирования на базе ЕС ЭВМ. Учебное пособие. – Горький: Изд. ГГУ, 1979
- Кетков Ю.Л. Программные средства для организации диалога с прикладной программой под управлением ДОС ЕС. – В сб "Оптимизация и математическое обеспечение САПР". – Горький: изд. ГГУ, 1980
- Кетков Ю.Л. .Пакет программ ДИАФОР для организации диалога под управлением ДОС ЕС. // ГосФАП, рег. номер П005892, 1983
- Зверев В.И., Кетков Ю.Л., Максимов В.С. Алфавитно-цифровые дисплеи ЕС-7920 в диалоговых системах. – М.: Наука, 1986. – 240 с.
- Кетков Ю.Л., Куракина И.М. Программирование на алгоритмических языках БЕЙСИК и ФОРТРАН. Учебное пособие. – Горький: изд. ГГУ, 1983. – 104 с
- Кетков Ю.Л. Графические средства в алгоритмическом языке Бейсик. // Микропрограммные средства и системы, 1988, №1
- Кетков Ю..Л. Три поколения систем программирования на базе языка Бейсик. – Всесоюзная конференция "Методы трансляции и конструирования программ". – Новосибирск, 1988
- Кетков Ю.Л. Размышления о БЕЙСИКЕ (три поколения популярного языка программирования). – В сб. "Математическое моделирование и оптимизация". – Горький: изд. ГГУ, 1990
- Кетков Ю.Л., Максимов В.С. Организация и работа с данными в специализированной САПР. – Всесоюзная конференция "Математическое обеспечение моделирования сложных систем", Киев, 1977
- Ильин Э.Н., Кетков Ю.Л., Максимов В.С., Рябов А.Н. Архитектура системы коллективного пользования на ЕС ЭВМ. – Всесоюзная конференция "Математическое обеспечение моделирования сложных систем", Киев, 1977
- Кетков Ю.Л. Диалог с прикладной программой под управлением ДОС ЕС. – Всесоюзная конференция "Методы мат. логики в проблемах искусственного интеллекта систематического программирования". Паланга, 1980
- Ильин Э.Н., Кетков Ю.Л., Куркина Т.А., Максимов В.С., Тафорина Н.М. Расширение возможностей ФОРТРАНА ЕС ЭВМ для программирования диалоговых сценариев. – там же
- Гордион М.М., Кетков Ю.Л., Куракина И.М., Молоткова Т.Д., Тафорина Н.М. Расширение возможностей ППП ГРАФОР для воспроизведения полигональных линий и надписей. – 1-я Всесоюзная конференция "Методы и средства обработки СГИ". Горький, 1983
- Антипова Р.И., Белова М.Л., Гордион М.М., Ильин Э.Н., Кетков Ю.Л., Куракина И.М., Молоткова Т.Д., Тафорина Н.М. Инструментальная подсистема для вывода картографической информации на ЕС ЭВМ. – там же
- Антипова Р.И., Ильин Э.Н., Кетков Ю.Л., Куракина И.М. Унифицированная схема воспроизведения условных дискретных знаков топографических карт. – там же
- Кетков Ю.Л., Максимов В.С. Макроязык описания графических элементов. – 2-я Всесоюзная конференция "Методы и средства обработки СГИ". Горький, 1985
- Васин Ю.Г., Башкиров О.А., Кетков Ю.Л., Кобрин Р.Ю., Кустов Е.А., Ясаков Ю.В. Автоматизированная система обработки информации морских карт (АСОИМК). – 3-я Всесоюзная конференция "Методы и средства обработки СГИ". Горький, 1988
- Васин Ю.Г., Кетков Ю.Л., Куракина И.М. КАРТ-ДОК - автоматизированная система контроля и издания цифровых топографических карт. –, 2-я Всероссийская конференция "Распознавание образов и анализ изображений: новые информационные технологии", Ульяновск, 1995 (труды конференции, ч.4).
- Антипова Р.И., Ильин Э.Н., Кетков Ю.Л. Оптимизация времени подготовки дисплейных кадров для визуального контроля картографических материалов в системе КАРТ-ДОК. – там же (труды конференции, ч.3)
- Васин Ю.Г., Кетков Ю.Л., Куракина И.М. Технология компьютерной подготовки издательских оригиналов по цифровым моделям карт местности. – там же
- Васин Ю.Г., Кетков Ю.Л., Куракина И.М. КАРТ-ДОК: система визуального контроля, обновления и подготовки к изданию цифровых топографических карт и планов городов. – Всероссийская конференция КОГРАФ-98. – Н.Новгород, 1998
- Кетков Ю.Л., Кирьянов С.К. Оптимизация времени отображения векторных графических изображений большого формата. Труды 11-й международной конференции по компьютерной графике и машинному зрению ГРАФИКОН'2001, Н. Новгород, 2001
- Ketkov, М. Tyulin. Real-time visualization of large vector HP-GL based maps. "Труды 15-й Международной конференции по компьютерной графике и ее приложениям GraphiCon'2005", Новосибирск, июнь 2005 г., Институт вычислительной математики и математической геофизики, 2005. – pp. 316-317
- Кетков Ю.Л., Кузнецов А.И. Создание графических примитивов в формате HP-GL. Там же, – с. 378-381
- Кетков Ю.Л., Максимов В.С. Организация и работа с данными в специализированной САПР. – В сб. "Оптимизация и математическое обеспечение САПР". – Горький: изд. ГГУ, 1978
- Антипова Р.И., Белова М.Л., Гордион М.М., Ильин Э.Н., Кетков Ю.Л., Куракина И.М., Молоткова Т.Д., Тафорина Н.М. Инструментальная подсистема для вывода картографической информации на ЕС ЭВМ. – В сб. "Автоматизация обработки сложной графической информации". – Горький: изд. ГГУ, 1987
- Кетков Ю.Л. Создание инструментальных программных средств для разработки диалоговых систем САПР и АСНИ. – Диссертация на соискание ученой степени доктора технических наук в форме научного доклада, Н.Новгород, 1992
- Кетков Ю.Л. Обработка временных интервалов и календарных дат на IBM PC. // Начертательная геометрия, инженерная и компьютерная графика. Международный межвузовский сб. трудов кафедр графических дисциплин, Н. Новгород, ННГАСУ, вып. 4, 2000. – с. 107-119 (Миф 2000)
- Кетков Ю.Л., Матвеев З.А. Методы повышения эффективности систем воспроизведения картографических документов. // Вестник ННГУ. - изд. ННГУ, № 2, 2008, с. 138-146
- Задыхайло И.Б., Камынин С.С., Кетков Ю.Л., Корягин Д.А., Любимский Э.З., Шура-Бура М.Р. Математическое обеспечение. Операционная система БЭСМ-6 Монитор. Общее описание. – М.: Препринт ИПМ АН СССР, 1968. – 28 с.
- Кетков Ю.Л., Лебедев К.В., Петрова Е.В., Уварова Е.П. Технология визуального программирования в среде Delphi. Учебное пособие. – Н.Новгород: изд. ННГУ, 1997. – 138 с
- Кетков Ю.Л., Максимов В.С., Рябов А.Н. Введение в системное программирование на языке АССЕМБЛЕРА ЕС ЭВМ. – М.: Наука, 1982. – 264 с.
- Кетков Ю.Л. Диалог на языке Бейсик для мини- и микро-ЭВМ. – М.: Наука, 1988. – 368 с.
- Кетков Ю.Л. GW-, Turbo- и Quick-BASIC на IBM PC/XT и AT. – М.: Финансы и статистика, 1992. – 240 с.
- Кетков Ю.Л. Толковый словарь языка программирования БЕЙСИК. – М.: Наука, 1992. – 320 с.
- Кетков Ю.Л., Кетков А.Ю., Шапошников Д.Е. Школьная энциклопедия: Персональный компьютер. – М.: Большая Российская Энциклопедия, изд. Дом Дрофа, Москва, 1997, 1998. – 440 с.
- Кетков Ю.Л., Кетков А.Ю. Практика программирования: Бейсик, Си, Паскаль. Самоучитель. – Санкт-Петербург: БХВ-Петербург, 2001, 2002. – 480 с
- Кетков Ю.Л., Кетков А.Ю. Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель. – Санкт-Петербург: БХВ-Петербург, 2002. – 464 c.
- Кетков Ю.Л., Кетков А.Ю., Шульц М.М. MatLab 6x: программирование численных методов. – Санкт-Петербург: БХВ-Петербург, 2004. – 672 с.
- Кетков Ю.Л., Кетков А.Ю., Шульц М.М. MatLab 7: программирование, численные методы. – Санкт-Петербург: БХВ-Петербург, 2005. – 752 с.
- Кетков Ю.Л. Введение в языки программирования C и C++. Интернет-университет информационных технологий - ИНТУИТ.ру, БИНОМ. Лаборатория знаний, 2006 г., 344 стр.
- Кетков Ю.Л., Кетков А.Ю. Свободное программное обеспечение: Free Pascal для студентов и школьников. – Санкт-Петербург: БХВ-Петербург, 2010. – 384 с.