Разработка диалоговых систем программирования в Нижегородском университете

Разработка диалоговых систем программирования в Нижегородском университете

История создания диалоговых систем программирования в Нижегородском университете началась после почти полуторагодичной командировки автора статьи в конце 1967 г. Тогда Институт Прикладной Математики АН СССР (сейчас – ИПМ РАН им. акад. М.В. Келдыша), в соответствии с постановлением директивных органов, собирал профессиональную команду программистов для создания современной операционной системы ЭВМ БЭСМ-6 – флагмана нашей вычислительной техники. В рамках этого постановления ИПМ планировал разработать и серию трансляторов с наиболее распространенных языков программирования. В составе команды были ведущие программисты наиболее крупных вычислительных центров страны и лучшие программистские кадры отдела ИПМ, возглавляемого лауреатом Государственной премии профессором М.Р. Шура-Бурой.

В рамках новой ОС БЭСМ-6 (она получила название ОС ИПМ) мне была поручена разработка одной из наиболее важных компонент системы – монитора, отвечавшего за распределение ресурсов, управление задачами и параллельными процессами, организацию очередей на выполнение внешних и внутренних запросов многочисленных исполнителей. Единственным доступным инструментом разработки был ассемблер БЕМШ, оперативно созданный под руководством В.С. Штаркмана. Однако для разработки и отладки довольно сложных и объемных программ в коде машины ничего другого, кроме запусков заданий в пакетном режиме у программистов не было. Отсутствие диалогового общения с ЭВМ сильно затягивало сроки разработки системного ПО. Поэтому нам пришлось по ходу дела познакомиться с первыми зарубежными подходами к созданию диалоговых алгоритмических языков и соответствующих систем программирования. Конечно, это были еще не промышленные средства для профессиональных разработок, а только некоторые расширения состава операторов того или иного языка для обеспечения удобства пользователей, тяготившихся общепринятым режимом пакетной обработки заданий. На один из рабочих семинаров в ИПМ был приглашен ведущий сотрудник ВЦ АН СССР В.М.Курочкин, один из когорты первых программистов. Он познакомил нас с языком JOSS и выполненной на его базе системой разделения времени. Второй диалоговой системой оказалась реализация на ЭВМ GE400 системы программирования на базе языка Бейсик. Источником для знакомства с ней послужило руководство пользователя, описывающего состав операторов языка программирования и нескольких директив по организации прохождения задач. Вторая система произвела на меня большее впечатление.

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

В качестве устройства общения пользователя с системой в первом варианте использовалась консоль оператора – электрифицированная пишущая машинка чешского производства «Консул-254». Довольно скоро ее заменила аналогичная машинка, работавшая параллельно с консолью (чтобы не совмещать на одном устройстве рабочие места оператора ЭВМ и пользователя Бейсик-системы). К 1971 г. шумящий терминал заменили на дисплей типа «Видеотон-340», а к 1973 г. количество дисплейных терминалов в системе «Студент» было доведено до 10. В их составе были апробированы профессиональные дисплейные станции ЕС-7920. Заметный вклад в программное обеспечение, управляющее параллельным обслуживанием всех терминалов, внесли сотрудники вычислительного центра ГИФТИ Д.М. Штейман, Л.Я. Дутышева и В.Г. Манишин.

Несмотря на то, что первая версия Бейсик-системы обеспечивала режим пакетной обработки задач, ее целью была работа в режиме реального времени, позволявшая отреагировать на любые задания 8–10 пользователей с задержкой не более 1–1.5 секунд. Это означало, что время приема и обработки очередного оператора, поступившего с любого пользовательского терминала, не должно было превышать 0.15 сек. В состав этого кванта времени входили и затраты на переключение на задачу активизируемого пользователя. Точно такой же квант времени выделялся на выполнение очередного оператора в программе задачи, готовой к исполнению. За счет чего на весьма тихоходной ЭВМ типа М-20 (скорость работы соответствующих моделей варьировалась от 20 до 27 тыс. оп/сек) удалось достичь такой оперативности?

Во-первых, за счет рационального использования оперативной памяти. Программе каждого пользователя выделялось «виртуальное пространство» емкостью в 4096 45-разрядных ячеек (в терминах М-20 – «куб памяти»). Полупроводниковые модели обычно комплектовались двумя кубами оперативной памяти. При этом куб с номером 1 занимала Бейсик-система, а куб с номером 0 занимала бинарная псевдопрограмма пользователя вместе со всеми данными задачи (массивами, скалярными числовыми и строковыми переменными, константами) и различными управляющими таблицами, которые были необходимы для пооператорной интерпретации псевдопрограммы. Текст исходной Бейсик-программы каждого пользователя выносился на магнитный барабан с целью экономии места в оперативной памяти задачи.

