Еще немного истории — на этот раз копаемся в OS/360

    В продолжение поста о том, как работали программисты в 80-х, вспомнил и решил описать предысторию, идею и реализацию моего первого успешного проекта.

    Итак, дело было году этак в… давно тому назад. Я был студентом 3 курса, и начал работать старшим лаборантом своей кафедры.

    Самое начало


    Вообще программировать я начал на первом курсе. Одним из предметов для первокурсников у нас был Алгол-60, и первое занятие по нему было на первой же неделе. Ну как начал программировать, сначала были лекции, как водится, потом семинары, потом и код начали писать потихоньку. На экскурсию сходили, на саму машину глянули.

    Использовали мы машины М-222. Что это была за машина, можно почитать скажем тут. Понятно что занимала она пару комнат в гермозоне, и пускать туда из пользователей никого не пускали. Чтобы примерно представлять — у этой машины была память 16 килослов (48 битовых), и 27000 операций в секунду.



    Вот она, М-222 (а возможно М-220, они были похожи, и по фото я вообще не отличу, если честно).

    Пара любопытных фактов (тогда я кое-что из этого еще знал): разработчиком первого компилятора Алгола-60 был С. С. Лавров, который в свое время работал начальником отдела баллистики в КБ у Королева. А с другим начальником отдела баллистики Энергии, Р.Ф. Аппазовым, я пересекался позже на кафедре, он сначала преподавал баллистику у нас на потоке, а потом я уже преподавал ее вместе с ним.

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

    То есть, процесс был двухэтапный — перфорация и выполнение.

    Так сложилось, что сдавать и забирать результаты группы ходил один человек, и этим человеком стал я. Если что-то пошло не так, то исправить код и сдать еще раз ты можешь не скоро. Цикл исправления ошибок получался иногда даже двухдневным, ведь расписание наших занятий не всегда укладывалось в расписание приемки задач в ВЦ. Постепенно мы пришли к подходу, когда я самостоятельно исправлял наиболее очевидные проблемы, типа опечаток, или диагностируемых компилятором ошибок, за всю группу. В итоге так втянулся, что с тех пор и продолжаю… :)

    Кстати, подозреваю, что Алгол-60, ставший моим первым изученным языком, в значительной степени определил дальнейшее развитие на какое-то время. Был бы Фортран — было бы хуже. И как я сегодня понимаю, учили нас достаточно хорошо. С одной стороны, сам язык, с другой — основные приемы оптимизации, типа развертывания циклов т.п. Без особой теории, но по времени довольно много, и с самого начала учебы. И в целом язык не прививал никому нехорошие приемы типа goto там и сям, без которых в Фортране на то время было вообще невозможно.

    Фортран, впрочем, тоже не заставил себя ждать. На соседней кафедре организовали курсы по этому языку, и я стал на них ходить.

    В итоге, к середине третьего курса, я дозрел до того, чтобы начать работать на кафедре.

    Задачи для студентов


    Устроился я на свою кафедру 601. Группа, где я работал, занималась разработками в области автоматизации проектирования. А задачи, которые давали мне, были примерно такими: реализация методов численной оптимизации, или расчет оптимальной геометрии сопла, в общем, либо математика разного рода, либо вполне прикладные инженерные задачи, в области, например, баллистики, аэродинамики, прочности, и т.п., все в основе своей — расчетные.

    Окружение


    Мы тогда работали в ОС, которая называется OS/360 MVT, она же ОС ЕС. Базовый язык программирования — FORTRAN-IV. Еще в ОС доступны «из коробки» такие языки, как PL/1, ассемблер S/360, Кобол, и кажется, тот же Алгол-60.

    Примерно к началу моей работы на кафедре к нам в институт стали поступать машины ЕС ряда 1 (аналог S/360, без виртуальной памяти). Чтобы снова понимать масштаб изменений — наша ЕС-1033 имела мегабайт памяти, и производительность 150-200 тыс операций в секунду. И это была на тот момент средняя машина в линейке.

    В комплекте ЕС-1033 были дисплеи ЕС-7066 (а весь комплекс назывался ЕС-7906). Это текстовый дисплей, без возможности отображения какой-либо графики, только текст в формате 80 символов х 12 строк. В сущности, качество изображения было ужасным, оно иногда плавало, только зеленый текст на черном фоне, и вообще — замечательный способ испортить глаза. Но для работы это давало такие преимущества по сравнению с перфокартами, что… в общем, стоило потерпеть.



    Это не наша машина и не наш дисплей. Это кажется фото архив НИИЯИ. И это одна из редчайших фотографий, где реально изображен ЕС-7066. Если спросить у гугля про это устройство, то он вам покажет все что угодно, но только не его.

    Практически сразу мы имели какие-то средства, обеспечивающие редактирование текста/кода, ближайшим аналогом которых можно считать современный текстовый редактор. Немного удивительно, но это никогда не был «штатный» продукт от IBM под названием TSO, а всегда какие-то другие разработки от третьих фирм.

    Машинное время было острым дефицитом. Чтобы понять, насколько, вспомню пару фактов. Мы много лет снимали машинное время в разных ВЦ Москвы, например, ГВЦ Мосэнерго (рядом с Ударником, на Болотном острове), где была ЕС-1033, и было это как правило либо поздно вечером, примерно с 19 до 24, и потом нужно было быстро-быстро бежать на Библиотеку к последнему поезду метро (Боровицкую построили намного позже). А еще среди сотрудников ходила поговорка: «Жене сказал, что пошел к любовнице, любовнице — что остался у жены, а сам на машину, и работать, работать, работать».

    Сверхзадача


    Конечно же, текстовым редактором жизнь не ограничивалась, и очень хотелось создать инструмент, который позволял бы работать из программы на Fortran с дисплеем ЕС-7066, вводить и выводить данные в процессе исполнения своей программы.

    Проблема состояла в следующем:

    • фортран не поддерживал дисплеи (PL/1, на самом деле, тоже)
    • операторы ввода-вывода фортрана оперировали номерами каналов, были стандартные каналы ввода и вывода номер 5 и 6, а также любые другие.
    • соответствие между номерами каналов и файлами (либо устройствами) описывались на языке JCL, в виде операторов DD этого языка.
    • средства форматирования языка (операторы WRITE и FORMAT) позволяли, например, сформировать строку для печати, но не позволяли записать ее куда либо, кроме нумерованного канала, которому в задании соответствовала, например, очередь печати, или файл на диске.

    Вы могли описать для фортрана DD такого вида, который ссылался бы на дисплей (собственно, просто DD UNIT=7066), вот только библиотека фортрана не могла с таким каналом работать. Или немного более техническими словами, библиотека поддерживала только устройства последовательного доступа (методы доступа BSAM/QSAM), или файлы прямого доступа (BDAM, а попросту — диски). А дисплеи — это был метод доступа BGAM (графический).

    Пришлось разбираться в потрохах.

    Как устроена работа с терминалом в OS/360


    В общем-то, как и с другими устройствами. Есть некоторый уровень абстракции, который единообразно описывает работу с разными устройствами и файлами. Его база — это DCB, Data Control Block. В ассемблере это макрос, генерирующий секцию данных. Абстракция разумеется не полная, потому что для разных типов устройств и файлов вам придется указать множество разных, зачастую несовместимых между собой параметров.

    Обычно DCB содержит:

    • символическое имя файла (соответствует названию DD в JCL)
    • метод доступа (последовательный, по индексу, случайный, и другие)
    • физические характеристики (размер блока, логическая длина записи)
    • адреса подпрограмм чтения-записи данных ОС
    • другие данные, нужные этим подпрограммам

    Основной из этих параметров — это метод доступа к данным.

    Немного о потрохах OS/360


    В какой-то момент времени, читая уже не помню какую отечественную книгу по программированию, я наткнулся на описание структур данных OS/360. Если вам интересно, то такие книжки и сегодня доступны, например вот и вот.

    Из описания следовало, что моя программа, следуя по указателям между этими структурами данных, вполне может найти сначала свой TCB (task control block), а через него и открытые DCB.

    Порядок был примерно такой:

    Фиксированный адрес в физической памяти (10 или 4C)-> CVT (communications vector table) -> следующий и текущий TCB (по адресу CVT + 0). Поскольку мы сейчас выполняемся, то текущий TCB — это и есть наш.

    А дальше можно было найти список открытых блоков DCB.

    А блок DCB при этом содержит адреса подпрограмм, которые выполняют операции чтения и записи… и тут меня осенило!

    Сформировалась несложная вроде бы идея:

    • заставить фортран открыть DCB, записав «что-нибудь» в канал («Hello, world», между прочим, тогда не было такой уж популярной фразой).
    • найти этот DCB и модифицировать указатель на подпрограммы ввода и вывода, заменив их своими
    • завести свой, теневой DCB, с методом доступа BGAM, чтобы работать с дисплеем, а также некоторые свои рабочие структуры данных типа буфера экрана
    • в результате, то что пишется в канал, передается нашему обработчику, и попадает на экран дисплея.
    • Профит!

    Как говорится, дальше оставалось сесть да закодировать. Правда, сначала пришлось немного научиться читать дампы, чтобы посмотреть, как это все выглядит живьем, и например, что и как передается в качестве параметров обработчику операции в DCB, чтобы написать свой.

    Понятно, что было еще множество нерешенных вопросов, например, как обрабатывать прерывания от терминала, которые приходили по нажатию клавиши Enter. Или как управлять курсором. Все эти вещи не подразумевались, когда проектировались средства ввода-вывода Фортрана.

    В общем, все вопросы удалось решить достаточно несложно, и оформить в виде нескольких процедур, вызываемых из Фортрана с параметром номера канала. С прерываниями было чуть посложнее, глобально эта задача была не решаемой, так как асинхронный обработчик на Фортране написать было нельзя по чисто техническим причинам (обработчик должен быть быть «реентерабельным», т.е. допускать повторный вход в секцию кода, но сделать это на Фортране нельзя, так как некоторые области создавались статически), но в тоже время, многозадачность или параллелизм все равно Фортраном не поддерживался, так что делать что-либо полезное в тот момент, когда мы ждем ответа от пользователя все равно было нельзя. Кроме того, нажание на Enter блокировало клавиатуру, так что и повторных прерываний можно было особо не опасаться.

    Итоги первого проекта


    В общем, проект получился удачным. Мы сделали его за время написания диплома на пару с моим однокурсником Игорем Глинкой, а потом я достаточно долго его еще дорабатывал и развивал.

    А одним из первых применений (не считая моего диплома) была программа для расчета траекторий выведения в курсе баллистики, который и я вел чуть позже вместе с Р.Ф. Аппазовым.

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

    И что еще интересно — сама идея проксирования ввода-вывода оказалась плодотворнее, чем данный проект. Скажем, вы могли в фортране включить отладочную печать, и получать на принтер все изменения переменных в программе. Но это выводилось в одну колонку, и жрало кучу бумаги, да еще совершенно невозможно было рыться в этих километрах. В итоге двое наших тогда еще студентов, Виталий Ладыгин и Дмитрий Мостовой, написали на базе той же идеи программу, которая буферизовала вывод отладчика, и выводила строки только тогда, когда они заполнялись процентов на 90.

    Комментарии 37

      0
      SYSIN DD
        0
        //
          0
          Ну, не совсем :) Скорее уж так:

          //FT06F001 DD SYSOUT=A
            0
            Да я напечатал как тест… Сколько нас ещё осталось?
              0
              Таких, которые это помнят? Знаете, самое странное, что сравнительно недавно я пытался вспомнить ассемблер S/360, и в общем-то, пожалуй смогу что-то написать. А вот найти что-то на подобную тему в гугле, например… ну про то как искать в гугле фото ЕС-7066, я выше написал. Попадается что угодно, наиболее типовое — фото ДВК-2.
                0
                Есть такие фото… Правда это не только клавиатура, но и дисплей, качество фото не фонтан. А сам векторный дисплей был нечто. Пляшущие буковки…
                  0
                  так у меня в статье оно же… это единственное приличное, что я нашел
                    0
                    Н-да… Аналогично.
                0

                Job exec dd
                Лежит где-то в закоулках памяти...

                  0
                  Вот-вот. Интересно, и нафига бы ему там валяться? :)
                    0
                    Увидел в предыдущих комментариях отрывки оформления задания и потихоньку вспоминается всё остальное. Пожалуй, смог бы и сейчас колоду перфокарт сформировать на выполнение. А вот прочитать, а тем более, подредактировать перфокарту бритвой и высечкой, уже не смог бы.
                    Это же целый жизненный пласт, его никуда не денешь.
                      0
                      >подредактировать перфокарту бритвой и высечкой
                      Да ладно, этож несложно. Вспомнить кодировку конечно сложнее…

                      P.S. У нас народ ухитрялся читать перфокарты для М-222, которые кодировались построчно, а не поколоночно, как у S/360. В бинарном режиме — а потом перекодировали. Таким образом переносили программы на Алголе.
                  +1

                  Статью прочел, и воспоминания нахлынули. Сначала ес 1033, пакетный режим с колодами перфокарт. Потом текстовые редакторы JEC, Primus, Focus с черно- зелеными мониторами… ес 7906, позже — машина ес 1045 с дисплеями ес 7920.
                  Дисководы 5061 и 5066 с дисками на 30 и на 100.
                  И ничего, на них и учились и работали.

                    0
                    Угу. Именно фокус у нас и был одно время. Потом Jetty, потом уже VM/SP появились и XEDIT.
                      0

                      Будете смеяться, тем самым Xedit-ом до сих пор периодически пользуюсь. Точнее, его windows клоном под названием KEdit. Удобная штука, чего уж там. Жалко, с unicode не хочет работать.

                        0
                        Смеяться? Не, не буду. Именно xedit был в моей практике первым редактором, который полноценно программировался на REXX. От и до. Т.е. можно было сделать все, вообще все, включая построение IDE на его базе. Ну, по крайней мере — гипотетически.
                      0
                      Примус, говоришь?

                      Напрасно ты винишь в непостоянстве рок,
                      Что невнакладе ты. Глупец! Тебе и невдомёк,
                      Когда б он в милостях своих был постоянен,
                      Ты б очереди ждать своей до смерти мог!
                        0
                        Вот зал, в котором работает JEC.

                        А это — смешной нецветной телевизор,
                        который является главным призом
                        в зале, в котором работает JEC.

                        А это — парень, веселый, пригожий
                        Который буквально лезет из кожи
                        Чтобы засесть за тот телевизор
                        который является главным призом
                        в зале, в котором работает JEC.

                        А это — серьезная, строгая дама,
                        которая хочет отладить программу,
                        которая видеть спокойно не может
                        Парня, который лезет из кожи
                        Чтобы засесть за тот телевизор
                        который является главным призом
                        в зале, в котором работает JEC.

                        Там еще что-то было в том же духе. Но за давностью лет уже не помню.

                          0
                          :) Этого не застал. А Хаяма приходилось учить при каждой перезагрузке Примуса.
                            0
                            Была еще история про VM/370, как там что-то в пещере типа призрака водится. И еще про «в ушах шумит, в глазах темно, но байт за байтом все равно ползет сисабенд дамп», думаю тут кто-то еще помнит, что это такое…
                        0
                        Потомки OS/360 все еще живы (z/OS) и используются на мейнфреймах IBM. В одной большой госкомпании приходилось очень плотно работать с JCL.
                        На виртуальных терминалах по умолчанию так и используется зеленый шрифт на черном фоне 24х80 символов. Да и физические терминалы лет 10 назад еще были с не-qwerty клавиатурой и двумя рядами кнопок F1-F24
                          0
                          Знаете, что mainframe живы — меня не удивляет. А вот что жив JCL — скорее да. Уж больно он ограниченный по сегодняшним временам.
                            0
                            Может быть на мейнфреймах IBM сейчас и можно как то работать не через JCL (ну как минимум есть вариант поднять UNIX), но мне приходилось писать и менять JCL-текстовики для всего. Поднять репликацию из БД в БД, запустить программу на Си, запустить запрос SQL, даже скомпилировать исходник программы (потом смотреть ошибку в выходной очереди).
                            Застал даже дремучее легаси с ЭВМ ЕС 80-х и 90-х и оно до недавнего времени успешно работало в проде. Так что да, JCL все еще жив.
                              0
                              >как то работать не через JCL
                              Можно. В предыдущем посте про VM/SP писали, что она еще тоже жива.

                              То и странно, что одновременно живет VM/*, где все тоже самое можно из REXX, и Unix, где все тоже самое можно из шелла, и все это намного удобнее. И такой старый и неудобный JCL при этом существует, по факту не имеющий никаких преимуществ.
                          0
                          есть немного. Делал редактор на консольной пишмашке, через MasterScheduler. Пользовались, хотя уж что-что ломало глаза, так это она, а не дисплеи.
                            0
                            DISP=(NEW,,DELETE)
                        0
                        7066 был, как ни странно, графическим дисплеем. Потому и метод работы с ним был BGAM.
                        Буквы рисовались лучом на экране, как на осциллографе.
                        Из забавного — буферы дисплеев располагались в стойке управления (до 6, что ли, дисплеев подключалось, не помню). Адрес дисплея набирался на самом дисплее, так что с одного устройства можно было подключиться к любому буферу, а можно было и с нескольких дисплеев к одному (и клавиатуры тоже начинали одновременно вводить в один буфер).
                          0
                          По-моему это скорее стоит называть векторный. Но рисовать векторами он умел только буквы.

                          Никакой графики в методе доступа там не было. Ну т.е. вы что-то там пишете в буфер, читаете из буфера (клавиатура вводит в буфер, прерывания только по Enter или PFn), обрабатываете прерывания. Читать можно было двумя способами — весь буфер целиком, или текст от символа > (треугольник) до курсора.

                          Даже если дисплей при этом картинки нарисует — это где-то за пределами BGAM было, насколько я помню.
                            0
                            По-моему это скорее стоит называть векторный.
                            Назывался, тем не менее, «графический». А «алфавитно-цифровым» назывался растровый 7927.
                            Но рисовать векторами он умел только буквы.
                            да
                            Никакой графики в методе доступа там не было.
                            да
                            это где-то за пределами BGAM было
                            да :-)

                            И, кстати, какую-то информацию найти можно:
                            mash-xxl.info/info/280224
                            Например, комплекс ЕС-7906 объединяет до 16 дисплеев ЕС-7066, устройство группового управления ЕС-7566 и печатающую машинку ЕС-7172. Дисплеи могут быть удалены от устройства управления на расстояния до 300 м. Дисплейный комплекс через мультиплексный канал подключается к ЭВМ. Кроме дисплея ЕС-7066, в ЕС ЭВМ используются дисплеи ЕС-7061, ЕС-7063, а также дисплейная станция ЕС-7920. Алфавитно-цифровые дисплеи поставляются обычно в комплекте с ЕС ЭВМ и хорошо изучены пользователями. Подробное описание графических диалоговых дисплеев будет дано позже.  [c.26]
                            Вот 7920/7927 были растровыми. И метод доступа к ним был другой.
                              0
                              Информацию-то найти можно, а попробуйте найти нормальную картинку? Я нашел всего две, на второй два дисплея повернутые задом, с трудом опознаются где-то вдалеке от нас в машзале.

                              >управления на расстояния до 300 м.
                              Да-да. Коаксиалом. Как щас помню, у нас на кафедре стояло штук 8, и толстенный пучок этих коаксиальных кабелей лежал закопанный себе спокойно, до тех пор, пока строители 24 корпуса не решили зимой погреть грунт рядом, чтобы вырыть яму. С ямой-то они промахнулись, а вот их костер нам все кабели попортил. В итоге пришлось зимой же в мороз рыть новую яму, по более прямому маршруту, укоротив все кабели. А еще там же рядом лежал толстенный бронированный кабель от канала к принтеру и читалке перфокарт. Его тоже попортили.
                                0
                                Я нашел всего две, на второй два дисплея повернутые задом, с трудом опознаются где-то вдалеке от нас в машзале.
                                Сдаётся мне, лучше искать не 7066, а 7906. Но тоже мало, что находится, верно.
                          0
                          а ещё на этих дисплеях было световое перо и некоторые редакторы даже умели с ним работать.
                            0
                            Насколько я помню — на этих не было. Вы путате с ЕС-7927 скорее всего. Или с еще более поздними.
                            0
                            а кто-нибудь помнит текстовые редакторы ОКО и Конкорд? они у нас до Примуса были. Примус потом всех победил.
                              0
                              Насчет примус всех победил — это громко. У нас его вообще не было (а это примерно с десяток машин, и десяток же тысяч пользователей, не меньше). ОКО да. Пользовались.
                              0
                              Примерно к началу моей работы на кафедре к нам в институт стали поступать машины ЕС

                              в каком году это было?
                                0
                                ЕС-1033 — усовершенствованный вариант модели ЕС-1030. Разрабатывалась под руководством В. Ф. Гусева в Казани. Разработка завершена в 1976 году.


                                Ну вот и прикиньте. Где-то до 80-го наверное и поступали 1033, параллельно с ними — 1045 в некотором количестве, потом пошли более новые, ЕС-1061, ЕС-1046, потом ЕС-1066.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое