oktober 2021

Ik ontwikkel Algol 68 Genie voornamelijk op Debian. Om releases te testen, heb ik een "dierentuin" met besturingssystemen zoals FreeBSD, OpenBSD en Raspberry Pi OS, geïnstalleerd op virtuele machines die op Debian draaien. Virtualisatie begon een halve eeuw geleden als een methode om mainframe-resources te delen tussen verschillende besturingssystemen, applicaties of gebruikers.

Een bekend voorbeeld was VM/370, dat was afgeleid van CP/CMS uit de jaren zestig. Het concept was elegant: een mainframe is een dure resource, dus om ruimte te bieden aan verschillende besturingssystemen of veel gebruikers of servers, wordt de fysieke machine gevirtualiseerd zodat deze zich voordoet als vele afzonderlijke machines. Virtualisatie werkt efficiënt wanneer een computer zichzelf emuleert, en dat is precies wat VM/370 deed - vele virtuele IBM 370’s draaien op één fysieke IBM 370. Voor timesharing-gebruikers werd VM geleverd met het Conversational Monitor System CMS, een kleine maar robuuste shell voor één gebruiker. Het was het systeem waarmee ik werkte toen ik student was, en ik heb er goede herinneringen aan. Het behoeft geen betoog dat de erfenis van de VM/370 tot op de dag van vandaag voortleeft in z/VM, zoals MVS voortleeft in z/OS.

Wat is de status van deze verouderde besturingssystemen? De voorloper van MVS, MVT bevindt zich in het publieke domein. VM-releases tot en met VM/370 Release 6 waren open-source en worden nu ook beschouwd als behorend tot het publieke domein. Aangezien MVS 3.8 rechtstreeks bij IBM kon worden besteld als een free of charge product, hebben verschillende Hercules gebruikers MVS 3.8J via IBM verkregen en stelden niet alleen de distributietapes beschikbaar, maar zelfs kant-en-klare systemen zoals TK4- voor gebruik met Hercules.

Ik heb al enkele jaren MVS met ALGOL68C op een "hobby-mainframe" voor persoonlijk gebruik, als referentie voor Algol 68 Genie. Naast MVS is er gewerkt aan het opnieuw leven inblazen van VM/370 Release 6, en in de loop der tijd zijn er verschillende implementaties gekomen en gegaan. Aanvankelijk bouwde ik een VM-emulatie op basis van de handige vm6pext-release van professor René Ferland. De enige gast was MVS, die ik baseerde op een versie die afstamt van TK4-, maar door Bob Polmanter was aangepast om goed te werken op VM, bijvoorbeeld door de uitvoer van een job te spoolen naar de CMS-gebruiker die de job had ingepland.

Deels heb ik een VM-emulatie opgezet, puur om het genoegen te ervaren een gepriviligeerde gebruiker te zijn - zij het een eenzame gebruiker - op VM, iets wat in de jaren tachtig op de echte hardware natuurlijk ondenkbaar was. Hieronder zie je het VM-inlogscherm zoals weergegeven op CRT (Cool-Retro-Terminal), een terminalemulator die vintage beeldbuisschermen nabootst. Dit beeld brengt me terug naar de terminalruimte van het academisch computercentrum in Nijmegen in de jaren tachtig.

Marcel van der Veer

Mijn belangrijkste onderzoeksonderwerp in de jaren tachtig betrof computationele chemie. De meeste code die ik in Nijmegen schreef, was in nu verouderd maar destijds modern Fortran 77 op VM/370 en later VM/SP. Een tijdlang behoorde ik tot de zware gebruikers van het computercentrum van de universiteit, wat ik best wel cool vond.

Onlangs is er een VM/370 distributie beschikbaar gekomen die bedoeld is als community-editie van dit klassieke systeem. Hierdoor wordt CMS weer bruikbaar door bijvoorbeeld een editor op volledig scherm, de FORTRAN H-compiler en nog veel meer toe te voegen. Daarom heb ik niet lang nagedacht voordat ik besloot om de VM/370 community-editie eens uit te proberen en mijn vm6pext-installatie te migreren. Op deze community-editie heb ik als gast-besturingssystemen MVS, MVT, VM/370 (VM kan zichzelf emuleren en werd vroeger op deze manier ontwikkeld), en UTS (een Unix-systeem voor VM) geïnstalleerd. Voor een groot deel hiervan zijn er tutorials beschikbaar op het moshix-kanaal.

Op een modern werkstation draait mijn geëmuleerde systeem ongeveer een orde van grootte sneller dan de echte hardware uit de jaren tachtig, en ik hoef het niet te delen met honderdvijftig andere timesharing-gebruikers, wat destijds een veelvoorkomende situatie was. Ik betwijfel ten zeerste of mijn werkstation honderdvijftig interactieve gebruikers aankan, maar destijds kon de hardware die belasting wel aan. Dit is nog steeds een indrukwekkende prestatie, een gevolg van het geoptimaliseerde ontwerp van elk aspect van een mainframe. De CPU was slechts één van de vele componenten, de spin in een web van autonome apparatuur zoals kanaalprocessors of randapparatuurcontrollers – north- en southbridges avant la lettre, maar dan campusbreed. Software was effectief maar Spartaans, om het systeem zo min mogelijk te belasten. Wilde je iets exotisch, zoals een grafische interface, dan moest dat op een front-end computer.

