tirsdag den 25. august 2015

Fra Linkage Editor til Binder: Ny Reusability

Da jeg lærte assembler for en menneskealder siden, var der to step i oversættelsen: Assembleringen og linkage editing. Jeg anede ikke, hvad den sidste lavede. Jeg anså det ikke for vigtig, men kort sagt laver Linkage Editor dit program om til det endelige (load)modul, så det kan bruges af z/Os. I dag kaldes den Binder, hvilket svarer meget godt til, hvad man kalder samme funktion på andre platforme. Der er imidlertid nogle væsentlige parametre til Binderen, som man skal have styr på, hvis ikke man vil have problemer.
Et af dem er Reusability, som fortæller operativsystemet, hvordan programmet kan genbruges af operativsystemet. Operativsystemet har mange samtidige "tasks" kørende, så derfor er det vigtigt, at programmet ikke ændrer sig. Det kunne måske selv ændre i sin kode eller værdier eller andre kunne. Hvis assemblerprogrammøren garanterer, at hans program ikke modificerer sig selv (eller bliver modificeret af andre), vil det kunne få prædikatet "Reentable". Det er et meget fint prædikat, som fortæller operativsystemet, at det kan lægge programmet ind i et stykke memory, som kun kan læses. Hvis programmet, eller en anden, forbryder sig mod reglen, bliver vedkommende kastet af med en Abendkode "S0C4".
Operativsystemet kigger på "Reusability" på hvert modul det henter ind i memory og afgør, om det skal ind i "Read Only" memory eller i modificerbar memory.
Erfarne systemprogrammører vil sikkert kunne huske, at man kunne sætte flere af disse prædikater på et modul, f.eks. både “reusable” og “reentable”. Det skal man ikke mere. Et loadmodul kan kun få ét prædikat:
-------------------------------------------------------------------------------------------------------
Reusability (REUS, RENT and REFR) is handled differently by the binder. While the linkage editor processes the attributes independently, the binder stores them as a single value. The binder assumes that reenterable programs are also serially reusable, and the refreshable programs are also reenterable. This should not cause any processing difficulties.
The binder was designed to always accept an explicit override of a module attribute, whereas the linkage editor sometimes does not. For example, although the JCL can specify RENT in the parm list, when one CSECT being bound into a load module is reusable and the rest are reentrant, the linkage editor ignores the external parameter and assigns the module as reusable. The binder will allow the explicit override of RENT on the JCL to take priority.
------------------------------------------------------------------------------------------------------
Fra manualen z/OS MVS Program Management: User's Guide and ReferenceBinder processing differences from the linkage editor (http://goo.gl/XumuAu )
Hvis dit program alligevel blive modificeret under udførelsen, så skal du “binde/linke” den med REUSE=SERIAL eller NONE. I dette eksempel har jeg sagt, at modulet er serial reusable. Det er altså op til programmøren, at styre ændringerne i modulets kode eller værdier.
SETOPT PARM(LET,LIST,XREF,NCAL,REUS=SERIAL)
MODE AMODE(24),RMODE(24)
NAME [modulnavn](R)
Binderen skriver en liste over hvilke værdier og prædikater modulet har fået. I eksemplet nedenfor er det resultatet fra parametrene ovenfor.
------------------------------------------------------------------------------------------------------
AC 000
AMODE 24
COMPRESSION NONE
DC NO EDITABLE YES
EXCEEDS 16MB NO
EXECUTABLE YES
LONGPARM NO
MIGRATABLE YES
OL NO
OVLY NO
PACK,PRIME NO,NO
PAGE ALIGN NO
REFR NO
RENT NO
REUS YES

RMODE 24
SCTR NO
SIGN NO
SSI
SYM GENERATED NO
TEST NO
XPLINK NO
MODULE SIZE (HEX) 000001A0
------------------------------------------------------------------------------------------------------
Bemærk, at der stadig kommer flere linjer ud om reusability, men det er egentlig kun for at være bagud kompatible.
Det samme gælder også, hvis du går ind i LOADLIB og finder modulet. Her er også afsat flere felter til Reusable, men igen, det er bare for at være bagud kompatible.
------------------------------------------------------------------------- 
MITPGM1 RU 
MITPGM2 
MITPGM3 RN RU
MITPGM4 RN RU
--------------------------------------------------------------------------
Program MITPGM3 og MITPGM4 er begge Reentable, hvor MITPGM1 “kun” er Serial Reusable
Jeg har samlet lidt links til dig, hvis du er interesseret i mere:

Ingen kommentarer:

Send en kommentar