Во-вторых, нужно было свести к минимуму время переключения с одной выполняющейся задачи на другую. На ЭВМ типа М-222, полная комплектация которых могла включать 8 кубов оперативной памяти, каждая из готовых к исполнению рабочих псевдопрограмм могла не изгоняться на внешнее запоминающее устройство (МБ – магнитный барабан) и постоянно находиться в оперативной памяти (МОЗУ). С целью сокращения времени переключения на обслуживание очередного пользователя был определен минимальный квант работы, которую следовало выполнить для предшествующего терминала (все пользователи обладали равными правами и обслуживались по кругу).

Минимальный квант работы определялся состоянием очередной Бейсик-программы. В начальный момент времени все терминалы переводились в режим «редактирования», во время которого пользователь мог набирать очередную строку своей программы или вызвать ранее запомненный текст из архива задач. В первом случае набираемый текст накапливался в буфере терминала, и пользователю выделялся минимальный квант для синтаксического анализа введенной строки и ее преобразования в эквивалентный код псевдопрограммы только после нажатия клавиши, завершающей набор строки. Так как в Бейсик-программе почти все строки являются автономными (кроме пар FOR – NEXT и DATA – READ), то синтаксический анализ ограничивался разбором только введенной строки, и на это вполне хватало порядка 10–15 тыс. машинных тактов. Анализ парных операторов переносился на фазу выполнения псевдопрограммы. Если синтаксический анализатор обнаруживал ошибку, то на соответствующий терминал выдавалось сообщение и выполнялся переход на обслуживание очередного пользователя.

Фаза «редактирования» заканчивалась в момент приема от пользователя команды на выполнение (директива RUN), после чего минимальным квантом на следующем круге становилось время выполнения начальной или очередной строки псевдопрограммы. В отведенное время (0.15 сек.) укладывались практически все операторы Бейсика. Единственное отклонение могла вызвать работа сложной подпрограммы из библиотеки ИС-2 (например, решение системы линейных алгебраических уравнений высокого порядка). Но на такие жертвы мы шли сознательно, считая, что подобные ситуации возникают крайне редко, т.к. использование оператора БЭСМ предполагало некоторые знания в области программирования на автокоде. Да и одновременное обращение двух или более пользователей к достаточно длинным процедурам представлялось маловероятным.

С целью минимизации времени переключения с задачи на задачу мы уделяли особое значение созданию повторно входимых (реентерабельных) программ в собственно Бейсик-системе и сокращению объема данных о задаче пользователя, загружаемых в систему перед выполнением очередного минимального кванта работы. Важную роль в соблюдении указанных критериев сыграло размещение почти всех управляющих таблиц, используемых при интерпретации псевдопрограммы, в тот же куб памяти, где в данный момент находилась и сама псевдопрограмма. При своппинге задач, ожидавших очередной обработки, их куб памяти переписывался на МБ вместе со всеми управляющими таблицами. Если две задачи одновременно находились в кубах МОЗУ, то переключение с одной задачи на другую сводилось к переключению нескольких указателей системы на управляющие таблицы очередника. В противном случае предшествующую задачу вместе с ее управляющими таблицами приходилось переписывать на МБ, а на ее место загружать новую задачу. В этом случае менять содержимое указателей на управляющие таблицы уже было не нужно, т.к. расположение таблиц во всех кубах было стандартным. Архитектура М-222, оснащенной 8-ю кубами оперативной памяти, позволяла обходиться, практически, без своппинга.

Вместо термина «исполняемая программа», которую обычно формирует компилятор алгоритмического языка, мы до сих пор использовали термин «псевдопрограмма» и ее «интерпретация». Псевдопрограмма составлялась на стадии компиляции операторов исходной Бейсик-программы и имела блочную структуру. Каждому оператору задачи соответствовал блок машинных команд в псевдопрограмме, а его интерпретация сводилась к автоматическому выполнению команд блока под управлением монитора Бейсик-системы. Таким образом, завершение работы очередного оператора исходной программы, переход к следующей строке программы или переход на строку с указанным номером контролировались монитором. Тем самым фиксировались моменты, когда исполнение текущей Бейсик-программы могло быть прервано. Важная роль в этом мониторинге принадлежала управляющей таблице операторов, содержащей 300 строк со следующей информацией:

7

14

12

12

П

N

АМОЗУ

АМЗУ

