Appendix 14. Datormiljöer

A 14.0 Inledning

I detta appendix diskuterar jag mycket kortfattat fyra av de vanligaste datormiljöerna, nämligen UNIX (inklusive varianten UNICOS för Cray), MS-DOS och VAX/VMS. Andra vanliga miljöer är IBM:s stordatormiljöer MVS och VM, de nya operativsystemen OS/2 och Windows NT, samt naturligtvis Apple's System 7 på Macintosh.

A 14.1 UNIX

När det blev dags att vid Linköpings universitet ersätta de gamla DEC-20 datorerna från Digital Equipment var UNIX det naturliga valet av operativsystem. Trots att UNIX ännu ej är en formell standard är det en form av världsstandard. Det har utvecklats av ett par personer vid det amerikanska telefonbolaget AT&T, till vilket alla UNIX-användare tidigare måste betala licensavgift. Denna var dock lägre om man inte kallade operativsystemet UNIX, Digital Equipment kallade därför länge sitt för ULTRIX och Cray sitt för UNICOS. I det följande använder jag normalt benämningen UNIX. En ofantlig mängd olika standarder finns numera för UNIX.

UNIX är ett operativsystem där den vanlige användaren klarar sig med ganska få kommandon, men där den avancerade användaren har en mycket kraftfull miljö. Vad man som nybörjare speciellt måste observera är att UNIX ordentligt skiljer på gemena och VERSALER. I de flesta andra operativsystem har det ingen betydelse om man använder gemena eller VERSALER, men så icke i UNIX! Normalt använder man bara gemena.

Kommandona i UNIX består oftast av bara 2 till 3 tecken. För att lista vilka filer som finns i den katalog (directory) där man befinner sig användes ls, eller det mer kraftfulla ls -lFa, ofta förkortat lls. Förkortningar definieras genom att i lämplig login-fil (det finns flera motsvarigheter till gamla tiders login-filer, det utmärkande för UNIX är att deras namn börjar med en punkt) ange till exempel

        alias lls 'ls -lFa'
Man får reda på vilka alias som gäller för tillfället genom att helt enkelt ge kommandot alias.

Man listar en fil på skärmen genom att ge kommandot cat följt av filnamnet. Ofta är det bättre att i stället använda more, varvid man kan bläddra i filen. Blank ger en sida framåt, b ger en sida bakåt och q ger uthopp. Kopiering av filer sker med cp gammal ny, flyttning eller namnbyte med mv gammal ny, och borttagning med rm namn. Man förflyttar sig mellan olika areor (filkataloger, directories) med kommandot cd area.

Redigering av en fil kan antingen ske med en systemspecifik editor, med UNIX standard-editorer ex eller vi eller med den välkända emacs.

För Fortran 77 program gäller att filnamnet måste sluta med .f, till exempel prog.f. Om man försöker kompilera ett program med filnamnet prog.txt får man under UNIX en felaktig felutskrift som snackar om "bad file magic number". För Fortran 90 program bör i stället filnamnet sluta med .f90, om man använder fri form.

Anm. Fortran-programenheters namn kan sluta på en del andra tecken, som .for, men detta är implementationsbeorende och därför av mindre intresse.

Kompilering sker med kommandot f77 respektive f90 följt av filnamnet, till exempel f77 prog.f. En framgångsrik kompilering skapar ett körklart program, om man inte anstränger sig får detta namnet a.out, som man kör genom att skriva det namnet.

Hjälpfunktioner finns under UNIX i form av ett manualkommando, man. Man får dock under UNIX ut hela manualen sida för sida på skärmen, det är ingen trädstruktur som under VMS. Ge gärna kommandot man f77 eller man f90 för att studera Fortran-kompileringens mysterier. Man hittar där en del intressanta väljare, som -C för att få indexkontroll under exekveringen, -u för att kräva att alla variabler deklareras, -vms för att dels få en del från DEC VAX/VMS, dels få bort Fortrans styrtecken vid utmatning på terminal. Dessa exempel kommer från f77 på DEC!