Ik heb de kernel van VM opnieuw geconfigureerd, waardoor MVS directe toegang tot het geheugen krijgt. Zo voorkom ik double-paging, wat de prestaties aanzienlijk vermindert wanneer MVS bovenop VM draait. Zodra VM is opgestart, start ik MVS op (sorry, ipl MVS) vanuit een telnet-sessie die is verbonden met VM, zoals hieronder beschreven. De melding VIRTUAL=REAL betekent dat double-paging wordt vermeden.

$ telnet s370 3270
Trying 127.0.1.1....
Connected to s370.

    VM/370 ONLINE

logon mvs ********
STORAGE IS VIRTUAL=REAL
LOGON AT 21:30:00 GMT FRIDAY 05/07/21
 
CP

ipl 148
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 03.8 .VS2

Zodra MVS is opgestart, kun je via een 3270-terminalemulator INLOGGEN op MVS, waarna je wordt begroet door mijn persoonlijke TSO-inlogscherm:

 MVS/370 Online



                          VV        VV    MM        MM
                          VV        VV    MMM      MMM
                   3333333333     777777777777    MM00000000
                  333333333333    77777777777MM  MM0000000000
                  33      VV33    77VV    77  MMMM00MM      00
                           V33     VV    77M   MM 00MM      00
                            33    VV    77MM      00MM      00
                         3333VV  VV    77 MM      00MM      00
                         3333 VVVV     77 MM      00MM      00     _      _
                            33 VV      77 MM      00MM      00  ." \\`.  (v)
                            33         77         00        00 ( \\ \\_\_ )\
                  33        33         77         00        00  \\ _"  //\  )
                  333333333333         77          0000000000    `/ // /// /
                   3333333333          77           00000000     (//  .__-"
                                                                   "-" \\


 Enter logon userid [reconnect]  
 ====>
                                                            RUNNING   VM370CE

Op de MVS-gast heb ik ALGOL68C geïnstalleerd. Aangezien het systeem het mogelijk maakt om MVS-batchjobs vanuit CMS te versturen, kan ik ALGOL68C als CMS-gebruiker in batch uitvoeren. Misschien zal iemand op een dag A68C of FLACC voor CMS weer beschikbaar maken, maar voor mijn doeleinden volstaat het kunnen uitvoeren van batchjobs. Ik maak JCL-batchbestanden voor MVS op CMS met de full-screen-editor, bijvoorbeeld het onderstaande eenvoudige A68C-programma:

File: FACT     A68C     A1  RECFM: F LRECL:  72(80) Lines:    10 Current:    10

===== * * * Top of file * * *
===== //FACT JOB 1,MARCEL,MSGCLASS=A     
===== //FACT EXEC A68CCG
===== //A68.SYSIN DD *
===== BEGIN PROC fac = (INT n) INT: (n <= 0 | 1 | n * fac (n - 1));
=====       FOR k TO 10
=====       DO print(k, fac (k), new line)
=====       OD
===== END
===== /*
      ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
=====
      * * * Bottom of file * * *

===>
Unchanged                                                 EE V1.2.5,  1 File(s)

Hieronder volgt een complexer JCL-bestand waarmee een in gesegmenteerd A68C-programma wordt uitgevoerd, waarbij de bronbestanden zijn opgeslagen op MVS:

File: CLUSTRUN JCL      A1  RECFM: F LRECL:  72(80) Lines:    62 Current:     9

===== * * * Top of file * * *
===== //CLUSTER JOB (1),MARCEL,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),
===== //        USER=MARCEL,PASSWORD=********
===== //SCRATCH EXEC PGM=IEFBR14
===== //CLUSTER DD DSN=MARCEL.CLUSTER.ENV,DISP=(MOD,DELETE,DELETE),
===== //           UNIT=3375,VOL=SER=PUB001
===== //*
===== //* EXAMPLE OF RUNNING A SEGMENTED ALGOL68C PROGRAM.
===== //*
      ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
===== //* ENVIRON
===== //A68ENV   EXEC PGM=A68C,REGION=768K
===== //STEPLIB  DD DSN=A68CLIB.MOD,DISP=SHR
===== //INIT     DD DSN=A68CLIB.SYS(INIT),DISP=SHR
===== //SYSENV   DD DSN=A68CLIB.SYS,DISP=SHR
===== //CODE     DD UNIT=SYSDA,DISP=(NEW,PASS,DELETE),
===== //            SPACE=(CYL,(1,1),RLSE)
===== //ENVOUT   DD DSN=MARCEL.CLUSTER.ENV(CLUSTER1),DISP=(NEW,PASS,DELETE),
===== //            SPACE=(CYL,(1,1,1)),DCB=RECFM=VB,
===== //            UNIT=3375,VOL=SER=PUB001
===>
Unchanged                                                 EE V1.2.5,  1 File(s)

Ik verstuur JCL-bestanden vanuit CMS naar MVS en haal de uitvoer op zodra de job is voltooid:

submvs clustrun jcl
PUN FILE 1894  TO  MVS      COPY 01 NOHOLD
Ready; T=0.01/0.01 22:37:05
PRT FILE 1895 FROM MVS      COPY 01 NOHOLD
readcard clustrun listing
RECORD LENGTH IS '132' BYTES.
Ready; T=0.02/0.06 22:46:15

Naast het draaien van ALGOL68C gebruik ik VM/CMS voor het bewaren van oude Fortran-code voor computersimulaties in de chemische fysica, en oude statistische programma’s. Maar dat is een verhaal voor een toekomstige post.


Projecten
Computergeschiedenis


Deze website is gearchiveerd door de KB, nationale bibliotheek.

© J.M. van der Veer   •   jmvdveer@algol68genie.nl