Funktion
Die SYNCHRONIZED-Klausel dient zur Ausrichtung eines Datenelements an einer vorgegebenen Grenze des Arbeitsspeichers der Datenverarbeitungsanlage, um eine effiziente Ausführung von arithmetischen Operationen für dieses Datenelement zu gewährleisten.
Als Erweiterung zum Standard erlaubt der Compiler, dass die SYNCHRONIZED-Klausel auf Gruppenebene angegeben werden kann; dies bewirkt eine Ausrichtung der dieser Gruppe untergeordneten Datenelemente.
Format
{SYNCHRONIZED | SYNC} [LEFT
| RIGHT]
Syntaxregeln
SYNC ist die Abkürzung für SYNCHRONIZED.
LEFT und RIGHT werden als Kommentare behandelt.
Die SYNCHRONIZED-Klausel darf nicht für Daten der Klassen national, objekt und zeiger angegeben werden.
Allgemeine Regeln
Durch die Angabe der SYNCHRONIZED-Klausel zur Ausrichtung eines Datenelements ist es manchmal notwendig, dass der Compiler Füllfeld-Bytes einfügt. Füllfeld-Bytes sind unbenutzte Zeichenstellen, die in einem Datensatz unmittelbar vor dem Datenfeld, das eine Ausrichtung verlangt, eingefügt werden. Diese Füllfeld-Bytes zählen zur Länge der Datengruppe, die das ausgerichtete Datenelement enthält.
Die eigentliche Grenze zur Ausrichtung eines Datenelementes hängt von der jeweiligen USAGE-Klausel des Datenelements ab.
Wird für binäre Datenfelder oder interne Gleitpunktdatenfelder die SYNCHRONIZED-Klausel nicht angegeben, so werden keine Füllfeld-Bytes angelegt. Werden jedoch Rechenoperationen auf diese Felder ausgeführt, so generiert der Compiler die notwendigen Anweisungen, um die Datenfelder in Hilfsfelder, die die notwendige Ausrichtung für die Rechenoperation haben, zu übertragen.
Wird die SYNCHRONIZED-Klausel für eine Datengruppe angegeben, so werden alle Datenelemente mit USAGE COMPUTATIONAL, COMPUTATIONAL-5, BINARY, COMPUTATIONAL-1 oder COMPUTATIONAL-2 so ausgerichtet, als wäre die SYNCHRONIZED-Klausel in ihren Datenbeschreibungen angegeben worden.
Wird die SYNCHRONIZED-Klausel angegeben, so werden folgende Aktionen ausgeführt:
Für ein Datenfeld mit USAGE COMPUTATIONAL, COMPUTATIONAL-5 oder BINARY:
Für den Bereich S9 bis S9(4) in der PICTURE-Klausel wird das Datenfeld an einer Halbwortgrenze (2 Bytes) ausgerichtet.
Für den Bereich S9(5) bis S9(31) in der PICTURE-Klausel wird das Datenfeld an einer Wortgrenze (4 Bytes) ausgerichtet.
Für ein Datenfeld mit USAGE COMPUTATIONAL-1 wird das Datenfeld an einer Wortgrenze ausgerichtet.
Für ein Datenfeld mit USAGE COMPUTATIONAL-2 wird das Datenfeld an einer Doppelwortgrenze (8 Bytes) ausgerichtet.Anmerkungen:
Für ein Datenfeld mit USAGE DISPLAY oder COMPUTATIONAL-3 bzw. PACKED-DECIMAL wird die SYNCHRONIZED-Klausel als Kommentar betrachtet, da in diesen Fällen keine Ausrichtung notwendig ist.
Für ein Datenfeld mit USAGE INDEX wird die SYNCHRONIZED-Klausel ebenfalls als Kommentar betrachtet, da in diesem Fall immer eine Ausrichtung auf Wortgrenze erfolgt.
Was Sie im Einzelnen bei der Ausrichtung von Datenfeldern beachten müssen, ist in Tabelle 16 zusammengefasst.
USAGE SYNC erlaubt Ausrichtung ohne SYNC Ausrichtung mit SYNC BINARY, COMP,
COMP-5ja B HW1
W2COMP-1
ja
B
W
COMP-2
ja
B
DW
COMP-3,
PACKED-DECIMAL
ja3
B
B
DISPLAY
ja3
B
B
INDEX
ja3
W
W
NATIONAL
nein
B
-
OBJECT REFERENCE
nein
DW
-
POINTER
nein
W
-
PROGRAM-POINTER
nein
W
-
Tabelle 16: Ausrichtung von Datenfeldern
B Ausrichtung auf Byte-Grenze W Ausrichtung auf Wort-Grenze HW Ausrichtung auf Halbwort-Grenze DW Ausrichtung auf Doppelwort-Grenze 1) 1-4 Ziffern
2) >=5 Ziffern
3)Angabe zulässig, jedoch ohne Einfluss auf die AusrichtungWird die SYNCHRONIZED-Klausel innerhalb einer Tabelle (beschrieben durch die OCCURS-Klausel) angegeben, wird jedes Tabellenelement ausgerichtet. Dies ist unter „Ausrichtung durch Einschieben von Füllfeld-Bytes“ beschrieben.
Wird eine SYNCHRONIZED-Klausel im Zusammenhang mit einer REDEFINES-Klausel angegeben, so muss der Programmierer sicherstellen, dass das Datenelement, das neu belegt werden soll, ausgerichtet ist (siehe Beispiel 7-28).
Die SYNCHRONIZED-Klausel ändert nicht die Länge eines Datenelements. Jeder unbenutzte Internspeicherplatz (Füllfeld-Bytes) zählt zur Größe der Gruppe, zu der dieses Datenelement gehört, und muss in der Internspeicherbelegung berücksichtigt werden, wenn die Gruppe als Objekt in einer REDEFINES-Klausel angegeben wurde (siehe Beispiel 7-29).
Alle Satzbeschreibungen (01-Stufen) in allen Kapiteln des Datenteils beginnen an Doppelwortgrenzen.
Werden Datensätze, die Datenelemente mit der SYNCHRONIZED-Klausel enthalten, geblockt, so muss der Benutzer die notwendigen Füllfeld-Bytes hinzufügen, um eine richtige Ausrichtung nach dem ersten Datensatz innerhalb des Blockes zu gewährleisten. Dies ist unter „Ausrichtung durch Einschieben von Füllfeld-Bytes“ beschrieben.
Zum Zwecke der Ausrichtung von Datenelementen mit USAGE COMPUTATIONAL, COMPUTATIONAL-5, BINARY, COMPUTATIONAL-1, COMPUTATIONAL-2 im LINKAGE-Kapitel werden alle Elemente der 01-Stufe als auf Doppelwortgrenze ausgerichtet angenommen. Infolgedessen muss der Benutzer sicherstellen, dass, wenn er eine CALL-Anweisung schreibt, diese Operanden in der USING-Angabe entsprechend ausgerichtet sind.
Beispiel 7-28
Im folgenden Beispiel muss A an einer Wortgrenze stehen:
02 A PICTURE X(4). 02 B REDEFINES A PICTURE S9(9) USAGE BINARY SYNC.
Beispiel 7-29
01 SATZ. 02 A. 03 G PICTURE X(5). 03 H PICTURE S9(9) SYNC USAGE BINARY. 02 B REDEFINES A. 03 I PICTURE X(12).
Hierbei belegt das Datenelement G 5 Bytes und das Datenelement H 4 Bytes.
Die SYNCHRONIZED- und USAGE-Klausel zeigt an, dass das Datenelement H an Wortgrenze ausgerichtet wird, deshalb gehen dem Datenelement H 3 Füllfeld-Bytes voraus. Da das Datenfeld A im ganzen 12 Bytes belegt, muss das Subjekt der REDEFINES-Klausel, das Datenfeld B, ebenfalls 12 Bytes belegen.