Kommunikation med andra system erhålles med kommandona telnet eller rlogin, med vilket man logiskt flyttar sig till ett annat system, och ftp, vilket utnyttjas för filöverföring.

Man loggar ut från UNIX med exit, från vissa hjälpsystem med quit. För att komma ut från arbetsstationen måste man även logga ut med hjälp av musen.

UNIX innehåller många utmärkta hjälpmedel. Ett ytterst användbart sådant är make kommandot, vilket utnyttjas för att bygga ett stort exekverbart prgram från många separata källfiler. Ett enkelt exempel ges i Laboration 5. En bok från O'Reilly som beskriver kommandot är MANAGING PROJECTS WITH MAKE av Andrew Oram & Steve Talbott, 2nd Edition, October 1991, 152 pages, ISBN 0-937175-90-0.

A 14.2 UNICOS

Det vanligaste operativsystemet på Cray Y-MP heter UNICOS och är en variant av UNIX. Trots att man numera kan köra på Cray som på vilken annan UNIX-maskin som helst är det fortfarande vanligt att man inte editerar och liknande på superdatorn, utan använder en enklare UNIX-maskin som frontend.

Resultatet av en körning på Cray har ofta normalt radskrivarformat, dvs utnyttjar 132 positioner i bredd.

Numera går det att köra interaktivt på vår Cray på NSC, man flyttar först över filer med ftp cray.nsc.liu.se och sedan går man över till Cray för exekvering med kommandot telnet cray.nsc.liu.se. Editering på Cray sker lämpligen via ett X-windows fönster på arbetsstationen.

Tips 1. Kompilera först Ditt Fortranprogram på arbetsstationen, för att bli av med ``småfelen'' på ett enkelt sätt!

Tips 2. Använd "styrkortsuppsättningen" nedan som mönster. QSUB-r ger jobbnamnet. Som user skall Du ge Din användaridentitet på Cray. Du anger minnesbehovet i miljoner ord på Cray med QSUB-lM, hpm ger mätning av hur effektivt hårdvaran utnyttjas (hardware performance monitor) medan ja står för debiteringsinformation (job accounting).

Metod 1. Konventionell interaktiv kompilering och exekvering på Cray Y-MP.

Jag använder som test programmet EPSILON från kapitel 1.
$ cat epsilon.f
      program epsilon
      real a, b, tred 
      tred = 1.0/3.0
      a = 4.0*tred - 1.0
      b = 1.0-3.0*a
      b = 0.5 * b  
      write(*,*) ' Fortran: my = ', b
      end

$ f90 epsilon.f
$ ./a.out				! Notera nödvändigheten av ./
  Fortran: my =  7.105427357601001E-15

Denna metod passar för tester och för mycket små jobb.

Metod 2. Satsvis kompilering och exekvering direkt på Cray Y-MP.

Alla HTML-länkar nedan har lagts in manuellt efter körningen. Likaså är texten efter ! kommentarer som lagts in efteråt.
$ cat modul.job
# user=x_nscbi			! Användarnamn
# QSUB-r     bosse		! Jobbnamn
# QSUB-lT   50			! Maximal CPU-tid i sekunder
# QSUB-lM   4Mw			! Maximalt primärminne 

# QSUB-eo
ja				! Förbered rapportering
set -x				! Ekning av kommandon
cd $TMP				! Gå till tillfällig area
f90 -r 6 ~/epsilon.f		! Kompilera med fullständig listning
cat epsilon.lst			! Skriv ut kompileringslistan
hpm -g 0 ./a.out 		! Mät programmet under körning
ja -s				! Rapportera

$ qsub modul.job		! Sänd jobbet för exekvering
nqs-181 qsub: INFO 
  Request <94359.sn1037>: Submitted to queue <gate> by <x_nscbi(789)>.