Здесь П – поле признаков
(1 в 45-м разряде: оператор исполняемый,
1 в 44-м разряде: оператор DATA,
1 в 43-м разряде: оператор END
42 – 40 разряды: признаки настройки адресов оператора БЭСМ

N – номер оператора,

АМОЗУ – адрес входа в блок псевдопрограммы,

АМЗУ – адрес начала текста исходной программы на МБ.

Таблица операторов формировалась в режиме редактирования, ее строки заполнялись в порядке поступления строк исходной программы с терминала, а после завершения ввода упорядочивались по возрастанию номеров. Если в исходной программе оказалось два или более операторов с одинаковыми номерами, то строка, поступившая последней, затирала все предыдущие. Дубль таблицы операторов вместе с текстами строк исходной программы запоминался на МБ. В дальнейшем это позволяло сообщить пользователю все данные об обнаруженной ошибке и произвести нужные исправления.

Ограничение на длину исходной Бейсик-программы, налагаемое таблицей операторов (не более 300 строк, т.е. не более 6 страниц машинописного текста формата А4), не слишком серьезная помеха для разработки программ на стадии первоначального обучения. Выбор цифры 300 объяснялся еще и следующей технической деталью. Для обеспечения пакетного режима первые Бейсик-программы вводились с перфокарт. А объем оперативной памяти (4096 слов) заполнялся до предела содержимым 341 перфокарты. В первой версии Бейсик-системы были предусмотрены и другие ограничения, несколько сужающие область программирования прикладных задач. Например, программа могла использовать не более 286 идентификаторов скалярных переменных, обозначаемых буквой или буквой с цифрой. Длина имени массива (одномерного или двумерного) ограничивалась одной буквой, т.е. программа могла использовать не более 26 массивов.

Конечно, с позиций сегодняшнего дня возможности того первого в стране диалогового терминал-класса могут показаться смешными. Но не надо забывать, что на наших ЭВМ в то время активно использовались трансляторы только с полного (ТА-2) или урезанного Алгола (ТА-1), еще только начинал внедряться транслятор с Фортрана (Ф-20). И все они эксплуатировались в пакетном режиме, т.е. на обнаружение одной-двух первых ошибок на стадии отладки уходили сутки. Да и время прохождения задачи через ту или иную систему программирования исчислялось десятками минут. А в диалоговой системе программирования за один проход можно было выловить почти все синтаксические ошибки. И вместо месяца пребывания в бесконечных пакетных очередях справиться с простым студенческим заданием за два-три сеанса работы за терминалом. Статистика за два семестра одного учебного года (1975/76) показала следующее. В первом семестре терминал-класс обеспечивал занятия 24 академических групп (~ 550 первокурсников). За 1300 сеансов было отлажено порядка 1200 задач. Во втором семестре через терминал-класс прошли уже 30 академических групп (~ 700 студентов). За 1000 сеансов было отлажено порядка 1500 задач. Процессорное время, затраченное на набор и отладку программ, составило всего 40 часов машинного времени М-222. Эти цифры не идут ни в какое сравнение с производительностью пакетного режима обработки заданий.

Наши системы не были в прямом смысле интерпретаторами языка Бейсик, как первые, да и не только первые зарубежные Бейсик-системы. Visual Basic, появившийся на IBM совместимых ПК в 1991 году до версии 4.0 был полным интерпретатором, замедлявшим работу исполняемых программ в 20–30 раз.

В разработанных версиях Бейсик-систем с самого начала была включена возможность программирования в терминах, близких к автокоду ЭВМ типа М-20. Это обеспечивало использование любой стандартной программы из библиотеки ИС-2 (ИС-22). Общий объем диалоговой системы не превышал 12000 45-разрядных слов (т.е. порядка 60 Кб в современном исчислении). На ее создание мы потратили порядка 5–6 человеко-лет. При тиражировании последующих версий даже на ЭВМ с другой архитектурой (например, ЕС ЭВМ) затраты снизились почти вдвое. Сказались приобретенный опыт, отработанные схемы анализа и реализации операторов Бейсика и, главным образом, накопленная библиотека соответствующих макроопределений на языке ассемблера. Переписать ее из кода М-20 в код ЕС ЭВМ оказалось не так уж и сложно.

На ежегодных конференциях пользователей ЭВМ типа М-20 (комиссия КЭВМ возглавлялась М. Р. Шура-Бурой) сообщения об очередной версии Бейсик-системы вызывали неизменный интерес и приводили к регулярному появлению новых пользователей. В те времена распространение оригинального ПО производилось на безвозмездной основе. В списке заявок на получение и установку диалоговых систем программирования, разработанных в НИИ ПМК, фигурирует более 100 проектных организаций и вузов нашей страны. В Нижегородском университете Бейсик-система функционировала около 10 лет до тех пор, пока не началось увлечение персональными компьютерами.

Первое самиздатовское руководство по Бейсик-системе появилось в НИИ ПМК в 1971 г. В ближайшие пару лет были представлены ряд сообщений о системе на Всесоюзных конференциях и Международном конгрессе болгарских математиков. Первая публикация о Бейсике на русском языке в центральных издательствах состоялась с двухлетним опозданием в 1978 г. Автору статьи принадлежит, наверное, самая большая коллекция книг по Бейсику в нашей стране.

Список литературы

  1. Белослудцева М.М., Бочаров В.В., Ильин Э.Н. и др. BASIC-система пакетной обработки задач на ЭВМ типа БЭСМ-4, М-220 (инструкция по эксплуатации), Горький, НИИ ПМК, 1971
  2. Белослудцева М.М., Бочаров В.В., Ильин Э.Н. и др. Использование алгоритмического разговорного языка BASIC на ЭВМ типа БЭСМ-4. // Труды II Всесоюзной конференции по применению ЭВМ и математических методов в планировании и управлении предприятием. Горький, октябрь, 1971
  3. Белослудцева М.М., Бочаров В.В., Ильин Э.Н. и др. Использование алгоритмического разговорного языка BASIC на ЭВМ типа БЭСМ-4, М-220Б М-222. // Труды симпозиума «Теория языков и методы построения систем программирования». Киев-Алушта, 1972
  4. Кетков Ю.Л. BASIC-система пакетной обработки задач на ЭВМ типа БЭСМ-4, М-220. // Трети конгрес на българските математици. Варна, 6-15 септември, 1972
  5. Белослудцева М.М., Бочаров В.В., Ильин Э.Н. и др. BASIC-система пакетной обработки задач на ЭВМ типа БЭСМ-4М, М-220, М-222.Учебное пособие (под ред. Ю.Л.Кеткова). Горький, 1973. 193 с.
  6. Дутышева Л.Я., Манишин В.Г., Штейман Д.М. Совместимая система разделения времени «Студент». // Управляющие системы и машины, 1975, №1
  7. Дутышева Л.Я., Кетков Ю.Л., Кузин С.Г. Обучение программированию в системе коллективного пользования «Студент». // В сб. Машинное обучение с помощью диалога. М., Материалы семинара общества «Знание», 1976. с. 95-98
  8. Кетков Ю.Л., Рябов А.Н. Программирование на БЭЙСИКЕ (Входной язык системы программирования Бейсик-222). Учебное пособие. Горький, 1977. 73 с.
  9. Кетков Ю.Л. Программирование на Бэйсике. М.: Статистика, 1978. 158 с.
  10. Кетков Ю.Л., Максимов В.С., Рябов А.Н. Введение в системное программирование на языке Ассемблера ЕС ЭВМ. М.: «Наука», Гл. ред. физ.-матлит., 1982. 264 с.
  11. Кетков Ю.Л., Куракина И.М. Программирование на алгоритмических языках Бейсик и Фортран. Горький: изд. ГГУ, 1983. 104 с.
  12. Зверев В.И., Кетков Ю.Л., Максимов В.С. Алфавитно-цифровые дисплеи ЕС-7920 в диалоговых системах. М.: «Наука», Гл. ред. физ.-мат. лит., 1986. 238 с.
  13. Кетков Ю.Л., Куракина И.М. Программирование на алгоритмических языках Бейсик и Фортран. Горький: изд. ГГУ, 1986. 135 с.
  14. Кетков Ю.Л. Диалог на языке Бейсик для минии микро-ЭВМ. М.: «Наука», Гл. ред. физ.-мат. лит. 1988. 368 с.
  15. Кетков Ю.Л. Толковый словарь языка программирования Бейсик. М.: «Наука», Гл. ред. физ.-мат. лит. 1992. 320 с.
  16. Кетков Ю.Л. GW-, Turboи Quick-BASIC на IBM PC/XT и AT. М.: Финансы и статистика,1992.240 с.
  17. Кетков Ю.Л., Кетков А.Ю., Шапошников Д.Е. Школьная энциклопедия: Персональный компьютер. М.: Большая Российская Энциклопедия, изд. Дом Дрофа, Москва, 1997, 1998. 440 с.
  18. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Бейсик, Си, Паскаль. Самоучитель. Санкт-Петербург: БХВ-Петербург, 2001, 2002. 480 с.
  19. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель. Санкт-Петербург: БХВ-Петербург, 2002. 464 c.

Об авторе: Нижегородский государственный университет им. Н.И. Лобачевского
Нижний Новгород, Россия
Материалы международной конференции Sorucom 2014 (13-17 октября 2014)
Помещена в музей с разрешения авторов 20 марта 2015