$ ustat				
NQS_ID JOB_NAME QUEUE    USER    STAT PRI CPU_TIME MAX_CPU     SIZE  MAX_SIZE
94359 bosse     t200_m8 x_nscbi  R4    22        0      50    984kw       4mw
94184 phos-3    tx_m24  x_nscler R5  N 32    76259  100000  24210kw      24mw
94325 dimesi4   tx_m24  x_nscec  R5  N 32     5385  600000  15946kw      16mw
94337 rev46a    tx_m24  x_nsctj  R6  N 32     2012  100000   8163kw       8mw
94116 bdrc3     tx_mx   x_nfrsll R5  N 36   135151  500000  40439kw      50mw
$ ls bo*			! Se vad utfilen heter
bosse.o94359
$ cat bosse.o94359		! Skriv ut utfilen (resultatet)

This is a private computer facility.   Access for any reason must be
specifically authorized by the owner.  Unless you are so authorized,
your continued  access and any other use may  expose you to criminal
and/or civil proceedings.

Information about NSC and CRAY is available at 
http://www.nsc.liu.se/.

+ cd /nsc/tmp/tmpdir.020275a	! Detta är ekning av cd $TMP
+ f90 -r 6 /home/nsc/x_nscbi/epsilon.f
+ cat epsilon.lst		! Kompileringslistan
                                       
 ! Denna blir mycket lång och har skurits ner här! 
       
      1            program epsilon
      2            real a, b, tred
      3            tred = 1.0/3.0
      4            a = 4.0*tred - 1.0
      5            b = 1.0-3.0*a
      6            b = 0.5 * b
      7            write(*,*) ' Fortran: my = ', b
      8            end
               
 3 Local Variables (11 references, 8 Uses)
                A
                B
                TRED

+ hpm -g 0 ./a.out			! Körning
  Fortran: my =  7.105427357601001E-15	! Resultat
					! Statistik
Group 0:  CPU seconds   :       0.00      CP executing     :         213419

Million inst/sec (MIPS) :      38.98      Instructions     :          49916
Avg. clock periods/inst :       4.28
% CP holding issue      :      49.01      CP holding issue :         104604
Inst.buffer fetches/sec :       0.70M     Inst.buf. fetches:            902
Floating adds/sec       :       0.02M     F.P. adds        :             23
Floating multiplies/sec :       0.03M     F.P. multiplies  :             43
Floating reciprocal/sec :       0.00M     F.P. reciprocals :              0
I/O mem. references/sec :       0.00M     I/O references   :              0
CPU mem. references/sec :      28.37M     CPU references   :          36332

Floating ops/CPU second :       0.05M
+ ja -s


Job Accounting - Summary Report		! Rapport
===============================

Job Accounting File Name         : /tmp/nqs.+++++0M1M/.jacct3104
Operating System                 : sn1037 sn1037 8.0.3.1 ope.10 CRAY Y-MP
User Name (ID)                   : x_nscbi (789)
Group Name (ID)                  : g90027 (527)
Account Name (ID)                : A-00000 (0)
Job Name (ID)                    : bosse (3104)
Report Starts                    : 09/24/96 09:51:20
Report Ends                      : 09/24/96 09:51:28
Elapsed Time                     :            8      Seconds
User CPU Time                    :            1.1764 Seconds
System CPU Time                  :            0.4904 Seconds
I/O Wait Time (Locked)           :            1.6376 Seconds
I/O Wait Time (Unlocked)         :            4.3639 Seconds
CPU Time Memory Integral         :            0.6067 Mword-seconds
SDS Time Memory Integral         :            0.0000 Mword-seconds
I/O Wait Time Memory Integral    :            0.9573 Mword-seconds
Data Transferred                 :            1.2468 MWords
Maximum memory used              :            1.0830 MWords
Logical I/O Requests             :          374
Physical I/O Requests            :          323
Number of Commands               :           16
Billing Units                    :            0.0708

Information om att ett jobb är färdigt kan erhållas med e-post enligt instruktioner i nyhetsbrev 105, sektion 1b.

Denna metod passar för små jobb.

Metod 3. Satsvis kompilering och exekvering på Cray Y-MP från frontend utnyttjande NQS.

För information om hur man utnyttjar Network Queueing System och Network Queueing Environment hänvisas till NSC, till exempel nyhetsbrev NSC-info 101 (sektion 4, personlig installation, och sektion 5, test) eller 103 (sektion 3, användning). Information om att ett jobb är färdigt erhålles med e-post enligt instruktioner i nyhetsbrev 105.

Man kan naturligtvis även gå direkt till informationen om Network Queueing Environment från Cray Research.

Stora jobb bör köras på detta sätt.

A 14.3 MS-DOS

Under MS-DOS skiljer man inte på små bokstäver (gemener) och stora bokstäver (VERSALER).

Metoden att köra Fortran-program varierar med leverantören av kompilatorn. Jag har tyvärr ingen erfarenhet av Microsofts båda Fortran 77 system, utan behandlar huvudsakligen Fortran 90 från NAG.

Vid NAG:s system så är kompileringskommandot FTN90 och källkoden är *.F90 för den nya fria formen och *.FOR för den gamla fixa formen. För att få omedelbar exekvering lägger man till /LGO.

        C:\> ftn90 program.f90 /lgo
Vid användning av flera programenheter i olika filer bör man först separatkompilera exempelvis de båda filerna DEL1.F90 och DEL2.F90 enligt
        C:\> ftn90 del1.f90 
        C:\> ftn90 del2.f90 
och man får då de båda objektfilerna DEL1.OBJ och DEL2.OBJ. Dessa länkas sedan med LINK77 för att skapa den exekverbara modulen HELA.EXE.
        C:\> LINK77
        $LOAD DEL1
        $LOAD DEL2
        $FILE HELA.EXE
        C:\>
        C:\> HELA
Symbolen $ ovan genereras automatiskt av länkaren LINK77, som även den är en NAG-produkt. Den medföljer vid köp av kompilatorn, liksom det nedan diskuterade hjälpsystemet DBOS. Man kör Microsoft FORTRAN version 5.1 på följande sätt. Vi antar att programmet finns i filen PROGRAM.FOR och kompilering sker med
        C:\> FL /Fs PROGRAM.FOR
Denna kompilering skapar två filer, en programlista PROGRAM.LST med eventuella programfel (som även kommer upp på skärmen) samt vid en lyckad kompilering även ett körklart program med namnet PROGRAM.EXE.

A 14.4 VAX/VMS

VAX/VMS har alltsedan 1978 varit ett mycket populärt operativsystem för Digital Equipments datorer av märket VAX. Operativsystemet utvecklas nu alltmer i riktning mot UNIX, den senaste versionen heter Open VMS, och finns även för Digitals Alpha-system. För denna senare finns även Digitals Fortran 90 tillgängligt.

Filer skapas lämpligen med VAX standard-editor EDT eller TPU (vilka båda utnyttjar speciella tangenter vid redigeringen, bland annat det numeriska tangentbordet) eller den vanliga editorn EMACS eller AMIS.

Ett lämpligt namn på en program-fil är PROGRAM.FOR.

Programmet skall kompileras, länkas och köras. Detta sker normalt i tre steg, först kompilering med kommandot

        for program
sedan länkning av PROGRAM.OBJ med
        lin program
och slutligen körning av PROGRAM.EXE med
        run program
Ovanstående använder Fortran 77. Jag har tyvärr ännu inte tillgång till någon VAX med Fortran 90. Notera att VAX/VMS liksom MS-DOS ej skiljer på kommandon och filnamn givna med små eller stora bokstäver.

Editorer Innehåll Co-Array Fortran


Senast modifierad: 22 augusti 2001
boein@nsc.liu.se