DE102013210839B4 - Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion - Google Patents

Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion Download PDF

Info

Publication number
DE102013210839B4
DE102013210839B4 DE102013210839.7A DE102013210839A DE102013210839B4 DE 102013210839 B4 DE102013210839 B4 DE 102013210839B4 DE 102013210839 A DE102013210839 A DE 102013210839A DE 102013210839 B4 DE102013210839 B4 DE 102013210839B4
Authority
DE
Germany
Prior art keywords
transaction
cpu
abort
mode
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102013210839.7A
Other languages
English (en)
Other versions
DE102013210839A1 (de
Inventor
Khary J. Alexander
Breton F. Belmar
Christian Jacobi
Randall W. Philley
Anthony Saporito
Timothy J. Slegel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/524,833 external-priority patent/US9442737B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102013210839A1 publication Critical patent/DE102013210839A1/de
Application granted granted Critical
Publication of DE102013210839B4 publication Critical patent/DE102013210839B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Verfahren zur transaktionalen Ausführung von Anweisungen einer ersten CPU, die zusammen mit weiteren CPUs auf dieselben Speicherorte eines Speichers zugreifen kann,- wobei die erste CPU durch eine bestimmte Anweisung in den Modus der spekulativen transaktionalen Ausführung (TX-Modus) eintritt,- wobei die erste CPU den TX-Modus verlässt durcha) eine bestimmte Anweisung, die den Modus der spekulativen transaktionalen Ausführung beendet, oderb) durch einen Abbruch der Transaktion;- wobei die Speicherzugriffe der ersten CPU im TX-Modus festgeschrieben werden, wenn die Transaktion ohne Abbruch endet,- wobei die Speicherzugriffe der ersten CPU im TX-Modus verworfen werden, wenn eine Transaktion abgebrochen wird;o und ein Abbruchzähler erhöht wird, wenn der Abbruch auf Grund eines Zugriffskonfliktes bei der spekulativen Transaktionsausführung erfolgte, und andernfalls der Abbruchzähler zurückgesetzt wird,- wobei das ausgeführte Programm im Fall eines Transaktionsabbruchs die Transaktion erneut ansteuert, wenn der Abbruchzähler unterhalb eines Schwellwertes liegt, und andernfalls das Programm auf eine alternative Ausführung zum spekulativen transaktionalen Pfad ausweicht, sodass die Transaktion letztendlich durchgeführt wird.

Description

  • HINTERGRUND
  • Die Erfindung betrifft eine Multiprozessor-Datenverarbeitungsumgebung und insbesondere Transaktionsverarbeitungen innerhalb solcher Datenverarbeitungsumgebungen.
  • Ein ständiges Problem bei der Multiprozessorprogrammierung besteht in Aktualisierungen des gleichen Speicherorts durch mehrere Zentraleinheiten (CPUs, Central Processing Units). Viele Anweisungen, die Speicherorte aktualisieren, darunter sogar einfache logische Operationen wie UND, tun dies durch mehrere Zugriffe auf den Speicherort. Beispielsweise wird der Speicherort zunächst abgerufen, und danach wird das aktualisierte Ergebnis in den Speicherort zurückgeschrieben.
  • Damit mehrere CPUs den gleichen Speicherort sicher aktualisieren können, wird der Zugriff auf den Speicherort serialisiert. Eine Anweisung, die Anweisung TEST AND SET, wurde mit der S/360-Architektur eingeführt, die früher von der International Business Machines Corporation angeboten wurde, und stellte eine gesperrte Aktualisierung eines Speicherorts bereit. Eine gesperrte Aktualisierung bedeutet, dass der gesamte Speicherzugriff der Anweisung für andere CPUs und das Eingabe/Ausgabe-(E/A-)Teilsystem (z.B. Kanalteilsystem) atomar zu erfolgen scheint. Später führte die von der International Business Machines Corporation angebotene S/370-Architektur die Anweisungen COMPARE AND SWAP und COMPARE DOUBLE AND SWAP ein, die ein ausgeklügelteres Mittel zum Durchführen einer gesperrten Aktualisierung bereitstellen und die Implementierung dessen ermöglicht, was allgemein als Sperrwort (oder Semaphor) bekannt ist. Kürzlich hinzugefügte Anweisungen stellen weitere Funktionen der gesperrten Aktualisierung bereit, darunter COMPARE AND SWAP AND PURGE und COMPARE AND SWAP AND STORE. All diese Anweisungen stellen jedoch eine Sperre für nur einen einzelnen Speicherort bereit.
  • Komplexere Programmtechniken erfordern gegebenenfalls die gesperrte Aktualisierung von mehreren Speicherorten, beispielsweise wenn ein Element zu einer doppelt verknüpften Liste hinzugefügt wird. Bei einer solchen Operation scheinen sowohl ein Vorwärtszeiger als auch ein Rückwärtszeiger gleichzeitig aktualisiert zu werden, wie es durch andere CPUs und das E/A-Teilsystem wahrgenommen wird. Um eine solche mehrfache Speicherortaktualisierung umzusetzen, muss das Programm einen separaten einzelnen Serialisierungspunkt verwenden, z.B. ein Sperrwort. Sperrwörter können jedoch eine viel gröbere Serialisierungshöhe als gerechtfertigt bereitstellen, beispielsweise können die Sperrwörter eine gesamte Warteschlange aus Millionen von Elementen serialisieren, auch wenn nur zwei Elemente aktualisiert werden. Das Programm kann die Daten strukturieren, um eine feinkörnigere Serialisierung (z.B. eine Hierarchie von Sperrpunkten) zu verwenden, aber dies führt zu weiteren Problemen wie beispielsweise zu möglichen Situationen des gegenseitigen Blockierens, wenn die Hierarchie nicht eingehalten wird, und Wiederherstellungsproblemen, wenn das Programm auf einen Fehler stößt, wenn eine oder mehrere Sperren gehalten werden oder wenn die Sperre nicht erfasst werden kann.
  • Darüber hinaus gibt es zahlreiche Szenarien, in denen ein Programm eine Anweisungsabfolge ausführen kann, die womöglich zu einer Ausnahmebedingung führt. Wenn keine Ausnahmebedingung auftritt, fährt das Programm fort; wenn jedoch eine Ausnahme erkannt wird, kann das Programm eine Korrekturmaßnahme ergreifen, um die Ausnahmebedingung zu beseitigen. Java beispielsweise kann eine solche Ausführung z.B. in einer spekulativen Ausführung, einem teilweisen Inlining einer Funktion und/oder in der Umordnung einer Zeiger-Null-Prüfung nutzen.
  • Bei klassischen Betriebssystemumgebungen wie z/OS und dessen Vorgänger, die von der International Business Machines Corporation angeboten werden, richtet das Programm eine Wiederherstellungsumgebung ein, um jedwede mögliche Programmausnahmebedingung abzufangen. Wenn das Programm die Ausnahme nicht abfängt, beendet das Betriebssystem das Programm bei Ausnahmen, auf deren Handhabung das Betriebssystem nicht vorbereitet ist, für gewöhnlich nicht normal. Das Einrichten und Nutzen einer solchen Umgebung ist kostspielig und kompliziert.
  • Aus P1: Tomic, S. et al.: EazyHTM: Eager-Lazy Hardware Transactional Memory. In: 2009 42nd Annual IEEE/ACM International Symposium on Microarchitecture (MICRO), New York, NY, USA, 2009. ist ein Transaktionsspeicher bekannt, mit dem Parallelprogrammierung vereinfacht wird.
    Ausgehend von dem Stand der Technik stellt sich die Erfindung die Aufgabe, eine geplante Transaktion auch dann sicher durchzuführen, ohne dass sie nach mehreren erfolglosen Versuchen gänzlich abgebrochen wird, wenn mehrere CPUs auf ein und denselben Speicherort zugreifen.
    Diese Aufgabe wird erfindungsgemäß gelöst durch das Verfahren nach Anspruch 1, das Computersystem nach Anspruch 13 und das Computerprogrammprodukt nach Anspruch 14. Bevorzugte Ausführungsformen der Erfindung sind Gegenstand der jeweiligen Unteransprüche.
  • KURZDARSTELLUNG
  • Das Verfahren beinhaltet beispielsweise ein Feststellen durch einen Prozessor, dass eine innerhalb der Datenverarbeitungsumgebung ausgeführte Transaktion eine vorab festgelegte Anzahl von Malen abgebrochen wurde, wobei die Transaktion das Festschreiben von transaktionsorientierten Speichervorgängen in den Hauptspeicher bis zum Ausführen einer ausgewählten Transaktion effektiv verzögert; ein Ausführen einer Aktion auf der Grundlage des Feststellens, dass eine Transaktion eine vorab festgelegte Anzahl von Malen abgebrochen wurde, um die Verarbeitung des Prozessors oder eines weiteren Prozessors während eines Wiederholungsversuch der Transaktion zu beschränken; und ein erneutes einmaliges oder ausgewählt mehrmalige Wiederholen der Transaktion nach Durchführen der Aktion.
  • Die beanspruchten Systeme und Computerprogrammprodukte setzen das Verfahren um.
  • Weitere Merkmale und Vorteile werden im folgenden beschrieben.
  • Figurenliste
  • Die Beschreibung bezieht sich auf die beiliegenden Zeichnungen, in denen:
    • 1 eine Ausführungsform einer Datenverarbeitungsumgebung zeigt;
    • 2A ein Beispiel einer Anweisung Transaction Begin (TBEGIN) zeigt;
    • 2B eine Ausführungsform mit weiteren Details zu einem Feld der Anweisung TBEGIN von 2A zeigt;
    • 3A ein Beispiel einer Anweisung Transaction Begin constrained (TBEGINC) zeigt;
    • 3B eine Ausführungsform mit weiteren Details zu einem Feld der Anweisung TBEGINC von 3A zeigt;
    • 4 ein Beispiel einer Anweisung Transaction End (TEND) zeigt;
    • 5 ein Beispiel einer Anweisung Transaction Abort (TABORT) zeigt;
    • 6 ein Beispiel von verschachtelten Transaktionen zeigt;
    • 7 ein Beispiel einer Anweisung NONTRANSACTIONAL STORE (NTSTG) zeigt;
    • 8 ein Beispiel einer Anweisung EXTRACT TRANSACTION NESTING DEPTH (ETND) zeigt;
    • 9 ein Beispiel eines Transaktionsdiagnoseblocks zeigt;
    • 10 beispielhafte Gründe für einen Abbruch sowie zugehörige Abbruchcodes und Bedingungscodes zeigt;
    • 11 eine Ausführungsform der Logik zeigt, die dem Ausführen einer Anweisung TBEGINC zugehörig ist;
    • 12 eine Ausführungsform der Logik zeigt, die dem Ausführen einer Anweisung TBEGIN zugehörig ist;
    • 13 eine Ausführungsform der Logik zeigt, die dem Ausführen einer Anweisung TEND zugehörig ist;
    • 14 eine Ausführungsform der Logik zeigt, die der Transaktionsabbruchverarbeitung zugehörig ist;
    • 15 eine Ausführungsform der Logik zeigt, die dem Durchführen von Aktionen zugehörig ist, mit denen das Ausführen einer eingeschränkten Transaktion erleichtert wird;
    • 16A bis 16C Ausführungsformen der Logik zeigen, mit der das Ausführen einer Transaktion nach einem Transaktionsabbruch erleichtert wird;
    • 17A bis 17B ein Beispiel für das Einfügen eines Warteschlangenelements in eine doppelt verknüpfte Liste von Warteschlangenelementen zeigen;
    • 18 eine Ausführungsform eines Computerprogrammprodukts zeigt;
    • 19 eine Ausführungsform eines Host-Computersystems zeigt;
    • 20 ein weiteres Beispiel für ein Computersystem zeigt;
    • 21 ein weiteres Beispiel für ein Computersystem zeigt, das ein Computernetz aufweist;
    • 22 eine Ausführungsform verschiedener Elemente eines Computersystems zeigt;
    • 23A eine Ausführungsform der Ausführeinheit des Computersystems von 22 zeigt;
    • 23A eine Ausführungsform der Verzweigungseinheit des Computersystems von 22 zeigt;
    • 23A eine Ausführungsform der Lade/Speicher-Einheit des Computersystems von 22 zeigt; und
    • 24 eine Ausführungsform eines emulierten Host-Computersystems zeigt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Bei einem Aspekt wird eine Einrichtung für transaktionsorientierte Ausführung (TX, Transactional Execution) bereitgestellt. Diese Einrichtung stellt eine Transaktionsverarbeitung für Anweisungen bereit und bietet bei einer oder mehreren Ausführungsformen unterschiedliche Ausführungsmodi, wie unten beschrieben, sowie verschachtelte Ebenen der Transaktionsverarbeitung.
  • Die Einrichtung für transaktionsorientierte Ausführung bringt einen CPU-Status ein, der Modus der transaktionsorientierten Ausführung (TX) genannt wird. Nach einem Zurücksetzen der CPU befindet sich die CPU nicht im TX-Modus. Die CPU geht durch eine TRANSACTION BEGIN-Anweisung in den TX-Modus über. Die CPU verlässt den TX-Modus entweder durch (a) eine äußerste Anweisung TRANSACTION END (weitere Details zu außen und innen folgen) oder (b) einen Abbruch der Transaktion. Im TX-Modus scheinen Speicherzugriffe blockgleichzeitig zu erfolgen, wie durch andere CPUs und das E/A-Teilsystem wahrgenommen. Die Speicherzugriffe (a) werden zum Speichern festgeschrieben, wenn die äußerste Transaktion ohne Abbruch endet (d.h. z.B., wenn in einem in Bezug auf die CPU lokalen Cachespeicher oder Pufferspeicher durchgeführte Aktualisierungen weitergeleitet und in einem realem Speicher gespeichert werden und für andere CPUs sichtbar sind) oder (b) werden verworfen, wenn die Transaktion abgebrochen wird.
  • Transaktionen können verschachtelt werden. D.h., während sich die CPU im TX-Modus befindet, kann sie eine weitere Anweisung TRANSACTION BEGIN ausführen. Die Anweisung, die bewirkt, dass die CPU in den TX-Modus übergeht, wird äußerste TRANSACTION BEGIN genannt; gleichermaßen wird das Programm als in der äußersten Transaktion befindlich bezeichnet. Nachfolgende Ausführungen von TRANSACTION BEGIN werden innere Anweisungen genannt; und das Programm führt eine innere Transaktion aus. Das Modell stellt eine Mindestverschachtelungstiefe und eine modellabhängige maximale Verschachtelungstiefe bereit. Eine Anweisung
    EXTRACTION TRANSACTION NESTING DEPTH gibt den aktuellen Verschachtelungstiefenwert zurück und kann bei einer weiteren Ausführungsform einen maximalen Verschachtelungstiefenwert zurückgeben. Diese Technik verwendet ein Modell mit der Bezeichnung „reduzierte Verschachtelung“ (flattened nesting), wobei eine Abbruchbedingung in einer beliebigen Verschachtelungstiefe einen Abbruch aller Transaktionsebenen bewirkt, und die Steuerung wird an die der äußersten TRANSACTION BEGIN folgenden Anweisung zurückgegeben.
  • Während des Verarbeitens einer Transaktion steht ein von einer CPU durchgeführter transaktionsorientierter Zugriff in Konflikt mit (a) einem von einer anderen CPU durchgeführten transaktionsorientierten Zugriff oder nichttransaktionsorientiertem Zugriff oder (b) einem von dem E/A-Teilsystem durchgeführten nichttransaktionsorientierten Zugriff, wenn beide Zugriffe auf einen beliebigen Speicherort innerhalb der gleichen Cachespeicherzeile erfolgen und ein oder beide Zugriffe ein Speichervorgang ist bzw. sind. Mit anderen Worten, damit eine transaktionsorientierte Ausführung produktiv ist, muss die CPU beim Durchführen von transaktionsorientierten Zugriffen nicht beobachtet werden, bis sie festschreibt. Dieses Programmiermodell kann in gewissen Umgebungen äußerst effektiv sein; beispielsweise beim Aktualisieren von zwei Punkten in einer doppelt verknüpften Liste von Millionen Elementen. Es kann jedoch weniger effektiv sein, wenn viele Konflikte in Bezug auf die Speicherorte vorliegen, auf die transaktionsorientiert zugegriffen wird.
  • Bei einem Modell der transaktionsorientierten Ausführung (hier als nichteingeschränkte Transaktion bezeichnet) kann das Programm im Fall eines Transaktionsabbruchs entweder versuchen, die Transaktion erneut anzusteuern, in der Hoffnung, dass die Abbruchbedingung nicht mehr vorhanden ist, oder das Programm kann auf einen äquivalenten nichttransaktionsorientierten Pfad „ausweichen“ („fall back“). Bei einem weiteren Modell der transaktionsorientierten Ausführung (hier als eingeschränkte Transaktion bezeichnet) wird eine abgebrochene Transaktion von der CPU automatisch erneut angesteuert; liegen keine Einschränkungsverletzungen vor, wird sichergestellt, dass die eingeschränkte Transaktion letztendlich durchgeführt wird.
  • Beim Einleiten einer Transaktion kann das Programm verschiedene Steuerungen festlegen, z.B. (a) welche allgemeinen Register auf ihre ursprünglichen Inhalte zurückgesetzt werden, wenn die Transaktion abgebrochen wird, (b) ob die Transaktion den Gleitkommaregister-Kontext ändern darf, darunter z.B. Gleitkommaregister und das Gleitkomma-Steuerregister, (c) ob die Transaktion Zugriffsregister (ARs, Access Registers) ändern darf; und (d) ob bestimmte Programmausnahmebedingungen blockiert werden, so dass sie keine Unterbrechung verursachen. Wenn eine nichteingeschränkte Transaktion abgebrochen wird, können verschiedene Diagnoseinformationen bereitgestellt werden. Beispielsweise kann die äußerste Anweisung TBEGIN, die eine nichteingeschränkte Transaktion einleitet, einen programmspezifischen Transaktionsdiagnoseblock (TDB) ausweisen. Darüber hinaus kann der TDB im Präfixbereich der CPU oder durch die Statusbeschreibung des Host ausgewiesen auch verwendet werden, wenn die Transaktion aufgrund einer Programmunterbrechung oder einer Bedingung abgebrochen wird, die das Beenden einer interpretativen Ausführung bewirkt.
  • Oben sind verschiedene Registertypen angeführt. Diese werden im Folgenden ausführlicher beschrieben. Allgemeine Register können als Akkumulatoren bei allgemeinen Rechen- und logischen Operationen verwendet werden. Bei einer Ausführungsform enthält jedes Register 64 Bitpositionen, und es liegen 16 allgemeine Register vor. Die allgemeinen Register werden durch die Zahlen 0 bis 15 gekennzeichnet und in einer Anweisung durch ein 4-Bit-R-Feld ausgewiesen. Einige Anweisungen führen zum Adressieren von mehreren allgemeinen Registern, indem sie mehrere R-Felder aufweisen. Bei einigen Anweisungen wird das Verwenden eines spezifischen allgemeinen Registers impliziert und wird nicht explizit durch ein R-Feld der Anweisung ausgewiesen.
  • Neben ihrer Verwendung als Akkumulatoren bei allgemeinen Rechen- und logischen Operationen werden 15 der 16 allgemeinen Register auch als Basisadresse und Indexregister bei der Adresserzeugung verwendet. In diesen Fällen werden die Register durch ein 4-Bit-B-Feld oder -X-Feld in einer Anweisung ausgewiesen. Ein Wert von Null im B- oder X-Feld legt fest, dass keine Basis oder kein Index anzuwenden ist, und somit wird das allgemeine Register 0 nicht als eine Basisadresse oder einen Index enthaltend ausgewiesen.
  • Gleitkommaanweisungen verwenden einen Satz von Gleitkommaregistern. Die CPU hat bei einer Ausführungsform 16 Gleitkommaregister. Die Gleitkommaregister werden durch die Zahlen 0 bis 15 gekennzeichnet und in einer Gleitkommaanweisung durch ein 4-Bit-R-Feld ausgewiesen. Jedes Gleitkommaregister ist 64 Bit lang und kann entweder einen kurzen (32-Bit-) oder einen langen (64-Bit-)Gleitkommaoperanden enthalten.
  • Ein Gleitkommasteuer-(Floating Point Control, FPC-)Register ist ein 32-Bit-Register, das Maskenbits, Markierungsbits, einen Datenausnahmecode und Rundungsmodusbits enthält und während der Verarbeitung von Gleitkommaoperationen verwendet wird.
  • Darüber hinaus hat die CPU bei einer Ausführungsform 16 Steuerregister, wobei jedes 64 Bit-Positionen aufweist. Die Bit-Positionen in den Registern sind bestimmten Einrichtungen im System zugewiesen, z.B. Programmereignisaufzeichnung (PER, Program Event Recording) (im Folgenden erörtert), und werden entweder verwendet, um festzulegen, dass eine Operation erfolgen kann, oder um spezifische Informationen zu liefern, die die Einrichtung benötigt. Bei einer Ausführungsform werden für die Transaktionseinrichtung CRC (Bits 8 und 9) und CR2 (Bits 61 bis 63) verwendet, wie im Folgenden beschrieben.
  • Die CPU hat beispielsweise 16 Zugriffsregister mit der Nummerierung 0 bis 15. Ein Zugriffsregister besteht aus 32 Bitpositionen, die eine indirekte Spezifikation eines Adressraum-Steuerelements (ASCE, Address Space Control Element) enthalten. Ein Adressraum-Steuerelement ist ein Parameter, der vom Mechanismus der dynamischen Adressumsetzung (DAT, Dynamic Address Translation) verwendet wird, um Verweise auf einen entsprechenden Adressraum umzusetzen. Wenn sich die CPU in einem Modus befindet, der Zugriffsregistermodus genannt wird (von den Bits im Programmstatuswort (PSW) gesteuert), weist ein zum Spezifizieren einer logischen Adresse für einen Speicheroperandenverweis verwendetes Anweisungs-B-Feld ein Zugriffsregister aus, und das vom Zugriffsregister spezifizierte Adressraum-Speicherelement wird von der DAT für den durchgeführten Verweis verwendet. Bei einigen Anweisungen wird ein R-Feld anstatt eines B-Feldes verwendet. Anweisungen werden zum Laden und Speichern der Inhalte der Zugriffsregister und zum Versetzen der Inhalte eines Zugriffsregisters in ein anderes bereitgestellt.
  • Jedes der Zugriffsregister 1 bis 15 kann einen beliebigen Adressraum ausweisen. Das Zugriffsregister 0 weist den Primäranweisungsraum aus. Wenn eines der Zugriffsregister 1 bis 15 verwendet wird, um einen Adressraum auszuweisen, ermittelt die CPU, welcher Adressraum ausgewiesen ist, indem sie die Inhalte des Zugriffsregisters umsetzt. Wenn das Zugriffsregister 0 verwendet wird, um einen Adressraum auszuweisen, behandelt die CPU das Zugriffsregister als den Primäranweisungsraum ausweisend und untersucht die tatsächlichen Inhalte des Zugriffsregisters nicht. Aus diesem Grund können die 16 Zugriffsregister den Primäranweisungsraum und maximal 15 andere Räume zu einem beliebigen Zeitpunkt ausweisen.
  • Bei einer Ausführungsform liegen mehrere Adressraumtypen vor. Ein Adressraum ist eine aufeinanderfolgende Abfolge von ganzen Zahlen (virtuelle Adressen) gemeinsam mit den spezifischen Umwandlungsparametern, die ermöglichen, dass jede Zahl einer Byte-Position im Speicher zugeordnet wird. Die Abfolge beginnt bei Null und setzt von links nach rechts fort.
  • Beispielsweise bei der z/Architecture wird, wenn eine virtuelle Adresse von einer CPU zum Zugreifen auf einen Hauptspeicher (auch als Arbeitsspeicher bekannt) verwendet wird, diese zunächst mithilfe einer dynamischen Adressumsetzung (DAT) in einer reale Adresse und danach durch Voranstellen in eine absolute Adresse umgewandelt. Die DAT kann eine bis fünf Tabellenebenen (Seite, Segment, Region drei, Region zwei und Region eins) als Umwandlungsparameter verwenden. Das Ausweisen (Ursprung und Länge) der Tabelle der höchsten Ebene für einen spezifischen Adressraum wird Adressraum-Steuerelement genannt und wird zur Verwendung durch die DAT in einem Steuerregister oder wie von einem Zugriffsregister spezifiziert vorgesehen. Alternativ kann das Adressraum-Steuerelement für einen Adressraum ein Ausweisen eines realen Raums sein, das anzeigt, dass DAT die virtuelle Adresse umsetzen kann, indem sie sie lediglich als eine reale Adresse behandelt und keine Tabellen verwendet.
  • Die DAT verwendet die Adressraum-Steuerelemente zu unterschiedlichen Zeitpunkten in unterschiedlichen Steuerregistern oder wie durch die Zugriffsregister spezifiziert. Die Wahl wird durch den Umsetzungsmodus bestimmt, der im aktuellen PSW spezifiziert ist. Es sind weitere Umsetzungsmodi verfügbar: Primärbereichsmodus, Sekundärbereichsmodus, Zugriffsregistermodus und Modus für Ausgangsspeicherbereich. Je nach Umsetzungsmodus sind unterschiedliche Adressräume adressierbar.
  • In jedem Fall kann die CPU, wenn sich die CPU im Primärbereichsmodus oder Sekundärbereichsmodus befindet, virtuelle Adressen umsetzen, die zu zwei Adressräumen - dem Primäradressraum und dem Sekundäradressraum - gehören. In jedem Fall kann die CPU, wenn sie sich im Zugriffsregistermodus befindet, virtuelle Adressen von bis zu 16 Adressräumen - dem Primäradressraum und bis zu 15 AR-spezifizierte Adressräume - umsetzen. In jedem Fall kann die CPU, wenn sie sich im Modus für Ausgangsspeicherbereich befindet, virtuelle Adressen des Speicherbereichs für Ausgangsadresse umsetzen.
  • Der Primäradressraum wird als solcher gekennzeichnet, da er aus primären virtuellen Adressen besteht, die mithilfe des primären Adressraum-Steuerelements (ASCE) umgesetzt werden. Gleichermaßen besteht der Sekundäradressraum aus sekundären virtuellen Adressen, die mithilfe des sekundären ASCE umgesetzt werden; die AR-spezifizierten Adressräume bestehen aus AR-spezifizierten virtuellen Adressen, die mithilfe von AR-spezifizierten ASCEs umgesetzt werden; und der Speicherbereich für Ausgangsadresse besteht aus virtuellen Ausgangsadressen, die mithilfe des Ausgangs-ASCE umgesetzt werden. Die primären und sekundären ASCEs liegen im Steuerregister 1 bzw. 7 vor. AR-spezifizierte ASCEs liegen in Einträgen der zweiten Tabelle für ASN vor, die mithilfe der Steuerregister 2, 5 und 8 über einen Prozess lokalisiert werden, der sich Zugriffsregisterumsetzung (ART, Access Register Translation) nennt. Das Ausgangs-ASCE liegt im Steuerregister 13 vor.
  • Eine Ausführungsform einer Datenverarbeitungsumgebung, die eine oder mehrere Aspekte der hier beschriebenen Transaktionseinrichtung integriert und verwendet, wird in Bezug auf 1 beschrieben.
  • Unter Bezugnahme auf 1 beruht eine Datenverarbeitungsumgebung 100 bei einem Beispiel auf der z/Architecture, die von der International Business Machines (IBM®) Corporation, Armonk, New York, angeboten wird. Die z/Architecture ist in einer IBM-Veröffentlichung mit dem Titel „z/Architecture - Principles of Operation“, Veröffentlichungsnummer SA22-7932-08, 9. Ausgabe, August 2010, beschrieben, die hiermit durch Bezugnahme in ihrer Gesamtheit aufgenommen ist.
  • Z/ARCHITECTURE, IBM, und Z/OS und Z/VM (im Folgenden verwiesen) sind eingetragene Marken der International Business Machines Corporation, Armonk, New York. Andere hier verwendete Namen können eingetragene Marken, Marken oder Produktnamen der International Machines Corporation oder anderer Unternehmen sein.
  • Beispielsweise enthält die Datenverarbeitungsumgebung 100 einen Zentralprozessorkomplex (CPC, Central Processor Complex) 102, der über eine oder mehrere Steuereinheiten 108 mit einer oder mehreren Eingabe/Ausgabe-(E/A-)Einheiten 106 verbunden ist. Der Zentralprozessorkomplex 102 enthält beispielsweise einen oder mehrere Zentralprozessoren, eine oder mehrere Partitionen 112 (z.B. logische Partitionen, LP), einen Hypervisor 114 für logische Partitionen und ein Eingabe/Ausgabe-Teilsystem 115, die jeweils im Folgenden beschrieben sind.
  • Die Zentralprozessoren 110 sind physische Prozessorressourcen, die den logischen Partitionen zugeordnet sind. Insbesondere hat jede logische Partition 112 einen oder mehrere logische Prozessoren, wobei jeder davon den gesamten der Partition zugeordneten physischen Prozessor 110 oder einen Teil davon repräsentiert. Die logischen Prozessoren einer bestimmten Partition 112 können entweder speziell für die Partition vorgesehen sein, so dass die zugrunde liegende Prozessorressource 110 für diese Partition reserviert ist; oder sie können gemeinsam mit einer anderen Partition genutzt werden, so dass die zugrunde liegende Ressource möglicherweise für eine weitere Partition zur Verfügung steht.
  • Eine logische Partition agiert als separates System und enthält eine oder mehrere Anwendungen und gegebenenfalls ein residentes Betriebssystem, wobei dies bei jeder logischen Partition unterschiedlich sein kann. Bei einer Ausführungsform ist das Betriebssystem das z/OS-Betriebssystem, das z/VM-Betriebssystem, das z/Linux-Betriebssystem oder das TPF-Betriebssystem, das von der International Business Machines Corporation, Armonk, New York, angeboten wird. Die logischen Partitionen 112 werden von einem Hypervisor 114 für logische Partitionen verwaltet, der durch auf Prozessoren 110 ausgeführte Firmware implementiert ist. Wie hier verwendet, beinhaltet Firmware z.B. den Mikrocode und/oder den Millicode des Prozessors. Sie beinhaltet beispielsweise Anweisungen auf Hardware-Ebene und/oder Datenstrukturen, die bei der Implementierung eines Maschinencodes der höheren Ebene verwendet werden. Bei einer Ausführungsform beinhaltet sie beispielsweise einen proprietären Code, der für gewöhnlich als Mikrocode, der eine vertrauenswürdige Software enthält, oder als Mikrocode bereitgestellt wird, der für die zugrunde liegende Hardware spezifisch ist und den Zugriff des Betriebssystems auf die System-Hardware steuert.
  • Die logischen Partitionen und der Hypervisor für logische Partitionen weisen jeweils ein oder mehrere Programme auf, die sich in jeweiligen Partitionen eines Zentralspeichers befinden, der den Zentralprozessoren zugehörig ist. Ein Beispiel für den Hypervisor 114 für logische Partitionen ist der Processor Resource/System Manager (PR/SM), der von der International Business Machines Corporation, Armonk, New York, angeboten wird.
  • Das Eingabe/Ausgabe-Teilsystem 115 steuert den Datenfluss zwischen den Eingabe/Ausgabe-Einheiten 106 und dem Hauptspeicher (auch als Arbeitsspeicher bekannt). Es ist mit dem Zentralverarbeitungskomplex dahingehend verbunden, dass es ein Teil des Zentralverarbeitungskomplexes sein oder getrennt davon vorliegen kann. Das E/A-Teilsystem nimmt den Zentralprozessoren die Aufgabe des direkten Datenaustauschs mit den Eingabe/Ausgabe-Einheiten ab und ermöglicht, dass die Datenverarbeitung gleichzeitig mit der Eingabe/Ausgabe-Verarbeitung fortfährt. Um einen Datenaustausch bereitzustellen, verwendet das E/A-Teilsystem E/A-Kommunikationsadapter. Es gibt verschiedene Typen von Kommunikationsadaptern, beispielsweise Kanäle, E/A-Adapter, PCI-Karten, Ethernet-Karten, Small-Computer Storage-Interface-(SCSI-)Karten usw. Bei dem bestimmten hier beschriebenen Beispiel sind die E/A-Kommunikationsadapter Kanäle, und aus diesem Grund wird das E/A-Teilsystem hier als Kanal-Teilsystem bezeichnet. Dies ist jedoch lediglich ein Beispiel. Es können andere Typen von E/A-Teilsystemen verwendet werden.
  • Das E/A-Teilsystem verwendet einen oder mehrere Eingabe/Ausgabe-Pfade wie Datenübertragungsverbindungen beim Verwalten des Datenflusses zu den Eingabe/Ausgabe-Einheiten 106 oder von diesen. Bei diesem bestimmten Beispiel werden diese Pfade Kanalpfade genannt, da die Kommunikationsadapter Kanäle sind.
  • Die oben beschriebene Datenverarbeitungsumgebung ist lediglich ein Beispiel für eine Datenverarbeitungsumgebung, die verwendet werden kann. Andere Umgebungen, beispielsweise nichtpartitionierte Umgebungen, andere partitionierte Umgebungen und/oder emulierte Umgebungen, ohne jedoch auf diese beschränkt zu sein, können verwendet werden und sind nicht auf eine Umgebung beschränkt.
  • Gemäß einem oder mehreren Aspekten handelt es sich bei der Einrichtung für transaktionsorientierte Ausführung um eine CPU-Erweiterung, die das Mittel bereitstellt, mit dem die CPU eine Anweisungsabfolge - als Transaktion bekannt - ausführen kann, die gegebenenfalls auf mehrere Speicherorte zugreifen kann, was das Aktualisieren dieser Speicherorte einschließt. Wie durch andere CPUs und das E/A-Teilsystem wahrgenommen, wird die Transaktion entweder (a) in ihrer Gesamtheit als einzelne atomare Operation ausgeführt oder (b) abgebrochen, wobei gegebenenfalls kein Nachweis dafür zurückbleibt, dass sie jemals ausgeführt worden ist (mit Ausnahme bestimmter hier beschriebener Bedingungen). Somit kann eine erfolgreich ausgeführte Transaktion zahlreiche Speicherorte ohne eine spezifische Sperre aktualisieren, die bei einem klassischen Multiprozessormodell erforderlich ist.
  • Die Einrichtung für transaktionsorientierte Ausführung enthält beispielsweise eine oder mehrere Steuerungen; eine oder mehrere Anweisungen; Transaktionsverarbeitung, darunter eingeschränkte und nichteingeschränkte Ausführung; und Abbruchverarbeitung, die im Folgenden jeweils ausführlicher beschrieben werden.
  • Bei einer Ausführungsform werden drei spezielle Steuerungen verwendet, die ein Transaktionsabbruch-Programmstatuswort (PSW), eine Transaktionsdiagnoseblock-(TDB-)Adresse und eine Transaktionsverschachtelungstiefe; fünf Steuerregisterbits; und sechs allgemeine Anweisungen, darunter TRANSACTION BEGIN (eingeschränkt und nichteingeschränkt), TRANSACTION END, EXTRACT TRANSACTION NESTING DEPTH, TRANSACTION ABORT und NONTRANSACTIONAL STORE enthalten, um die Einrichtung für transaktionsorientierte Ausführung zu steuern. Wenn die Einrichtung installiert ist, ist sie beispielsweise in allen CPUs in der Konfiguration installiert. Eine Einrichtungsanzeige zeigt bei einer Implementierung gegebenenfalls durch Bit 73 an, dass die Transaktionsausführeinrichtung installiert ist.
  • Wenn die Einrichtung für transaktionsorientierte Ausführung installiert ist, stellt die Konfiguration eine Einrichtung für nichteingeschränkte transaktionsorientierte Ausführung und gegebenenfalls eine eingeschränkte Einrichtung für transaktionsorientierte Ausführung bereit, die jeweils im Folgenden beschrieben sind. Wenn Einrichtungsanzeigen 50 und 73 beispielsweise beide eins sind, ist die eingeschränkte Einrichtung für transaktionsorientierte Ausführung installiert. Beide Einrichtungsanzeigen werden an spezifizierten Speicherorten im Speicher gespeichert.
  • Wie hier verwendet, bezieht sich die Anweisungsbezeichnung TRANSACTION BEGIN auf die Anweisungen mit den mnemonischen Zeichen TBEGIN (Transaction Begin für eine nichteingeschränkte Transaktion) und TBEGINC (Transaction Begin für eine eingeschränkte Transaktion). Erörterungen bezüglich einer spezifischen Anweisung sind durch die Anweisungsbezeichnung, gefolgt von dem mnemonischen Zeichen in runden oder eckigen Klammern, oder einfach durch das mnemonische Zeichen angezeigt.
  • Eine Ausführungsform eines Formats einer Anweisung TRANSACTION BEGIN (TBEGIN) ist in den 2A bis 2B gezeigt. Beispielsweise enthält eine Anweisung TBEGIN 200 ein Operationscodefeld 202, das einen Operationscode beinhaltet, der eine nichteingeschränkte Transaction Begin-Transaktion spezifiziert; ein Basisfeld (B1) 204; ein Verschiebungsfeld (D1) 206 und ein Direktfeld (I2) 208. Wenn das B1-Feld ungleich null ist, werden die von B1 204 spezifizierten Inhalte des allgemeinen Registers zu D1 206 hinzugefügt, um die Adresse des ersten Operanden zu erhalten.
  • Wenn das B1-Feld ungleich null ist, gilt Folgendes:
    • * Wenn die Transaktionsverschachtelungstiefe zu Beginn null ist, weist die Adresse des ersten Operanden den Speicherort des 256-Byte-Transaktionsdiagnoseblocks, TBEGIN-spezifizierter TDB genannt (weiter unten beschrieben), aus, in den verschiedene Diagnoseinformationen gespeichert werden können, wenn die Transaktion abgebrochen wird. Wenn sich die CPU im Primärbereichmodus oder Zugriffsregistermodus befindet, weist die Adresse des ersten Operanden einen Speicherort im Primäradressraum aus. Wenn sich die CPU im Sekundärbereichmodus oder Modus für Ausgangsspeicherbereich befindet, weist die Adresse des ersten Operanden einen Speicherort im Sekundäradressraum bzw. im Speicherbereich für Ausgangsadresse aus. Wenn DAT ausgeschaltet ist, weist die Transaktionsdiagnoseblock-(TDB-)Adresse (TDBA) einen Speicherort in einem realen Speicher aus.
    • Es wird die Speicherzugänglichkeit für den ersten Operanden ermittelt. Ist er zugänglich, wird die logische Adresse des Operanden in der Transaktionsdiagnoseblock-Adresse (TBDA) platziert, und die TDBA ist gültig.
    • * Wenn sich die CPU bereits im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, wird die TDBA nicht geändert, und es kann nicht vorhergesagt werden, ob der erste Operand auf Zugänglichkeit geprüft wurde.
  • Wenn das B1-Feld null ist, werden für den ersten Operanden keine Zugriffsausnahmen erkannt, und die TDBA für die äußerste TBEGIN-Anweisung ist ungültig.
  • Die Bits des I2-Felds sind bei einem Beispiel wie folgt definiert:
  • Speichermaske für allgemeine Register (GRSM, General Register Save Mask) 210 (2B): Bits 0 bis 7 des I2-Feldes enthalten die Speichermaske für allgemeine Register (GRSM). Jedes Bit der GRSM stellt ein geradzahliges-ungeradzahliges Paar allgemeiner Register dar, wobei Bit 0 Register 0 und 1 darstellt, Bit 1 Register 2 und 3 darstellt usw. Wenn ein Bit in der GRSM der äußersten TBEGIN-Anweisung null ist, wird das entsprechende Registerpaar nicht gespeichert. Wenn ein Bit in der GRSM der äußersten TBEGIN-Anweisung eins ist, wird das entsprechende Registerpaar in einem modellabhängigen Speicherort gespeichert, der für das Programm nicht direkt zugänglich ist.
  • Wenn die Transaktion abgebrochen wird, werden gespeicherte Registerpaare wieder auf ihre Inhalte zurückgesetzt, die sie hatten, als die äußerste Anweisung TBEGIN ausgeführt wurde. Die Inhalte aller anderen (nicht gespeicherten) allgemeinen Register werden bei einem Transaktionsabbruch nicht wiederhergestellt.
  • Die Speichermaske für allgemeine Register wird bei allen TBEGINs mit Ausnahme der äußersten ignoriert.
  • AR-Änderung zulassen (A) 212: Die A-Steuerung, Bit 12 des I2-Felds, steuert, ob die Transaktion ein Zugriffsregister ändern darf. Die effektive Steuerung zum Zulassen einer AR-Änderung ist das logische UND der A-Steuerung in der TBEGIN-Anweisung für die aktuelle Verschachtelungsebene und für alle anderen äußeren Ebenen.
  • Wenn die effektive A-Steuerung null ist, wird die Transaktion mit einem Abbruchcode 11 (eingeschränkte Anweisung) abgebrochen, wenn versucht wird, ein Zugriffsregister zu ändern. Wenn die effektive A-Steuerung eins ist, wird die Transaktion nicht abgebrochen, wenn ein Zugriffsregister geändert wird (bei Fehlen anderer Abbruchsbedingungen).
  • Gleitkommaoperation zulassen (F) 214: Die F-Steuerung, Bit 13 des I2-Feldes, steuert, ob die Transaktion die spezifizierten Gleitkommaanweisungen ausführen darf. Die effektive Steuerung zum Zulassen einer Gleitkommaoperation ist das logische UND der F-Steuerung in der Anweisung TBEGIN für die aktuelle Verschachtelungsebene und für alle äußeren Ebenen.
  • Wenn die effektive F-Steuerung null ist, wird (a) die Transaktion mit einem Abbruchcode 11 (eingeschränkte Anweisung) abgebrochen, wenn versucht wird, eine Gleitkommaanweisung auszuführen, und (b) der Datenausnahmecode (DXC, Data Exception Code) in Byte 2 des Gleitkomma-Steuerregisters (FPCR) von keiner Datenausnahme-Programmausnahme-Bedingung gesetzt. Wenn die effektive F-Steuerung eins ist, (a) wird die Transaktion nicht abgebrochen, wenn versucht wird, eine Gleitkommaanweisung auszuführen (wenn keine andere Abbruchbedingung vorliegt), und (b) kann der DXC im FPCR von einer Datenausnahme-Programmausnahme-Bedingung gesetzt werden.
  • Programmunterbrechungsfilterungs-Steuerung (PIFC, Programm Interruption Filtering Control) 216: Bits 14 bis 15 des I2-Feldes sind die Programmunterbrechungsfilterungs-Steuerung (PIFC). Die PIFC steuert, ob gewisse Klassen von Programmausnahmebedingungen (z.B. Adressierausnahme, Datenausnahme, Operationsausnahme, Schutzausnahme usw.), die auftreten, während sich die CPU im Modus der transaktionsorientierten Ausführung befindet, zu einer Unterbrechung führen.
  • Die effektive PIFC ist der höchste Wert der PIFC in der Anweisung TBEGIN für die aktuelle Verschachtelungsebene und für alle äußeren Ebenen. Wenn die effektive PIFC null ist, führen alle Programmausnahmebedingungen zu einer Unterbrechung. Wenn die effektive PIFC eins ist, führen Programmausnahmebedingungen mit einer Klasse 1 und 2 der transaktionsorientierten Ausführung zu einer Unterbrechung. (Jeder Programmausnahmebedingung ist je nach Schweregrad der Ausnahme zumindest eine Klasse der transaktionsorientierten Ausführung zugewiesen. Der Schweregrad beruht auf der Wahrscheinlichkeit einer Wiederherstellung während einer wiederholten Ausführung der transaktionsorientierten Ausführung und darauf, ob das Betriebssystem die Unterbrechung sehen muss.) Wenn die effektive PIFC zwei ist, führen Programmausnahmebedingungen mit einer Klasse 1 der transaktionsorientierten Ausführung zu einer Unterbrechung. Eine PIFC von 3 ist reserviert.
  • Bits 8 bis 11 des I2-Feldes (Bits 40 bis 43 der Anweisung) sind reserviert und sollten Nullen enthalten; andernfalls kann das Programm künftig nicht kompatibel arbeiten.
  • Eine Ausführungsform eines Formats einer Anweisung Transaction Begin constrained (TBEGINC) wird unter Bezugnahme auf die 3A bis 3B beschrieben. Beispielsweise enthält eine TBEGINC 300 ein Operationscodefeld 302, das einen Operationscode beinhaltet, der eine Operation Begin constrained Transaktion spezifiziert; ein Basisfeld (B1) 304; ein Verschiebungsfeld (D1) 206 und ein Direktfeld (I2) 308. Die durch B1 304 spezifizierten Inhalte des allgemeinen Registers werden zu D1 306 hinzufügt, um die Adresse des ersten Operanden zu erhalten. Bei der Anweisung Transaction begin constrained wird die Adresse des ersten Operanden jedoch nicht zum Speicherzugriff verwendet. Stattdessen enthält das B1-Feld der Anweisung Nullen; andernfalls wird eine Spezifikationsausnahme erkannt.
  • Bei einer Ausführungsform enthält das I2-Feld verschiedene Steuerungen, wobei ein Beispiel davon in 3B gezeigt ist.
  • Die Bits des I2-Felds sind bei einem Beispiel wie im Folgenden definiert:
  • Speichermaske für allgemeine Register (GRSM) 310: Bits 0 bis 7 des I2-Feldes enthalten die Speichermaske für allgemeine Register (GRSM). Jedes Bit der GRSM stellt ein geradzahliges-ungeradzahliges Paar allgemeiner Register dar, wobei Bit 0 Register 0 und 1 darstellt, Bit 1 Register 2 und 3 darstellt usw. Wenn ein Bit in der GRSM null ist, wird das entsprechende Registerpaar nicht gespeichert. Wenn ein Bit in der GRSM null ist, wird das entsprechende Registerpaar in einem modellabhängigen Speicherort gespeichert, der für das Programm nicht direkt zugänglich ist.
  • Wenn die Transaktion abgebrochen wird, werden gespeicherte Registerpaar wieder auf ihre Inhalte zurückgesetzt, die sie hatten, als die äußerste Anweisung TRANSACTION BEGIN ausgeführt wurde. Die Inhalte aller anderen (nicht gespeicherten) allgemeinen Register werden nicht wiederhergestellt, wenn eine eingeschränkte Transaktion abgebrochen wird.
  • Wenn TBEGINC verwendet wird, um eine Ausführung im Modus der nichteingeschränkten transaktionsorientierten Ausführung fortzusetzen, wird die Speichermaske für allgemeine Register ignoriert.
  • AR-Änderung zulassen (A) 312: Die A-Steuerung, Bit 12 des I2-Felds, steuert, ob die Transaktion ein Zugriffsregister ändern darf. Die effektive Steuerung zum Zulassen einer AR-Änderung ist das logische UND der A-Steuerung in der Anweisung TBEGINC für die aktuelle Verschachtelungsebene und für alle äußeren Anweisungen TBEGIN oder TBEGINC.
  • Wenn die effektive A-Steuerung null ist, wird die Transaktion mit einem Abbruchcode 11 (eingeschränkte Anweisung) abgebrochen, wenn versucht wird, ein Zugriffsregister zu ändern. Wenn die effektive A-Steuerung eins ist, wird die Transaktion nicht abgebrochen, wenn ein Zugriffsregister geändert wird (bei Fehlen anderer Abbruchsbedingungen).
  • Bits 8 bis 11 und 13 bis 15 des I2-Feldes (Bits 40 bis 43 und 45 bis 47 der Anweisung) sind reserviert und sollten Nullen enthalten.
  • Das Ende einer Anweisung Transaction Begin wird durch eine Anweisung TRANSACTION END (TEND) spezifiziert, ein Format, das in 4 gezeigt ist. Eine Anweisung TEND 400 beispielsweise enthält ein Operationscodefeld 402, das einen Operationscode enthält, der eine Transaktionsende-Operation spezifiziert.
  • In Bezug auf die Einrichtung für transaktionsorientierte Ausführung wird eine Vielzahl von Ausdrücken verwendet, und daher wird im Folgenden der Einfachheit halber eine Liste der Ausdrücke in alphabetischer Reihenfolge bereitgestellt. Bei einer Ausführungsform haben diese Ausdrücke die folgende Definition:
  • Abbrechen: Eine Transaktion wird abgebrochen, wenn sie vor einer Anweisung TRANSACTION END beendet wird, die zu einer Transaktionsverschachtelungstiefe von null führt. Wenn eine Transaktion abgebrochen wird, geschieht bei einer Ausführungsform Folgendes:
    • * Transaktionsorientierte Speicherzugriffe, die von jeder und allen Transaktionsebenen durchgeführt werden, werden verworfen (d.h. nicht festgeschrieben).
    • * Nichttransaktionsorientierte Speicherzugriffe, die von jeder und allen Transaktionsebenen durchgeführt werden, werden festgeschrieben.
    • * Von der Speichermaske für allgemeine Register (GRSM) der äußersten Anweisung TRANSACTION BEGIN ausgewiesene Register werden auf ihre Inhalte zurückgesetzt, die sie vor der transaktionsorientierten Ausführung hatten (d.h. auf ihre Inhalte beim Ausführen der äußersten Anweisung TRANSACTION BEGIN). Allgemeine Register, die nicht von der Speichermaske für allgemeine Register der äußersten Anweisung TRANSACTION BEGIN ausgewiesen sind, werden nicht zurückgesetzt.
    • * Zugriffsregister, Gleitkommaregister und das Gleitkomma-Steuerregister werden nicht zurückgesetzt. Jedwede Änderungen, die während der transaktionsorientierten Ausführung an diesen Registern vorgenommen wurden, werden im Fall eines Transaktionsabbruchs beibehalten.
  • Eine Transaktion kann aus diversen Gründen abgebrochen werden, beispielsweise ein versuchtes Ausführen einer eingeschränkten Anweisung, ein versuchtes Ändern einer eingeschränkten Ressource, ein Transaktionskonflikt, Übersteigen verschiedener CPU-Ressourcen, eine Abfangbedingung einer interpretativen Ausführung, eine Unterbrechung, eine Anweisung TRANSACTION ABORT und andere Gründe. Ein Transaktionsabbruchcode stellt spezifische Gründe dafür bereit, warum eine Transaktion abgebrochen werden könnte.
  • Ein Beispiel für ein Format einer Anweisung TRANSACTION ABORT (TABORT) ist unter Bezugnahme auf 5 beschrieben. Eine Anweisung TABORT 500 beispielsweise enthält ein Operationscodefeld 502, das einen Operationscode enthält, der eine Transaktionsabbruchoperation spezifiziert; ein Basisfeld (B2) 504; und ein Verschiebungsfeld (D2) 506. Wenn das B2-Feld ungleich null ist, werden die durch B2 504 spezifizierten Inhalte des allgemeinen Registers zu D2 506 hinzugefügt, um eine Adresse des zweiten Operanden zu erhalten; andernfalls wird die Adresse des zweiten Operanden lediglich aus dem D2-Feld gebildet, und das B2-Feld wird ignoriert. Die Adresse des zweiten Operanden wird nicht verwendet, um Daten zu adressieren; stattdessen bildet die Adresse den Transaktionsabbruchcode, der während der Abbruchverarbeitung in einem Transaktionsdiagnoseblock platziert wird. Eine Adressberechnung für die Adresse des zweiten Operanden folgt den Regeln der Adressrechnung: im 24-Bit-Adressiermodus werden Bits 0 bis 29 auf Nullen gesetzt; im 31-Bit-Adressiermodus werden Bits 0 bis 32 auf Nullen gesetzt.
  • Festschreiben: Beim Ausführen einer äußersten Anweisung TRANSACTION END schreibt die CPU die von der Transaktion (d.h. der äußersten Transaktion und jedweden Verschachtelungsebenen) durchgeführten Speicherzugriffe fest, so dass sie für andere CPUs und das E/A-Teilsystem sichtbar sind. Wie durch andere CPUs und die E/A-Teilsysteme wahrgenommen, scheinen alle Abruf- und Speicherzugriffe, die von allen Verschachtelungsebenen der Transaktion durchgeführt werden, als einzelne gleichzeitige Operation zu erfolgen, wenn das Festschreiben erfolgt.
  • Die Inhalte der allgemeinen Register, Zugriffsregister, Gleitkommaregister und des Gleitkomma-Steuerregisters werden durch den Festschreibprozess nicht geändert. Jedwede Änderungen, die während der transaktionsorientierten Ausführung an diesen Registern vorgenommen wurden, werden beibehalten, wenn die Speichervorgänge der Transaktion festgeschrieben werden.
  • Konflikt: Ein von einer CPU durchgeführter transaktionsorientierter Zugriff steht im Konflikt mit entweder (a) einem transaktionsorientiertem Zugriff oder einem nichttransaktionsorientiertem Zugriff, der von einer anderen CPU durchgeführt wurde; oder (b) einem vom E/A-Teilsystem durchgeführten nichttransaktionsorientierten Zugriff innerhalb der gleichen Cachespeicherzeile, und bei ein oder mehreren der Zugriffe handelt es sich um einen Speichervorgang.
  • Ein Konflikt kann durch eine spekulative Ausführung von Anweisungen durch eine CPU erkannt werden, auch wenn der Konflikt in der konzeptionellen Abfolge eventuell nicht erkannt wird.
  • Eingeschränkte Transaktion: Eine eingeschränkte Transaktion ist eine Transaktion, die im Modus der eingeschränkten transaktionsorientierten Ausführung ausgeführt wird und den folgenden Einschränkungen unterliegt:
    • * Ein Teilsatz der allgemeinen Anweisungen ist verfügbar.
    • * Eine begrenzte Anzahl von Anweisungen kann ausgeführt werden.
    • * Eine begrenzte Anzahl von Speicheroperanden-Speicherorten ist zugänglich.
    • * Die Transaktion ist auf eine einzige Verschachtelungsebene beschränkt.
  • Wenn keine wiederholten Unterbrechungen oder Konflikte mit anderen CPUs oder dem E/A-Teilsystem vorliegen, wird eine eingeschränkte Transaktion schließlich ausgeführt, wodurch keine Abbruch-Handler-Routine erforderlich ist. Eingeschränkte Transaktionen sind im Folgenden ausführlich beschrieben.
  • Wenn eine Anweisung TRANSACTION BEGIN constrained (TBEGINC) ausgeführt wird, während sich die CPU bereits im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, wird das Ausführen als nichteingeschränkte verschachtelte Transaktion fortgesetzt.
  • Modus der eingeschränkten transaktionsorientierten Ausführung: Wenn die Transaktionsverschachtelungstiefe null ist und eine Transaktion durch eine Anweisung TBEGINC eingeleitet wird, geht die CPU in den Modus der eingeschränkten transaktionsorientierten Ausführung über. Während sich die CPU im Modus der eingeschränkten transaktionsorientierten Ausführung befindet, ist die Transaktionsverschachtelungstiefe eins.
  • Verschachtelte Transaktion: Wenn die Anweisung TRANSACTION BEGIN ausgegeben wird, während sich die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, wird die Transaktion verschachtelt.
  • Die Einrichtung für transaktionsorientierte Ausführung verwendet ein Modell mit der Bezeichnung „Reduzierte Verschachtelung“. Im reduzierten Verschachtelungsmodus sind Speichervorgänge, die von einer inneren Transaktion durchgeführt werden, für andere CPUs und das E/A-Teilsystem solange nicht wahrnehmbar, bis die äußerste Transaktion ihre Speichervorgänge festschreibt. Wenn eine Transaktion abgebrochen wird, werden gleichermaßen alle verschachtelten Transaktionen abgebrochen, und alle transaktionsorientierten Speichervorgänge aller verschachtelten Transaktionen werden verworfen.
  • Ein Beispiel für verschachtelte Transaktionen ist in 6 gezeigt. Wie gezeigt, beginnt eine TBEGIN 600 einer äußerste Transaktion 601, TBEGIN 602 beginnt eine erste verschachtelte Transaktion und TBEGIN 604 beginnt eine zweite verschachtelte Transaktion. In diesem Beispiel definieren TBEGIN 604 und TBEGIN 606 eine innerste Transaktion 608. Wenn TEND 610 ausgeführt wird, werden transaktionsorientierte Speichervorgänge für die äußerste Transaktion und alle inneren Transaktionen festgeschrieben 612.
  • Nichteingeschränkte Transaktion: Eine nichteingeschränkte Transaktion ist eine Transaktion, die im Modus der nichteingeschränkten transaktionsorientierten Ausführung ausgeführt wird. Auch wenn eine nichteingeschränkte Transaktion nicht auf die Art und Weise wie eine eingeschränkte Transaktion eingeschränkt ist, kann sie dennoch aus diversen Gründen abgebrochen werden.
  • Modus der nichteingeschränkten transaktionsorientierten Ausführung: Wenn eine Transaktion durch die Anweisung TBEGIN eingeleitet wird, geht die CPU in den Modus der nichteingeschränkten transaktionsorientierten Ausführung über. Während sich die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, kann die Transaktionsverschachtelungstiefe von eins bis zur maximalen Transaktionsverschachtelungstiefe variieren.
  • Nichttransaktionsorientierter Zugriff: Nichttransaktionsorientierte Zugriffe sind von der CPU durchgeführte Speicheroperandenzugriffe, während sie sich nicht im Modus der transaktionsorientierten Ausführung befindet (d.h. klassische Speicherzugriffe außerhalb einer Transaktion). Darüber hinaus sind vom E/A-Teilsystem durchgeführte Zugriffe nichttransaktionsorientierte Zugriffe. Ferner kann die Anweisung NONTRANSACTION STORE verwendet werden, um einen nichttransaktionsorientierten Speicherzugriff zu verursachen, während sich die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet.
  • Eine Ausführungsform eines Formats einer Anweisung NONTRANSACTIONAL STORTE wird unter Bezugnahme auf 7 beschrieben. Eine Anweisung NONTRANSACTION STORE 700 beispielsweise enthält eine Vielzahl von Operationscodefeldern 702a, 702b, die einen Operationscode spezifizieren, der eine nichttransaktionsorientierte Speicheroperation ausweist; ein Registerfeld (R1) 704, das ein Register spezifiziert, dessen Inhalt als der erste Operand bezeichnet werden; ein Indexfeld (X2) 706; ein Basisfeld (B2) 708; ein erstes Verschiebungsfeld (DL2) 710; und ein zweites Verschiebungsfeld (DH2) 712. Die durch die X2- und B2-Felder ausgewiesenen Inhalte der allgemeinen Register werden zu den Inhalten einer Verkettung von Inhalten der DH2- und DL2-Felder hinzugefügt, um die Adresse des zweiten Operanden zu bilden. Wenn eines oder beide der X2- oder B2-Felder null sind, wird das entsprechende Register beim Hinzufügen nicht berücksichtigt.
  • Der erste 64-Bit-Operand wird nichttransaktionsorientiert und unverändert am zweiten Operandenspeicherort platziert.
  • Die durch die Verkettung der DH2- und DL2-Felder gebildete Verschiebung wird als eine binäre vorzeichenbehaftete ganze 20-Bit-Zahl behandelt.
  • Der zweite Operand ist mit einer Doppelwortgrenze auszurichten; andernfalls wird eine Spezifikationsausnahme erkannt, und die Operation wird unterdrückt.
  • Äußere/Äußerste Transaktion: Eine Transaktion mit einer niederzahligen Transaktionsverschachtelungstiefe ist eine äußere Transaktion. Eine Transaktion mit einem Transaktionsverschachtelungstiefen-Wert von eins ist die äußerste Transaktion.
  • Eine äußerste Anweisung TRANSACTION BEGIN ist eine, die ausgeführt wird, wenn die Transaktionsverschachtelungstiefe anfänglich null ist. Eine äußerste Anweisung TRANSACTION END ist eine, die bewirkt, dass die Transaktionsverschachtelungstiefe von eins auf null übergeht. Eine eingeschränkte Transaction ist bei dieser Ausführungsform die äußerste Transaktion.
  • Programmunterbrechungsfilterung: Wenn eine Transaktion aufgrund bestimmter Programmausnahmebedingungen abgebrochen wird, kann das Programm gegebenenfalls verhindern, dass die Unterbrechung auftritt. Diese Technik wird Programmunterbrechungsfilterung genannt. Die Programmunterbrechungsfilterung unterliegt der transaktionsorientierten Klasse der Unterbrechung, der effektiven Programmunterbrechungsfilterungs-Steuerung aus der Anweisung TRANSACTION BEGIN und der transaktionsorientierten Programmunterbrechungsfilterungs-Überschreibung im Steuerregister 0.
  • Transaktion: Eine Transaktion enthält die durchgeführten Speicheroperandenzugriffe und ausgewählte geänderte allgemeine Register, während sich die CPU im Modus der transaktionsorientierten Ausführung befindet. Bei einer nichteingeschränkten Transaktion können Speicheroperandenzugriffe sowohl transaktionsorientierte als auch nichttransaktionsorientierte Zugriffe beinhalten. Bei einer einschränkten Transaktion sind Speicheroperandenzugriffe auf transaktionsorientierte Zugriffe beschränkt. Wie durch andere CPUs und das E/A-Teilsystem wahrgenommen, scheinen alle von der CPU im Modus der transaktionsorientierten Ausführung durchgeführten Speicheroperandenzugriffe als einzelne gleichzeitige Operation zu erfolgen. Wenn eine Transaktion abgebrochen wird, werden transaktionsorientierte Speicherzugriffe verworfen und sämtliche von der Speichermaske für allgemeine Register der äußersten Anweisung TRANSACTION BEGIN ausgewiesene Register werden auf ihre Inhalte zurückgesetzt, die sie vor Transaktionsausführung hatten.
  • Transaktionsorientierte Zugriffe: Transaktionsorientierte Zugriffe sind Speicheroperandenzugriffe, die ausgeführt werden, während sich die CPU im Modus der transaktionsorientierten Ausführung befindet, mit Ausnahme von Zugriffen, die von der Anweisung NONTRANSACTION STORE durchgeführt werden.
  • Modus der transaktionsorientierten Ausführung: Der Ausdruck „Modus der transaktionsorientierten Ausführung“ (auch Transaktionsausführungsmodus genannt) beschreibt die übliche Operation sowohl des Modus der nichteingeschränkten als auch der eingeschränkten transaktionsorientierten Ausführung. Wenn die Operation beschrieben wird, werden die Ausdrücke „nichteingeschränkt“ und „eingeschränkt“ verwendet, um den Modus der transaktionsorientierten Ausführung zu qualifizieren.
  • Wenn die Transaktionsverschachtelungstiefe null ist, befindet sich die CPU nicht im Modus der transaktionsorientierten Ausführung (auch als nichttransaktionsorientierter Ausführungsmodus bezeichnet).
  • Wie durch die CPU wahrgenommen, unterscheiden sich im Modus der transaktionsorientierten Ausführung durchgeführte Abrufe und Speichervorgänge nicht von jenen, die nicht im Modus der transaktionsorientierten Ausführung durchgeführt wurden.
  • Bei einer Ausführungsform der z/Architecture steht die Einrichtung für transaktionsorientierte Ausführung unter der Steuerung der Bits 8 bis 9 des Steuerregisters 0, der Bits 61 bis 63 des Steuerregisters 2, der Transaktionsverschachtelungstiefe, der Transaktionsdiagnoseblock-Adresse und des Transaktionsabbruchs-Programmstatuswortes (PSW).
  • Nachdem die CPU zunächst zurückgesetzt wurde, werden die Inhalte der Bitpositionen 8 bis 9 des Steuerregisters 0, die Bitpositionen 62 bis 63 des Steuerregisters 2 und die Transaktionsverschachtelungstiefe auf null gesetzt. Wenn die Steuerung der transaktionsorientierten Ausführung, Bit 8 des Steuerregisters 0, null ist, kann die CPU nicht in den Modus der transaktionsorientierten Ausführung gesetzt werden.
  • Weitere Details bezüglich der verschiedenen Steuerungen sind im Folgenden beschrieben.
  • Wie gezeigt, wird die Einrichtung für transaktionsorientierte Ausführung von zwei Bits im Steuerregister null und drei Bits im Steuerregister zwei gesteuert. Ein Beispiel:
  • Bits des Steuerregisters 0: Die Bitzuweisungen sind bei einer Ausführungsform wie folgt:
    • Steuerung der transaktionsorientierten Ausführung (TXC, Transactional Execution Control): Bit 8 des Steuerregisters null ist die Steuerung der transaktionsorientierten Ausführung Dieses Bit stellt einen Mechanismus bereit, mit dem das Steuerprogramm (z.B. Betriebssystem) anzeigen kann, ob die Einrichtung für transaktionsorientierte Ausführung durch das Programm nutzbar ist. Bit 8 muss eins sein, um erfolgreich in den Modus der transaktionsorientierten Ausführung überzugehen.
    • Wenn Bit 8 des Steuerregisters 0 null ist, führt eine versuchte Ausführung der Anweisungen EXTRACT TRANSACTION NESTING, TRANSACTION BEGIN und TRANSACTION END zum Ausführen einer speziellen Operation.
    • Eine Ausführungsform eines Formats einer Anweisung EXTRACT TRANSACTION NESTING DEPTH ist in Bezug auf 8 beschrieben. Eine Anweisung EXTRACT TRANSACTION NESTING DEPTH 800 beispielsweise enthält ein Operationscodefeld 802, das einen Operationscode spezifiziert, der die Operation des Extrahierens der Transaktionsverschachtelungstiefe anzeigt; und ein Registerfeld R1 804, das ein allgemeines Register ausweist.
    • Die aktuelle Transaktionsverschachtelungstiefe ist in den Bits 48 bis 63 des allgemeinen Registers R1 platziert. Bits 0 bis 31 des Registers bleiben unverändert und Bits 32 bis 47 des Registers werden auf null gesetzt.
    • Bei einer weiteren Ausführungsform wird die maximale Transaktionsverschachtelungstiefe im allgemeinen Register R1 platziert, z.B. in den Bits 16 bis 31.
    • Überschreiben der Transaktionsausführungs-Programmunterbrechungsfilterung (PIFO): Bit 9 des Steuerregisters null steht für das Überschreiben der Programmunterbrechungsfilterung der transaktionsorientierten Ausführung. Dieses Bit stellt einen Mechanismus bereit, mit dem das Steuerprogramm sicherstellen kann, dass jede Programmausnahmebedingung, die auftritt, während sich die CPU im Modus der transaktionsorientierten Ausführung befindet, zu einer Unterbrechung führt, unabhängig von der effektiven Programmunterbrechungsfilterungs-Steuerung, die von der einen oder den mehreren Anweisungen TRANSACTION BEGIN spezifiziert oder impliziert wird.
  • Bits des Steuerregisters 2: Die Zuweisungen sind bei einer Ausführungsform wie folgt:
    • Transaktionsdiagnoseumfang (TDS, Transaction Diagnostic Scope): Bit 61 des Steuerregisters 2 steuert die Anwendbarkeit der Transaktionsdiagnosesteuerung (TDC, Transaction Diagnosis Control) in den Bits 62 bis 63 des Registers wie folgt:
    TDS
    Wert Bedeutung
    0 Die TDC wird angewendet, unabhängig davon, ob sich die CPU im Fehler- oder Supervisor-Status befindet.
    1 Die TDC wird nur dann angewendet, wenn sich die CPU im Fehlerstatus befindet. Wenn sich die CPU im Supervisor-Status befindet, erfolgt die Verarbeitung, als enthielte die TDC null.
  • Transaktionsdiagnosesteuerung (TDC): Bits 62 bis 63 des Steuerregisters 2 sind eine vorzeichenlose ganze 2-Bit-Zahl, die verwendet werden kann, um zu bewirken, dass Transaktionen zu Diagnosezwecken zufällig abgebrochen werden. Die Verschlüsselung der TDC ist in einem Beispiel wie folgt: TDC
    Wert Bedeutung
    0 Normaler Betrieb; Transaktionen werden infolge der TDC nicht abgebrochen.
    1 Jede Transaktion mit einer zufälligen Anweisung wird abgebrochen, allerdings bevor die äußerste Anweisung TRANSACTION END ausgeführt wird.
    2 Zufällige Transaktionen mit einer zufälligen Anweisung werden abgebrochen
    3 Reserviert
  • Wenn eine Transaktion abgebrochen wird, da TDC ungleich null ist, kann eines des Folgenden auftreten:
    • * Der Abbruchcode wird auf einen der Codes 7 bis 11, 13 bis 16 oder 255 gesetzt, wobei der Wert des Codes durch die CPU zufällig gewählt wird; der Bedingungscode wird entsprechend dem Abbruchcode gesetzt. Abbruchcodes sind im Folgenden ausführlicher beschrieben.
    • * Bei einer nichteingeschränkten Transaktion wird der Bedingungscode auf eins gesetzt. In diesem Fall ist der Abbruchcode nicht anwendbar.
  • Es ist modellabhängig, ob der TDC-Wert 1 implementiert wird. Ist er nicht implementiert, agiert ein Wert von 1, als wäre 2 spezifiziert worden.
  • Bei einer eingeschränkten Transaktion wird ein TDC-Wert von 1 so behandelt, als wäre ein TDC-Wert von 2 spezifiziert worden.
  • Wenn ein TDC-Wert von 3 spezifiziert ist, sind die Ergebnisse nicht vorhersagbar.
  • Transaktionsdiagnoseblock-Adresse (TDBA)
  • Eine gültige Transaktionsdiagnoseblock-Adresse (TDBA) wird aus der Adresse des ersten Operanden der äußersten Anweisung TRANSACTION BEGIN (TBEGIN) festgelegt, wenn das B1-Feld der Anweisung ungleich null ist. Wenn sich die CPU im Primärbereichmodus oder Zugriffsregistermodus befindet, weist die TDBA einen Speicherort im Primäradressraum aus. Wenn sich die CPU im Sekundärbereichmodus oder Modus für Ausgangsspeicherbereich befindet, weist die TDBA einen Speicherort im Sekundäradressraum bzw. im Speicherbereich für Ausgangsadresse aus. Wenn die DAT (Dynamische Adressumsetzung) ausgeschaltet ist, weist die TDBA einen Speicherort im realen Speicher aus.
  • Die TDBA wird von der CPU verwendet, um den Transaktionsdiagnoseblock - der TBEGIN-spezifizierte TDB genannt - zu lokalisieren, wenn die Transaktion nachfolgend abgebrochen wird. Die ganz rechten drei Bits der TDBA sind null, d.h., der TBEGIN-spezifizierte TDB liegt auf einer Doppelwortgrenze vor.
  • Wenn das B1-Feld einer äußersten Anweisung TRANSACTION BEGIN (TBEGIN) null ist, ist die Transaktionsdiagnoseblock-Adresse ungültig und kein TBEGIN-spezifizierte TDB wird gespeichert, wenn die Transaktion nachfolgend abgebrochen wird.
  • Transaktionsabbruch-PSW (TAPSW)
  • Während des Ausführens der Anweisung TRANSACTION BEGIN (TBEGIN) bei einer Verschachtelungstiefe von anfänglich null wird das Transaktionsabbruch-PSW auf die Inhalte des aktuellen PSW gesetzt; und die Anweisungsadresse des Transaktionsabbruch-PSW weist die nächste sequenzielle Anweisung aus (d.h., die Anweisung, die auf die äußerste TBEGIN folgt). Während des Ausführens der Anweisung TRANSACTION BEGIN constrained (TBEGINC) bei einer Verschachtelungstiefe von anfänglich null wird das Transaktionsabbruch-PSW auf die Inhalte des aktuellen PSW gesetzt, ausgenommen, wenn die Anweisungsadresse des Transaktionsabbruch-PSW die Anweisung TBEGINC ausweist (und nicht die nächste sequenzielle Anweisung, die auf die TBEGINC folgt).
  • Wenn eine Transaktion abgebrochen wird, wird der Bedingungscode im Transaktionsabbruch-PSW durch einen Code ersetzt, der den Schweregrad der Abbruchsbedingung anzeigt. Danach wird das PSW, wenn die Transaktion aus Gründen abgebrochen wurde, die nicht zu einer Unterbrechung führen, aus dem Transaktionsabbruch-PSW geladen; wenn die Transaktion aus Gründen abgebrochen wurde, die zu einer Unterbrechung führen, wird das Transaktionsabbruch-PSW als altes Unterbrechungs-PSW gespeichert.
  • Das Transaktionsabbruch-PSW wird während des Ausführens einer inneren TRANSACTION BEGIN-Ausführung nicht geändert.
  • Transaktionsverschachtelungstiefe (TND, Transaction Nesting Depth)
  • Die Transaktionsverschachtelungstiefe ist beispielsweise ein vorzeichenloser 16-Bit-Wert, der jedes Mal erhöht wird, wenn eine Anweisung TRANSACTION BEGIN mit Bedingungscode ausgeführt wird, und der jedes Mal verringert wird, wenn eine Anweisung TRANSACTION END ausgeführt wird. Die Transaktionsverschachtelungstiefe wird auf null zurückgesetzt, wenn eine Transaktion abgebrochen wird, oder durch ein Zurücksetzen der CPU.
  • Bei einer Ausführungsform wird eine maximale TND von 15 implementiert.
  • Bei einer Implementierung ist die Transaktionsverschachtelungstiefe eins, wenn sich die CPU im Modus der eingeschränkten transaktionsorientierten Ausführung befindet. Auch wenn die maximale TND als 4-Bit-Wert dargestellt sein kann, ist die TND darüber hinaus als ein 16-Bit-Wert definiert, um dessen Prüfung im Transaktionsdiagnoseblock zu erleichtern.
  • Transaktionsdiagnoseblock (TDB)
  • Wenn eine Transaktion abgebrochen wird, können verschiedene Statusinformationen im Transaktionsdiagnoseblock (TDB) wie folgt gespeichert werden:
    • 1. TBEGIN-spezifizierter TDB: Bei einer nichteingeschränkten Transaktion, wenn das B1-Feld der äußersten Anweisung TBEGIN ungleich null ist, weist die Adresse des ersten Operanden der Anweisung den TBEGIN-spezifizierten TDB aus. Es handelt sich hierbei um einen vom Anwendungsprogramm spezifizierten Speicherort, der vom Abbruch-Handler der Anwendung untersucht werden kann.
    • 2. Programmunterbrechungs-TDB (Programm Interruption - PI): Wenn eine nichteingeschränkte Transaktion aufgrund einer nichtgefilterten Programmausnahmebedingung abgebrochen wird oder wenn eine eingeschränkte Transaktion aufgrund einer beliebigen Programmausnahmebedingung (d.h. eine Bedingung, die dazu führt, dass eine Programmunterbrechung erkannt wird) abgebrochen wird, wird der PI-TDB an Speicherorten im Präfixbereich gespeichert. Dies steht dem Betriebssystem zur Verfügung, um eine Prüfung durchführen und in Diagnoseberichten, die es bereitstellen kann, zu protokollieren.
    • 3. Abfang-TDB: Wenn die Transaktion aufgrund einer Programmausnahmebedingung abgebrochen wird, die zu einem Abfangen führt (d.h., die Bedingung bewirkt, dass eine interpretative Ausführung endet, und steuert eine Rückkehr zum Host-Programm), wird ein TDB an einem Speicherort gespeichert, der im Statusbeschreibungsblock für das Gäste-Betriebssystem spezifiziert ist.
  • Der TBEGIN-spezifizierte TDB wird bei einer Ausführungsform nur gespeichert, wenn die TDB-Adresse gültig ist (d.h., wenn das B1-Feld der äußersten Anweisung TBEGIN ungleich null ist).
  • Bei Abbrüchen, die bedingt durch nichtgefilterte Programmausnahmebedingungen erfolgen, wird nur eines von PI-TBD oder Abfang-TDB gespeichert. Somit können null, ein oder zwei TDBs für einen Abbruch gespeichert werden.
  • Weitere Details zu einem Beispiel für jeden der TDBs sind im Folgenden beschrieben:
    • TBEGIN-spezifizierter TDB: Der von einer gültigen Transaktionsdiagnoseblock-Adresse spezifizierte 256-Byte-Speicherort. Wenn die Transaktionsdiagnoseblock-Adresse gültig ist, wird der TBEGIN-spezifizierte TDB auf einem Transaktionsabbruch gespeichert. Der TBEGIN-spezifizierte TDB unterliegt allen Speicherschutzmechanismen, die beim Ausführen der äußersten Anweisung TRANSACTION BEGIN wirksam sind. Ein PER-(Programmereignisaufzeichnungs-) Speicheränderungsereignis für einen beliebigen Abschnitt des TBEGIN-spezifizierten TDB wird während des Ausführens der äußersten TBEGIN und nicht während der Transaktionsabbruchverarbeitung erkannt.
  • Ein Zweck der PER besteht darin, Debugging-Programme zu unterstützen. Sie ermöglicht, dass das Programm auf die folgenden beispielhaften Ereignistypen hingewiesen wird:
    • * Ausführen einer erfolgreichen Verzweigungsanweisung. Die Option wird für den Fall bereitgestellt, dass ein Ereignis nur auftritt, wenn sich der Ziel-Verzweigungsspeicherort innerhalb des ausgewiesenen Speicherbereichs befindet.
    • * Abrufen einer Anweisung aus dem ausgewiesenen Speicherbereich.
    • * Ändern der Inhalte des ausgewiesenen Speicherbereichs. Die Option wird für den Fall bereitgestellt, dass ein Ereignis nur auftritt, wenn sich der Speicherbereich innerhalb ausgewiesener Adressräume befindet.
    • * Ausführen einer Anweisung STORE USING REAL ADDRESS.
    • * Ausführen der Anweisung TRANSACTION END.
  • Das Programm kann selektiv spezifizieren, dass ein oder mehrere der obigen Ereignistypen erkannt werden, mit der Ausnahme, dass das Ereignis für STORE USING REAL ADDRESS nur mit dem Speicheränderungsereignis spezifiziert werden kann. Die Informationen bezüglich eines PER-Ereignisses werden dem Programm mithilfe einer Programmunterbrechung zur Verfügung gestellt, wobei die Ursache der Unterbrechung im Unterbrechungscode gekennzeichnet ist.
  • Wenn die Transaktionsdiagnoseblock-Adresse ungültig ist, wird ein TBEGIN-spezifizierter TDB nicht gespeichert.
  • Programmunterbrechungs-TDB: Reale Speicherorte 6.144 bis 6.399 (1800 bis 18FF hex). Der Programmunterbrechungs-TDB wird gespeichert, wenn eine Transaktion aufgrund einer Programmunterbrechung abgebrochen wird. Wenn eine Transaktion aufgrund einer anderen Ursache abgebrochen wird, sind die Inhalte des Programmunterbrechungs-TDB nicht vorhersagbar.
  • Der Programmunterbrechungs-TDB unterliegt keinen Schutzmechanismen. PER-Speicheränderungsereignisse werden für den Programmunterbrechungs-TDB nicht erkannt, wenn er während einer Programmunterbrechung gespeichert wird.
  • Abfang-TDB: Der von den Speicherorten 488 bis 495 der Statusbeschreibung spezifizierte reale 256-Byte-Host-Speicherort. Der Abfang-TDB wird gespeichert, wenn eine abgebrochene Transaktion zu einem Gäste-Programmunterbrechungsabfangen führt (d.h. Abfangcode 8). Wenn eine Transaktion aufgrund einer anderen Ursache abgebrochen wird, sind die Inhalte des Abfang-TDB nicht vorhersagbar. Der Abfang-TDB unterliegt keinen Schutzmechanismen.
  • Wie in 9 gezeigt, sind die Felder eines Transaktionsdiagnoseblocks 900 bei einer Ausführungsform wie folgt:
  • Format 902: Byte 0 enthält eine Gültigkeits- und Formatanzeige wie folgt:
    Wert Bedeutung
    0 Die restlichen Felder des TDB sind nicht vorhersagbar.
    1 Ein Format-1-TDB, dessen restliche Felder im Folgenden beschrieben sind.
    2 bis 255 Reserviert
  • Ein TDB, bei dem das Formatfeld null ist, wird als Null-TDB bezeichnet.
  • Markierungen 904: Byte 1 enthält verschiedene Anzeigen, wie folgt:
    • Konflikt-Token-Gültigkeit (CTV, Conflict Token Validity): Wenn eine Transaktion aufgrund eines Abruf- oder Speicherkonflikts abgebrochen wird (d.h. Abbruchcodes 9 bzw. 10), ist Bit 0 von Byte 1 die Konflikt-Token-Gültigkeitsanzeige. Wenn die CTV-Anzeige eins ist, enthält das Konflikt-Token 910 in Bytes 16 bis 23 des TDB die logische Adresse, auf der der Konflikt erkannt wurde. Wenn die CTV-Anzeige null ist, sind Bytes 16 bis 23 des TDB nicht vorhersagbar.
    • Wenn eine Transaktion aus einem Grund abgebrochen wird, bei dem es sich nicht um einen Abruf- oder Speicherkonflikt handelt, wird Bit 0 von Byte 1 als null gespeichert.
    • Anzeige einer eingeschränkten Transaktion (CTI, Constrained-Transaction Indication): Wenn sich die CPU im Modus der eingeschränkten transaktionsorientierten Ausführung befindet, wird Bit 1 von Byte 1 auf eins gesetzt. Wenn sich die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, wird Bit 1 von Byte 1 auf null gesetzt.
    • Reserviert: Bits 2 bis 7 von Byte 1 sind reserviert und als Nullen gespeichert.
  • Transaktionsverschachtelungstiefe (TND) 906: Bytes 6 bis 7 enthalten die Transaktionsverschachtelungstiefe, wenn die Transaktion abgebrochen wurde.
  • Transaktionsabbruchcode (TAC) 908: Bytes 8 bis 15 enthalten einen vorzeichenlosen 64-Bit-Transaktionsabbruchcode. Jeder Codepunkt zeigt einen Grund an, aus dem eine Transaktion abgebrochen wird.
  • Es ist modellabhängig, ob der Transaktionsabbruchcode im Programmunterbrechungs-TDB gespeichert wird, wenn eine Transaktion aus anderen Bedingungen als aufgrund einer Programmunterbrechung abgebrochen wird.
  • Konflikt-Token 910: Für Transaktionen, die aufgrund eines Abruf- oder Speicherkonflikts abgebrochen werden (d.h. Abbruchcodes 9 bzw. 10) enthalten Bytes 16 bis 23 die logische Adresse des Speicherorts an dem der Konflikt erkannt wurde. Das Konflikt-Token ist von Bedeutung, wenn das CTV-Bit, Bit 0 von Byte 1, eins ist.
  • Wenn das CTV-Bit null ist, sind Bytes 16 bis 23 nicht vorhersagbar.
  • Aufgrund des spekulativen Ausführens durch die CPU kann das Konflikt-Token einen Speicherort ausweisen, auf den die konzeptionelle Ausführungsabfolge der Transaktion nicht unbedingt zugreift.
  • Anweisungsadresse für abgebrochene Transaktion (ATIA, Aborted Transaction Instruction Address) 912: Bytes 24 bis 31 enthalten eine Anweisungsadresse, die die Anweisung kennzeichnet, die ausgeführt wurde, als ein Abbruch erkannt wurde. Wenn eine Transaktion aufgrund von Abbruchcodes 2, 5, 6, 11, 13 oder 256 oder höher abgebrochen wird oder wenn eine Transaktion aufgrund von Abbruchcode 4 oder 13 abgebrochen wird und die Programmausnahmebedingung auf Leerwert gesetzt wird, zeigt die ATIA direkt die Anweisung an, die ausgeführt wurde. Wenn eine Transaktion aufgrund von Abbruchcode 4 oder 12 abgebrochen wird und die Programmausnahmebedingung nicht auf Leerwert gesetzt ist, zeigt die ATIA an der Anweisung, die ausgeführt wurde, vorbei.
  • Wenn eine Transaktion aufgrund von Abbruchcodes 7 bis 10, 14 bis 16 oder 255 abgebrochen wird, zeigt die ATIA nicht notwendigerweise die den Abbruch verursachende Anweisung an, sondern kann auf eine frühere oder spätere Anweisung innerhalb der Transaktion zeigen.
  • Wenn eine Transaktion aufgrund einer Anweisung abgebrochen wird, die das Ziel einer Anweisung vom Ausführungstyp ist, kennzeichnet die ATIA die Anweisung vom Ausführungstyp entweder dadurch, dass sie auf die Anweisung oder an dieser vorbei zeigt, je nach oben beschriebenem Abbruchcode. Die ATIA zeigt das Ziel der Anweisung vom Ausführungstyp nicht an.
  • Die ATIA unterliegt dem Adressiermodus, wenn die Transaktion abgebrochen wird. Im 24-Bit-Adressiermodus enthalten Bits 0 bis 40 des Feldes Nullen. Im 31-Bit-Adressiermodus enthalten Bits 0 bis 32 des Feldes Nullen.
  • Es ist modellabhängig, ob die Anweisungsadresse für abgebrochene Transaktion im Programmunterbrechungs-TDB gespeichert wird, wenn eine Transaktion aus anderen Bedingungen als aufgrund einer Programmunterbrechung abgebrochen wird.
  • Wenn eine Transaktion aufgrund von Abbruchcode 4 oder 12 abgebrochen wird und die Programmausnahmebedingung nicht auf Leerwert gesetzt ist, zeigt die ATIA nicht auf die Anweisung, die den Abbruch verursacht. Durch Subtrahieren der Anzahl von durch den Unterbrechungslängencode (ILC, Interruption Length Code) angezeigten Halbwörtern von der ATIA kann die den Abbruch verursachende Anweisung unter Bedingungen gekennzeichnet werden, die unterdrückend oder beendend sind, oder für Nicht-PER-Ereignisse, die ausgeführt werden. Wenn eine Transaktion aufgrund eines PER-Ereignisses abgebrochen wird und keine andere Programmausnahmebedingung vorliegt, ist die ATIA nicht vorhersagbar.
  • Wenn die Transaktionsdiagnoseblock-Adresse gültig ist, kann der ILC in einer Programmunterbrechungskennzeichnung (PIID, Programm Interruption Identification) in Bytes 36 bis 39 des TBEGIN-spezifizierten TDB untersucht werden. Wenn keine Filterung angewendet wird, kann der ILC in der PIID an Speicherort 140 bis 143 in einem realen Speicher untersucht werden.
  • Ausnahmezugriffskennzeichnung (EAID, Exception Access Identification) 914: Bei Transaktionen, die aufgrund bestimmter gefilterter Programmausnahmebedingungen abgebrochen werden, enthält Byte 32 des TBEGIN-spezifizierten TDB die Ausnahmezugriffskennzeichnung. Bei einem Beispiel der z/Architecture sind das Format der EAID und die Fälle, in Bezug auf welche sie gespeichert wird, gleich wie die in einem realen Speicherort 160 beschriebenen, wenn die Ausnahmebedingung zur einer Unterbrechung führt, wie in dem oben durch Bezugnahme aufgenommenen Principles of Operation.
  • Bei Transaktionen, die aus anderen Gründen abgebrochen werden, beispielsweise aufgrund von Ausnahmebedingungen, die zu einer Programmunterbrechung führen, ist Byte 32 nicht vorhersagbar. Byte 32 ist im Programmunterbrechungs-TDB nicht vorhersagbar.
  • Dieses Feld wird nur im TDB gespeichert, der von der Transaktionsdiagnoseblock-Adresse ausgewiesen wird; andernfalls ist das Feld reserviert. Die EAID wird nur für zugriffslistengesteuerte oder DAT-Schutz-, ASCE-Typ-, Seitenumsetzungs-, Region-eins-Umsetzungs-, Region-zwei-Umsetzungs-, Region-drei-Umsetzungs- und Segmentumsetzungs-Programmausnahme-Bedingungen gespeichert.
  • Datenausnahmecode (DXC) 916: Bei Transaktionen, die aufgrund von gefilterten Datenausnahme-Programmausnahme-Bedingungen abgebrochen werden, enthält Byte 33 des TBEGIN-spezifizierten TDB den Datenausnahmecode. Bei einem Beispiel der z/Architecture sind das Format der DXC und die Fälle, in Bezug auf welche sie gespeichert wird, gleich wie die in einem realen Speicherort 147 beschriebenen, wenn die Ausnahmebedingung zur einer Unterbrechung führt, wie in dem oben durch Bezugnahme aufgenommenen Principles of Operation. Bei einem Bespiel enthält Speicherort 147 den DXC.
  • Bei Transaktionen, die aus anderen Gründen abgebrochen werden, beispielsweise aufgrund von Ausnahmebedingungen, die zu einer Programmunterbrechung führen, ist Byte 33 nicht vorhersagbar. Byte 33 ist im Programmunterbrechungs-TDB nicht vorhersagbar.
  • Dieses Feld wird nur im TDB gespeichert, der von der Transaktionsdiagnoseblock-Adresse ausgewiesen wird; andernfalls ist das Feld reserviert. Der DXC wird nur für Datenprogrammausnahme-Bedingungen gespeichert.
  • Programmunterbrechungskennzeichnung (PIID) 918: Bei Transaktionen, die aufgrund gefilterter Programmausnahmebedingungen abgebrochen werden, enthalten Bytes 36 bis 39 des TBEGIN-spezifizierten TDB die Programmunterbrechungskennzeichnung. Bei einem Beispiel der z/Architecture ist das Format der PIID das gleiche wie das in realen Speicherorten 140 bis 143 beschriebene, wenn die Bedingung zu einer Unterbrechung führt (wie in den oben durch Bezugnahme ausgenommenen Principles of Operation), mit der Ausnahme, dass der Anweisungslängencode in Bits 13 bis 14 der PIID jeweils der Anweisung entspricht, bei der die Ausnahmebedingung erkannt wurde.
  • Bei Transaktionen, die aus anderen Gründen abgebrochen werden, beispielsweise aufgrund von Ausnahmebedingungen, die zu einer Programmunterbrechung führen, sind Bytes 36 bis 39 nicht vorhersagbar. Bytes 36 bis 39 sind im Programmunterbrechungs-TDB nicht vorhersagbar.
  • Dieses Feld wird nur im TDB gespeichert, der von der Transaktionsdiagnoseblock-Adresse ausgewiesen wird; andernfalls ist das Feld reserviert. Die Programmunterbrechungskennzeichnung wird nur für Programmausnahmebedingungen gespeichert.
  • Umsetzungsausnahmekennzeichnung (TEID, Translation Exception Identification) 920: Bei Transaktionen, die aufgrund beliebiger der folgenden gefilterten Programmausnahmebedingungen abgebrochen werden, enthalten Bytes 40 bis 47 des TBEGIN-spezifizierten TDB die Umsetzungsausnahmekennzeichnung.
    • * Zugriffslistengesteuert oder DAT-Schutz
    • * ASCE-Typ
    • * Seitenumsetzung
    • * Region-eins-Umsetzung
    • * Region-zwei-Umsetzung
    • * Region-drei-Umsetzung
    • * Segmentumsetzungsausnahme
  • Bei einem Beispiel der z/Architecture ist das Format der TIED das gleiche wie das in realen Speicherorten 168 bis 175 beschriebenen, wenn die Bedingung zu einer Unterbrechung führt, wie in den oben durch Bezug aufgenommenen Principles of Operation.
  • Bei Transaktionen, die aus anderen Gründen abgebrochen werden, beispielsweise aufgrund von Ausnahmebedingungen, die zu einer Programmunterbrechung führen, sind Bytes 40 bis 47 nicht vorhersagbar. Bytes 40 bis 47 sind im Programmunterbrechungs-TDB nicht vorhersagbar.
  • Dieses Feld wird nur im TDB gespeichert, der von der Transaktionsdiagnoseblock-Adresse ausgewiesen wird; andernfalls ist das Feld reserviert.
  • Anhalte-Ereignisadresse 922: Bei Transaktionen, die aufgrund gefilterter Programmausnahmebedingungen abgebrochen werden, enthalten Bytes 48 bis 55 des TBEGIN-spezifizierten TDB die Anhalte-Ereignisadresse. Bei einem Beispiel der z/Architecture ist das Format der Anhalte-Ereignisadresse das gleiche wie das in realen Speicherorten 272 bis 279 beschriebenen, wenn die Bedingung zu einem Anhalten führt, wie in den oben durch Bezug aufgenommenen Principles of Operation.
  • Bei Transaktionen, die aus anderen Gründen abgebrochen werden, beispielsweise aufgrund von Ausnahmebedingungen, die zu einer Programmunterbrechung führen, sind Bytes 48 bis 55 nicht vorhersagbar. Bytes 48 bis 55 sind im Programmunterbrechungs-TDB nicht vorhersagbar.
  • Dieses Feld wird nur im TDB gespeichert, der von der Transaktionsdiagnoseblock-Adresse ausgewiesen wird; andernfalls ist das Feld reserviert.
  • Weitere Details zu Anhalte-Ereignissen sind im Folgenden beschrieben.
  • Bei einer Ausführungsform der z/Architecture stellt die PER-3-Einrichtung, sofern sie installiert ist, die Adresse der letzten Anweisung dem Programm bereit, um ein Anhalten der sequenziellen Ausführung der CPU zu bewirken. Eine Aufzeichnung von Anhalte-Ereignisadressen kann als Debugging-Unterstützung für das Erkennen von fehlerhaften Verzweigungen verwendet werden. Diese Einrichtung stellt beispielsweise ein 64-Bit-Register in der CPU bereit, das Register für Anhalte-Ereignisadressen genannt wird. Jedes Mal, wenn eine Anweisung außer TRANSACTION ABORT ein Anhalten der sequenziellen Anweisungsausführung bewirkt (d.h., die Anweisungsadresse im PSW wird ersetzt, anstatt um die Länge der Anweisung erhöht zu werden), wird die Adresse dieser Anweisung im Register für Anhalte-Ereignisadressen platziert. Jedes Mal, wenn eine Programmunterbrechung erfolgt, werden die aktuellen Inhalte des Registers für Anhalte-Ereignisadressen unabhängig davon, ob PER angezeigt ist, in realen Speicherorten 272 bis 279 platziert.
  • Wenn die das Unterbrechungsereignis verursachende Anweisung das Ziel einer Anweisung vom Ausführungstyp ist (EXECUTE oder EXECUTE RELATIVE LONG), wird die zum Abrufen der Anweisung vom Ausführungstyp verwendete Anweisungsadresse im Register für Anhalte-Ereignisadressen platziert.
  • Bei einer Ausführungsform der z/Architecture wird ein Anhalte-Ereignis als aufgetreten angesehen, wenn eine der folgenden Anweisungen zu einer Verzweigung führt: BRANCH AND LINK (BAL, BALR); BRANCH AND SAVE (BAS, BASR); BRANCH AND SAVE AND SET MODE (BASSM); BRANCH AND SET MODE (BSM); BRANCH AND STACK (BAKR); BRANCH ON CONDITION (BC, BCR); BRANCH ON COUNT (BCT, BCTR, BCTG, BCTGR); BRANCH ON INDEX HIGH (BXH, BXHG); BRANCH ON INDEX LOW OR EQUAL (BXLE, BXLEG); BRANCH RELATIVE ON CONDITION (BRC); BRANCH RELATIVE ON CONDITION LONG (BRCL); BRANCH RELATIVE ON COUNT (BRCT, BRCTG); BRANCH RELATIVE ON INDEX HIGH (BRXH, BRXHG); BRANCH RELATIVE ON INDEX LOW OR EQUAL (BRXLE, BRXLG); COMPARE AND BRANCH (CRB, CGRB); COMPARE AND BRANCH RELATIVE (CRJ, CGRJ); COMPARE IMMEDIATE AND BRANCH (CIB, CGIB); COMPARE IMMEDIATE AND BRANCH RELATIVE (CIJ, CGIJ); COMPARE LOGICAL AND BRANCH (CLRB, CLGRB); COMPARE LOGICAL AND BRANCH RELATIVE (CLRJ, CLGRJ); COMPARE LOGICAL IMMEDIATE AND BRANCH (CLIB, CLGIB); und COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (CLIJ, CLGIJ).
  • Ein Anhalte-Ereignis wird darüber hinaus als aufgetreten angesehen, wenn eine der folgenden Anweisungen ausgeführt wurde: BRANCH AND SET AUTHORITY (BSA); BRANCH IN SUBSPACE GROUP (BSG); BRANCH RELATIVE AND SAVE (BRAS); BRANCH RELATIVE AND SAVE LONG (BRASL); LOAD PSW (LPSW); LOAD PSW EXTENDED (LPSWE); PROGRAM CALL (PC); PROGRAM RETURN (PR); PROGRAM TRANSFER (PT); PROGRAM TRANSFER WITH INSTANCE (PTI); RESUME PROGRAM (RP); und TRAP (TRAP2, TRAP4).
  • Ein Anhalte-Ereignis wird nicht als aufgetreten angesehen, wenn es die Folge eines Transaktionsabbruchs ist (entweder impliziert oder eine Folge der Anweisung TRANSACTION ABORT).
  • Modellabhängige Diagnoseinformationen 924: Bytes 112 bis 127 enthalten modellabhängige Diagnoseinformationen.
  • Bei allen Abbruchcodes mit Ausnahme von 12 (gefilterte Programmunterbrechung) werden die modellabhängigen Diagnoseinformationen in jedem TDB gespeichert, der gespeichert ist.
  • Bei einer Ausführungsform enthalten die modellabhängigen Diagnoseinformationen Folgendes:
    • * Bytes 112 bis 119 enthalten einen Vektor aus 64 Bits, Anzeigen für transaktionsorientierte Ausführung von Verzweigungen (TXBI, Transactional Execution Branch Indications) genannt. Jedes der ersten 63 Bits des Vektors zeigt die Ergebnisse des Ausführens einer Verzweigungsanweisung an, während sich die CPU im Modus der transaktionsorientierten Ausführung befand, wie folgt:
    Wert Bedeutung
    0 Die Anweisung wurde ohne Verzweigung ausgeführt.
    1 Die Anweisung wurde mit Verzweigung ausgeführt.
  • Bit 0 stellt das Ergebnis der ersten solchen Verzweigungsanweisung dar, Bit 1 das Ergebnis der zweiten solchen Anweisung usw.
  • Wenn weniger als 63 Verzweigungsanweisungen ausgeführt wurden, während sich die CPU im Modus der transaktionsorientierten Ausführung befand, werden die ganz rechten Bits, die nicht Verzweigungsanweisungen entsprechen, auf Nullen gesetzt (Bit 63 mit eingeschlossen). Wenn mehr als 63 Verzweigungsanweisungen ausgeführt wurden, wird Bit 63 der TXBI auf eins gesetzt.
  • Bits in der TXBI werden von Anweisungen gesetzt, die in der Lage sind, ein Anhalte-Ereignis zu bewirken, wie oben angeführt, mit Ausnahme des Folgenden:
    • - Eine beschränkte Anweisung bewirkt nicht, dass ein Bit in der TXBI gesetzt wird.
    • - Bei Anweisungen von beispielsweise der z/Architecture, ist es, wenn das M1-Feld der Anweisungen BRANCH ON CONDITION, BRANCH RELATIVE ON CONDITION oder BRANCH RELATIVE ON CONDITION LONG null ist oder wenn das R2-Feld der folgenden Anweisungen null ist, modellabhängig, ob das Ausführen der Anweisung ein Setzen eines Bit in der TXBI bewirkt.
      • * BRANCH AND LINK (BALR);BRANCH AND SAVE (BASR); BRANCH AND SAVE AND SET MODE (BASSM); BRANCH AND SET MODE (BSM); BRANCH ON CONDITION (BCR); und BRANCH ON COUNT (BCTR, BCTGR)
      • * Bei Abbruchbedingungen, die durch eine Host-Zugriffsausnahme verursacht wurden, wird Bitposition 0 von Byte 127 auf eins gesetzt. Bei allen anderen Abbruchbedingungen wird Bitposition 0 von Byte 127 auf null gesetzt.
      • * Bei Abbruchbedingungen, die durch die Lade/Speicher-Einheit (LSU, Load/Store Unit) erkannt wurden, enthalten die ganz rechten fünf Bits von Byte 127 eine Anzeige der Ursache. Bei Abbruchbedingungen, die nicht von der LSU erkannt wurden, ist Byte 127 reserviert.
  • Allgemeine Register 930: Bytes 128 bis 255 enthalten die Inhalte der allgemeinen Register 0 bis 15 zu dem Zeitpunkt, an dem die Transaktion abgebrochen wurde. Die Register werden in ansteigender Reihenfolge gespeichert, beginnend mit dem allgemeinen Register 0 in den Bytes 128 bis 135, dem allgemeinen Register 1 in den Bytes 136 bis 143 usw.
  • Reserviert: Alle anderen Felder sind reserviert. Wenn nicht anderweitig angegeben, sind die Inhalte reservierter Felder nicht vorhersagbar.
  • Wie durch andere CPUs und das E/A-Teilsystem wahrgenommen, ist das Speichern der TDB(s) während eines Transaktionsabbruchs ein Mehrfachzugriffsverweis, der nach nichttransaktionsorientierten Speichervorgängen auftritt.
  • Eine Transaktion kann aufgrund von Ursachen abgebrochen werden, die außerhalb des Umfangs der Direktkonfiguration liegen, in der sie ausgeführt wird. Beispielsweise können Übergangsereignisse, die von einem Hypervisor (z.B. LPAR oder z/VM) erkannt werden, einen Abbruch einer Transaktion bewirken.
  • Die im Transaktionsdiagnoseblock bereitgestellten Informationen sind für Diagnosezwecke vorgesehen und sind im Wesentlichen korrekt. Da ein Abbruch jedoch außerhalb des Umfangs der Direktkonfiguration von einem Ereignis verursacht werden kann, geben Informationen wie der Abbruchcode oder die Programmunterbrechungskennzeichnung Bedingungen innerhalb der Konfiguration eventuell nicht akkurat wieder und sollten daher nicht beim Ermitteln einer Programmaktion herangezogen werden.
  • Zusätzlich zu den im TDB gespeicherten Diagnoseinformationen wird der Datenausnahmecode (DXC), wenn eine Transaktion aufgrund einer Datenausnahme-Programmausnahme-Bedingung abgebrochen wird und sowohl die AFP-Registersteuerung, Bit 45 von Steuerregister 0, und die effektive Steuerung zum Zulassen einer Gleitkommaoperation (F) eins sind, in Byte 2 des Gleitkomma-Steuerregisters (FPCR) platziert, unabhängig davon, ob eine Filterung für die Programmausnahmebedingung gilt. Wenn eine Transaktion abgebrochen wird und eines oder beide der AFP-Registersteuerung oder effektiven Steuerung zum Zulassen einer Gleitkommaoperation null ist bzw. sind, wird der DXC nicht im FPCR platziert.
  • Bei einer Ausführungsform, wie hier gezeigt, werden die folgenden allgemeinen Anweisungen bereitgestellt, wenn die Einrichtung für transaktionsorientierte Ausführung installiert ist.
    • * EXTRACT TRANSACTION NESTING DEPTH
    • * NONTRANSACTIONAL STORE
    • * TRANSACTION ABORT
    • * TRANSACTION BEGIN
    • * TRANSACTION END
  • Wenn sich die CPU im Modus der transaktionsorientierten Ausführung befindet, ist das versuchte Ausführen bestimmter Anweisungen eingeschränkt und bewirkt, dass die Transaktion abgebrochen wird.
  • Wenn im Modus der eingeschränkten transaktionsorientierten Ausführung ausgegeben, kann ein versuchtes Ausführen von eingeschränkten Anweisungen auch zu einer Programmunterbrechung durch eine eingeschränkte Transaktion führen oder kann dazu führen, dass das Ausführen fortgesetzt wird, als wäre die Transaktion nicht eingeschränkt.
  • Bei einem Beispiel der z/Architecture beinhalten eingeschränkte Anweisungen beispielsweise die folgenden nichtprivilegierten Anweisungen: COMPARE AND SWAP AND STORE; MODIFY RUNTIME INSTRUMENTATION CONTROLS; PERFORM LOCKED OPERATION; PREFETCH DATA (RELATIVE LONG), wenn der Code im M1-Feld 6 oder 7 ist; STORE CHARACTERS UNDER MASK HIGH, wenn das M3-Feld null ist und der Code im R1-Feld 6 oder 7 ist; STORE FACILITY LIST EXTENDED; STORE RUNTIME INSTRUMENTATION CONTROLS; SUPERVISOR CALL; und TEST RUNTIME INSTRUMENTATION CONTROLS.
  • In der obigen Liste sind COMPARE AND SWAP AND STORE und PERFORM LOCKED OPERATION komplexe Anweisungen, die unter Verwendung der Grundanweisungen im TX-Modus effizienter implementiert werden können. Die Fälle für PREFETCH DATA und PREFETCH DATA RELATIVE LONG sind eingeschränkt, da die Codes 6 und 7 eine Cachespeicherzeile ausgeben, die das Festschreiben der Daten erforderlich macht, gegebenenfalls vor Ausführen einer Transaktion. SUPERVISOR CALL ist eingeschränkt, da sie eine Unterbrechung bewirkt (die zu einem Transaktionsabbruch führt).
  • Unter den oben aufgelisteten Bedingungen sind die folgenden Anweisungen eingeschränkt:
    • * BRANCH AND LINK (BALR), BRANCH AND SAVE (BASR) und BRANCH AND SAVE AND SET MODE, wenn das R2-Feld der Anweisung ungleich null ist und das Verzweigungs-Tracing aktiviert ist.
    • * BRANCH AND SAVE AND SET MODE und BRANCH AND SET MODE, wenn das R2 -Feld ungleich null ist und Modus-Tracing aktiviert ist; SET ADDRESSING MODE, wenn Modus-Tracing aktiviert ist.
    • * MONITOR CALL, wenn eine Überwachungsereignisbedingung erkannt wird.
  • Die obige Liste enthält Anweisungen, die Trace-Einträge bilden können. Wenn für diese Anweisungen ein transaktionsorientiertes Ausführen und ein Bilden von Trace-Einträgen zugelassen würde und wenn die Transaktion danach abgebrochen werden würde, würde der Trace-Tabellenzeiger im Steuerregister 12 fortschreiten, die Speichervorgänge für die Trace-Tabelle würden jedoch verworfen werden. Dadurch würde eine uneinheitliche Lücke in der Trace-Tabelle zurückgelassen. Somit sind die Anweisungen in jenen Fällen, in denen sie Trace-Einträge bilden würde, beschränkt.
  • Wenn sich die CPU im Modus der transaktionsorientierten Ausführung befindet, ist es modellabhängig, ob die folgenden Anweisungen eingeschränkt sind:
    • CIPHER MESSAGE; CIPHER MESSAGE WITH CFB; CIPHER MESSAGE WITH CHAINING; CIPHER MESSAGE WITH COUNTER; CIPHER MESSAGE WITH OFB; COMPRESSION CALL; COMPUTE INTERMEDIATE MESSAGE DIGEST; COMPUTE LAST MESSAGE DIGEST; COMPUTE MESSAGE AUTHENTICATION CODE; CONVERT UNICODE-16 TO UNICODE-32; CONVERT UNICODE-16 TO UNICODE-8; CONVERT UNICODE-32 TO UNICODE-16; CONVERT UNICODE-32 TO UNICODE-8; CONVERT UNICODE-8 TO UNICODE-16; CONVERT UNICODE-8 TO UNICODE-32; PERFORM CRYPTOGRAPHIC COMPUTATION; RUNTIME INSTRUMENTATION OFF; und RUNTIME INSTRUMENTATION ON.
  • Jede der obigen Anweisungen wird entweder derzeit durch den Hardware-Coprozessor implementiert oder wurde in früheren Maschinen implementiert und wird somit als eingeschränkt angesehen.
  • Wenn die effektive Steuerung zum Zulassen einer AR-Änderung (A) null ist, sind die folgenden Anweisungen eingeschränkt: COPY ACCESS; LOAD ACCESS MULTIPLE; LOAD ADDRESS EXTENDED; und SET ACCESS.
  • Jede der obigen Anweisungen bewirkt, dass die Inhalte eines Zugriffsregisters geändert werden. Wenn die A-Steuerung in der Anweisung TRANSACTION BEGIN null ist, zeigt das Programm explizit an, dass eine Zugriffsregisteränderung nicht zulässig ist.
  • Wenn die effektive Steuerung zum Zulassen einer Gleitkommaoperation (F) null ist, sind Gleitkommaanweisungen eingeschränkt.
  • Unter bestimmten Umständen können die folgenden Anweisungen eingeschränkt sein: EXTRACT CPU TIME; EXTRACT PSW; STORE CLOCK; STORE CLOCK EXTENDED; und STORE CLOCK FAST.
  • Jede der obigen Anweisungen unterliegt einer Abfangsteuerung in der Statusbeschreibung zur interpretativen Ausführung. Wenn der Hypervisor die Abfangsteuerung für diese Anweisungen festgelegt hat, kann deren Ausführung aufgrund einer Hypervisor-Implementierung verlängert werden; somit werden sie als eingeschränkt angesehen, wenn ein Abfangen erfolgt.
  • Wenn eine nichteingeschränkte Transaktion aufgrund des versuchten Ausführens einer eingeschränkten Anweisung abgebrochen wird, wird der Transaktionsabbruchcode im Transaktionsdiagnoseblock auf 11 (eingeschränkte Anweisung) gesetzt, und der Bedingungscode wird auf 3 gesetzt, mit folgender Ausnahme: wenn eine nichteingeschränkte Transaktion aufgrund des versuchten Ausführens einer Anweisung abgebrochen wird, die ansonsten zu einer Ausnahme einer privilegierten Operation führen würde, ist es nicht vorhersagbar, ob der Abbruchcode auf 11 (eingeschränkte Anweisung) oder 4 (nichtgefilterte Programmunterbrechung, die aus dem Erkennen der Programmunterbrechung einer privilegierten Operation resultiert) gesetzt wird. Wenn eine nichteingeschränkte Transaktion aufgrund des versuchten Ausführens von PREFETCH DATA (RELATIVE LONG) abgebrochen wird, wenn der Code im M1-Feld 6 oder 7 ist, oder STORE CHARACTERS UNDER MASK HIGH, wenn das M3-Feld null ist und der Code im R1-Feld 6 oder 7 ist, ist es nicht vorhersagbar, ob der Abbruchcode auf 11 (eingeschränkte Anweisung) oder 16 (anderweitig cachespeicherbezogen) gesetzt wird. Wenn eine nichteingeschränkte Transaktion aufgrund des versuchten Ausführens von MONITOR CALL abgebrochen wird, und sowohl eine Überwachungsereignisbedingung als auch eine Spezifikationsausnahmebedingung vorliegt, ist es nicht vorhersagbar, ob der Abbruchcode auf 11 oder 4 oder - wenn die Programmunterbrechung gefiltert wird - auf 12 gesetzt wird.
  • Weitere Anweisungen können bei einer eingeschränkten Transaktion eingeschränkt sein. Auch wenn diese Anweisungen aktuell nicht als in einer nichteingeschränkten Transaktion eingeschränkt definiert sind, können sie unter bestimmten Umständen auf künftigen Prozessoren bei einer nichteingeschränkten Transaktion eingeschränkt sein.
  • Bestimmte eingeschränkte Anweisungen können auf künftigen Prozessoren im Modus der transaktionsorientierten Ausführung zulässig sein. Aus diesem Grund sollte das Programm nicht darauf gestützt sein, dass die Transaktion aufgrund des versuchten Ausführens einer eingeschränkten Anweisung abgebrochen wird. Die Anweisung TRANSACTION ABORT sollte verwendet werden, um zuverlässig den Abbruch einer Transaktion zu bewirken.
  • Bei einer nichteingeschränkten Transaktion sollte das Programm einen alternativen nichttransaktionsorientierten Codepfad bereitstellen, um eine Transaktion zu berücksichtigen, die aufgrund einer eingeschränkten Anweisung abgebrochen wird.
  • In Betrieb bewirkt das Ausführen der zum Bedingungscode null führenden Anweisung TRANSACTION BEGIN(TBEGIN) bei einer Transaktionsverschachtelungstiefe von null, dass die CPU in den Modus der nichteingeschränkten transaktionsorientierten Ausführung übergeht. Bei einer Transaktionsverschachtelungstiefe von null bewirkt das Ausführen der zum Bedingungscode null führenden Anweisung TRANSACTION BEGIN constrained (TBEGINC) bei einer Transaktionsverschachtelungstiefe von null, dass die CPU in den Modus der eingeschränkten transaktionsorientierten Ausführung übergeht.
  • Wenn nicht explizit anderweitig angemerkt, gelten alle Regeln, die für eine nichttransaktionsorientierte Ausführung gelten, auch für die transaktionsorientierte Ausführung. Nachstehend sind weitere Kennzeichen der Verarbeitung angeführt, während sich die CPU im Modus der transaktionsorientierten Ausführung befindet.
  • Wenn sich die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, bewirkt das Ausführen der zum Bedingungscode null führenden Anweisung TRANSACTION BEGIN, dass die CPU weiterhin im Modus der nichteingeschränkten transaktionsorientierten Ausführung bleibt.
  • Wie durch die CPU wahrgenommen, unterscheiden sich im Transaktionsausführungsmodus durchgeführte Abrufe und Speichervorgänge nicht von jenen, die nicht im Modus der transaktionsorientierten Ausführung durchgeführt wurden. Wie durch andere CPUs und das E/A-Teilsystem wahrgenommen, scheinen alle Speicheroperandenzugriffe, die durchgeführt wurden, während sich eine CPU im Modus der transaktionsorientierten Ausführung befindet, ein einziger gleichzeitiger Blockzugriff zu sein. Das heißt, die Zugriffe auf alle Bytes innerhalb des Halbworts, Worts, Doppelworts oder Vierfachworts sind so spezifiziert, dass sie blockgleichzeitig zu sein scheinen, wie durch andere CPUs und E/A-Programme (z.B. Kanalprogramme) wahrgenommen. Das Halbwort, Wort, Doppelwort oder Vierfachwort wird in diesem Abschnitt als Block bezeichnet. Wenn ein Abruftyp-Verweis so spezifiziert ist, dass er gleichzeitig innerhalb eines Blocks zu sein scheint, wird während des Zeitraums, in dem im Block enthaltende Bytes abgerufen werden, kein Speicherzugriff durch eine weitere CPU oder ein E/A-Programm auf den Block zugelassen. Wenn ein Speichertyp so spezifiziert ist, dass er gleichzeitig innerhalb eines Blocks zu sein scheint, wird während des Zeitraums, indem die Bytes innerhalb des Blocks gespeichert werden, kein Abruf- oder Speicherzugriff durch eine weitere CPU oder ein E/A-Programm auf den Block zugelassen.
  • Speicherzugriffe für Tabellenabrufe von Anweisungen und DAT und ART (Access Register Translation - Zugriffsregisterumsetzung) folgen den nichttransaktionsorientierten Regeln.
  • Die CPU verlässt den Modus der transaktionsorientierten Ausführung für gewöhnlich mithilfe einer Anweisung TRANSACTION END, die bewirkt, dass die Transaktionsverschachtelungstiefe auf null übergeht und die Transaktion somit ausgeführt wird.
  • Wenn die CPU den Modus der transaktionsorientierten Ausführung durch Ausführen einer Anweisung TRANSACTION END verlässt, werden alle im Modus der transaktionsorientierten Ausführung durchgeführten Speichervorgänge festgeschrieben; d.h., die Speichervorgänge scheinen als eine einzige blockgleichzeitige Operation zu erfolgen, wie durch andere CPUs und das E/A-Teilsystem wahrgenommen.
  • Eine Transaktion kann aus diversen Ursachen implizit abgebrochen werden oder sie kann durch eine Anweisung TRANSACTION ABORT explizit abgebrochen werden. Beispielhafte mögliche Ursachen für einen Transaktionsabbruch, der entsprechende Abbruchscode und der Bedingungscode, der in das Transaktionsabbruch-PSW platziert wird, sind im Folgenden beschrieben.
  • Externe Unterbrechung: Der Transaktionsabbruchscode wird auf 2 gesetzt, und der Bedingungscode im Transaktionsabbruch-PSW wird auf 2 gesetzt. Das Transaktionsabbruch-PSW wird als altes externes PSW als Teil der Verarbeitung von externen Unterbrechungen gespeichert.
  • Programmunterbrechung (nichtgefiltert): Eine Programmausnahmebedingung, die zu einer Unterbrechung führt (d.h. eine nichtgefilterte Bedingung), bewirkt einen Abbruch der Transaktion mit Code 4. Der Bedingungscode im Transaktionsabbruch-PSW wird für den Programmunterbrechungscode spezifisch gesetzt. Das Transaktionsabbruch-PSW wird als altes Programm-PSW als Teil der Verarbeitung von Programmunterbrechungen gespeichert.
  • Eine Anweisung, die andernfalls zu einem durch eine Operationsausnahme bedingten Transaktionsabbruch führen würde, kann zu alternativen Ergebnissen führen: bei einer nichteingeschränkten Transaktion kann die Transaktion stattdessen mit Abbruchcode 11 (eingeschränkte Anweisung) abgebrochen werden; bei einer eingeschränkten Transaktion kann eine Programmunterbrechung durch eine eingeschränkte Transaktion anstatt der Operationsausnahme erkannt werden.
  • Wenn ein PER-Ereignis (Program Event Recording - Programmereignisaufzeichnung) in Verbindung mit einer anderen nichtgefilterten Programmausnahmebedingung erkannt wird, wird der Bedingungscode auf 3 gesetzt.
  • Unterbrechung bei Maschinenfehler: Der Transaktionsabbruchscode wird auf 5 gesetzt, und der Bedingungscode im Transaktionsabbruch-PSW wird auf 2 gesetzt. Das Transaktionsabbruch-PSW wird als altes Maschinenfehler-PSW als Teil der Verarbeitung von Unterbrechungen bei Maschinenfehler gespeichert.
  • E/A-Unterbrechung: Der Transaktionsabbruchscode wird auf 6 gesetzt, und der Bedingungscode im Transaktionsabbruch-PSW wird auf 2 gesetzt. Das Transaktionsabbruch-PSW wird als altes E/A-PSW als Teil der Verarbeitung von E/A-Unterbrechungen gespeichert.
  • Aufruf der Überlaufroutine: Eine Bedingung des Aufrufs einer Überlaufroutine wird erkannt, wenn die Transaktion versucht, aus mehr Speicherorten abzurufen, als die CPU unterstützt. Der Transaktionsabbruchcode wird auf 7 gesetzt, und der Bedingungscode wird entweder auf 2 oder 3 gesetzt.
  • Speichern der Überlaufroutine: Eine Bedingung des Speicherns einer Überlaufroutine wird erkannt, wenn die Transaktion versucht, in mehr Speicherorten zu speichern als die CPU unterstützt. Der Transaktionsabbruchcode wird auf 8 gesetzt, und der Bedingungscode wird entweder auf 2 oder 3 gesetzt.
  • Ein Zulassen, dass der Bedingungscode in Reaktion auf einen durch einen Aufruf oder ein Speichern der Überlaufroutine bedingten Abbruch 2 oder 3 ist, ermöglicht der CPU, möglicherweise wiederholbare Situationen anzuzeigen (z.B. Bedingungscode 2 zeigt an, dass ein erneutes Ausführen der Transaktion produktiv sein könnte, während Bedingungscode 2 kein erneutes Ausführen empfiehlt).
  • Abrufkonflikt: Eine Abrufkonfliktbedingung wird erkannt, wenn eine weitere CPU oder das E/A-Teilsystem versucht, an einem Speicherort zu speichern, der von dieser CPU transaktionsorientiert abgerufen wurde. Der Transaktionsabbruchcode wird auf 9 gesetzt, und der Bedingungscode wird auf 2 gesetzt.
  • Speicherkonflikt: Eine Speicherkonfliktbedingung wird erkannt, wenn eine weitere CPU oder das E/A-Teilsystem versucht, auf einen Speicherort zuzugreifen, der von dieser CPU während einer transaktionsorientierten Ausführung gespeichert wurde. Der Transaktionsabbruchcode wird auf 10 gesetzt, und der Bedingungscode wird auf 2 gesetzt.
  • Eingeschränkte Anweisung: Wenn sich die CPU im Modus der transaktionsorientierten Ausführung befindet, bewirkt ein versuchtes Ausführen einer eingeschränkten Ausführung, dass die Transaktion abgebrochen wird. Der Transaktionsabbruchcode wird auf 11 gesetzt, und der Bedingungscode wird auf 3 gesetzt.
  • Wenn sich die CPU im Modus der eingeschränkten transaktionsorientierten Ausführung befindet, ist es nicht vorhersagbar, ob ein versuchtes Ausführen einer eingeschränkten Anweisung zu einer Programmunterbrechung durch eine eingeschränkte Transaktion oder zu einem durch eine eingeschränkte Anweisung bedingten Abbruch führen. Die Transaktion wird immer noch abgebrochen, aber der Abbruchcode kann jede Ursache anzeigen.
  • Programmausnahmebedingung (gefiltert): Eine Programmausnahmebedingung, die nicht zu einer Unterbrechung führt (d.h. eine gefilterte Bedingung), bewirkt, dass die Transaktion mit einer Transaktionsabbruchcode von 12 abgebrochen wird. Der Bedingungscode wird auf 3 gesetzt.
  • Verschachtelungstiefe überschritten: Die Bedingung der überschrittenen Verschachtelungstiefe wird erkannt, wenn sich die Transaktionsverschachtelungstiefe auf dem maximal zulässigen Wert für die Konfiguration befindet und eine Anweisung TRANSACTION BEGIN ausgeführt wird. Die Transaktion wird mit einem Transaktionsabbruchcode von 13 abgebrochen, und der Bedingungscode wird auf 3 gesetzt.
  • Auf Cachespeicherabrufe bezogene Bedingung: Eine Bedingung, die sich auf Speicherorte bezieht, die von der Transaktion abgerufen werden, wird vom Cachespeicher-Schaltkreis der CPU erkannt. Die Transaktion wird mit einem Transaktionsabbruchcode von 14 abgebrochen, und der Bedingungscode wird auf 2 oder 3 gesetzt.
  • Auf Vorgänge beim Speichern im Cachespeicher bezogene Bedingung:
    • Eine Bedingung, die sich auf Speicherorte bezieht, die von der Transaktion gespeichert werden, wird vom Cachespeicher-Schaltkreis der CPU erkannt. Die Transaktion wird mit einem Transaktionsabbruchcode von 15 abgebrochen, und der Bedingungscode wird auf 2 oder 3 gesetzt.
  • Anderweitig cachespeicherbezogene Bedingung: Eine anderweitig cachespeicherbezogene Bedingung wird vom Cachespeicher-Schaltkreis der CPU erkannt. Die Transaktion wird mit einem Transaktionsabbruchcode von 16 abgebrochen, und der Bedingungscode wird auf 2 oder 3 gesetzt.
  • Während einer transaktionsorientierten Ausführung, wenn die CPU auf Anweisungen oder Speicheroperanden unter Verwendung von unterschiedlichen Logiken zugreift, die der gleichen absoluten Adresse zugeordnet sind, ist es modellabhängig, ob die Transaktion abgebrochen wird. Wenn die Transaktion aufgrund von Zugriffen unter Verwendung von unterschiedlichen logischen Adressen abgebrochen wird, die der gleichen absoluten Adresse zugeordnet sind, wird Abbruchcode 14, 15 oder 16 gesetzt, je nach Bedingung.
  • Sonstige Bedingung: Eine sonstige Bedingung ist eine beliebige andere Bedingung, die von der CPU erkannt wird und einen Abbruch der Transaktion bewirkt. Der Transaktionsabbruchcode wird auf 255 gesetzt, und der Bedingungscode wird entweder auf 2 oder 3 gesetzt.
  • Wenn mehrere Konfigurationen in der gleichen Maschine (z.B. logische Partitionen oder virtuelle Maschinen) ausgeführt werden, kann eine Transaktion bedingt durch eine Unterbrechung bei externem Maschinenfehler oder eine E/A-Unterbrechung abgebrochen werden, die in einer unterschiedlichen Konfiguration aufgetreten ist.
  • Auch wenn im Vorstehenden Beispiele angeführt sind, können andere Ursachen eines Transaktionsabbruchs mit entsprechenden Abbruchcodes und Bedingungscodes bereitgestellt werden. Beispielsweise kann eine Ursache eine Neustartunterbrechung sein, wobei der Transaktionsabbruchcode auf 1 gesetzt wird und der Bedingungscode im Transaktionsabbruch-PSW auf 2 gesetzt wird. Das Transaktionsabbruch-PSW wird als altes Neustart-PSW als Teil der Verarbeitung von Neustarts gespeichert. Ein weiteres Beispiel für eine Ursache kann eine Supervisor-Aufrufbedingung sein, wobei der Abbruchcode auf 3 gesetzt wird und der Bedingungscode im Transaktionsabbruch-PSW auf 3 gesetzt wird. Andere oder unterschiedliche Beispiele sind ebenfalls möglich.
  • Anmerkungen:
    • 1. Die sonstige Bedingung kann aus beliebigen des Folgenden entstehen:
      • * Anweisungen in der z/Architecture wie COMPARE AND REPLACE DAT TABLE ENTRY, COMPARE AND SWAP AND PURGE, INVALIDATE DAT TABLE ENTRY, INVALIDATE PAGE TABLE ENTRY, PERFORM FRAME MANAGEMENT FUNCTION, wobei die NQ-Steuerung null ist und die SK-Steuerung eins ist, SET STORAGE KEY EXTENDED, wobei die NQ-Steuerung null ist, durchgeführt von einer weiteren CPU in der Konfiguration; der Bedingungscode wird auf 2 gesetzt.
      • * Eine Operatorfunktion, z.B. Zurücksetzen, Neustart oder Stopp, oder der äquivalente SIGNAL-PROCESSOR-Auftrag wird auf der CPU durchgeführt.
      • * Jedwede andere oben nicht aufgezählte Bedingung; der Bedingungscode wird auf 2 oder 3 gesetzt.
    • 2. Der Speicherort, an dem Abruf- und Speicherkonflikte erkannt werden, kann ein beliebiger innerhalb der gleichen Cachespeicherzeile sein.
    • 3. Unter bestimmten Umständen ist die CPU eventuell nicht in der Lage, zwischen ähnlichen Abbruchbedingungen zu unterscheiden. Beispielsweise kann ein Aufruf oder Speichern der Überlaufroutine aus Sicht eines jeweiligen Abruf- oder Speicherkonflikts nicht unterscheidbar sein.
    • 4. Das spekulative Ausführen von mehreren Anweisungspfaden durch die CPU kann dazu führen, dass eine Transaktion aufgrund von Konflikt- oder Überlaufbedingungen abgebrochen wird, auch wenn solche Bedingungen in der konzeptionellen Abfolge nicht auftreten. Während sich die CPU im Modus der eingeschränkten transaktionsorientierten Ausführung befindet, kann sie das spekulative Ausführen vorübergehend verhindern, indem sie den Versuch zulässt, dass die Transaktion ausgeführt wird, ohne dass solche Konflikte oder Überläufe spekulativ erkannt werden.
  • Ein Ausführen einer Anweisung TRANSACTION ABORT bewirkt einen Transaktionsabbruch. Der Transaktionsabbruchcode wird aus der Adresse des zweiten Operanden gesetzt. Der Bedingungscode wird entweder auf 2 oder 3 gesetzt, in Abhängigkeit davon, ob Bit 63 der Adresse des zweiten Operanden null oder eins ist.
  • 10 fasst beispielhafte in einem Transaktionsdiagnoseblock gespeicherte Abbruchcodes und den entsprechenden Bedingungscode (CC) zusammen. Die Beschreibung in 10 zeigt eine bestimmte Implementierung. Andere Implementierungen und Codierungen von Werten sind möglich.
  • Bei einer Ausführungsform und wie oben erwähnt stellt die Transaktionseinrichtung sowohl eingeschränkte Transaktionen als auch nichteingeschränkte Transaktionen sowie eine damit in Zusammenhang stehende Verarbeitung bereit. Zunächst werden eingeschränkte Transaktionen erörtert und danach nichteingeschränkte Transaktionen.
  • Eine eingeschränkte Transaktion wird im transaktionsorientierten Modus ohne Ausweichpfad ausgeführt. Es handelt sich um einen Verarbeitungsmodus, der für kompakte Funktionen nützlich ist. Wenn keine wiederholten Unterbrechungen oder Konflikte mit anderen CPUs oder dem E/A-Teilsystem vorliegen (d.h. durch Bedingungen verursacht, die kein erfolgreiches Ausführen der Transaktion ermöglichen), wird schließlich eine eingeschränkte Transaktion ausgeführt; somit ist eine Abbruch-Handler-Routine nicht erforderlich und nicht spezifiziert. Beispielsweise bei Fehlen einer Verletzung einer Bedingung, die nicht adressiert werden kann (z.B. Teilen durch 0); einer Bedingung, die ein Ausführen der Transaktion nicht ermöglicht (z.B. eine Zeitgeberunterbrechung, die das Ausführen einer Anweisung nicht ermöglicht; nichterwartete E/A; usw.); oder einer Verletzung einer Beschränkung oder Einschränkung in Zusammenhang mit einer eingeschränkten Transaktion wird die Transaktion schließlich ausgeführt.
  • Eine eingeschränkte Transaktion wird durch eine Anweisung TRANSACTION BEGIN constrained (TBEGINC) eingeleitet, wenn sich die Transaktionsverschachtelungstiefe anfänglich null ist. Eine eingeschränkte Transaktion unterliegt bei einer Ausführungsform den folgenden Einschränkungen.
    • 1. Die Transaktion führt nicht mehr als 32 Anweisungen aus, wobei die Anweisungen TRANSACTION BEGIN constrained (TBEGINC) und TRANSACTION END nicht mit eingeschlossen sind.
    • 2. Alle Anweisungen in der Transaktion müssen innerhalb von 256 zusammenhängenden Speicherbytes liegen, die Anweisung TRANSACTION BEGIN constrained (TBEGINC) und jedwede Anweisungen TRANSACTION END mit eingeschlossen.
    • 3. Zusätzlich zu den eingeschränkten Anweisungen gelten die folgenden Einschränkungen für eine eingeschränkte Transaktion.
      • a. Anweisungen sind auf jene beschränkt, die als allgemeine Anweisungen bezeichnet werden, beispielsweise Addieren, Subtrahieren, Multiplizieren, Dividieren, Verschieben, Drehen usw.
      • b. Verzweigungsanweisungen sind auf Folgendes beschränkt (die aufgelisteten Anweisungen beziehen sich bei einem Beispiel auf die z/Architecture).
        • * BRANCH RELATIVE ON CONDITION, wobei das M1-Feld ungleich null ist und das RI2-Feld einen positiven Wert enthält.
        • * BRANCH RELATIVE ON CONDITION LONG, wobei das M1-Feld ungleich null ist und das RI2-Feld einen positiven Wert enthält, der keinen Adressenumlauf bewirkt.
        • * COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE und COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE, wobei das M3-Feld ungleich null ist und das RI4-Feld einen positiven Wert enthält. (Das heißt, nur Vorwärtsverzweigungen mit Verzweigungsmasken ungleich null.)
      • c. Mit Ausnahme von TRANSACTION END und Anweisungen, die ein spezifiziertes Serialisieren von Operanden bewirken, sind Anweisungen, die eine Serialisierungsfunktion bewirken, eingeschränkt.
      • d. Anweisungen zu Speicher-und-Speicher-Operationen (SS) und Speicher-und-Speicher-Operationen mit erweitertem Operationscode (SSE) sind eingeschränkt.
      • e. Alle folgenden allgemeinen Anweisungen (die sich bei diesem Beispiel auf die z/Architecture beziehen) sind eingeschränkt:
        • CHECKSUM; CIPHER MESSAGE; CIPHER MESSAGE WITH CFB; CIPHER MESSAGE WITH CHAINING; CIPHER MESSAGE WITH COUNTER; CIPHER MESSAGE WITH OFB; COMPARE AND FORM CODEWORD; COMPARE LOGICAL LONG; COMPARE LOGICAL LONG EXTENDED; COMPARE LOGICAL LONG UNICODE; COMPARE LOGICAL STRING; COMPARE UNTIL SUBSTRING EQUAL; COMPRESSION CALL; COMPUTE INTERMEDIATE MESSAGE DIGEST; COMPUTE LAST MESSAGE DIGEST; COMPUTE MESSAGE AUTHENTICATION CODE; CONVERT TO BINARY; CONVERT TO DECIMAL; CONVERT UNICODE-16 TO UNICODE-32; CONVERT UNICODE-16 TO UNICODE-8; CONVERT UNICODE-32 TO UNICODE-16; CONVERT UNICODE-32 TO UNICODE-8; CONVERT UNICODE-8 TO UNICODE-16; CONVERT UNICODE-8 TO UNICODE-32; DIVIDE; DIVIDE LOGICAL; DIVIDE SINGLE; EXECUTE; EXECUTE RELATIVE LONG; EXTRACT CACHE ATTRIBUTE; EXTRACT CPU TIME; EXTRACT PSW; EXTRACT TRANSACTION NESTING DEPTH; LOAD AND ADD; LOAD AND ADD LOGICAL; LOAD AND AND; LOAD AND EXCLUSIVE OR; LOAD AND OR; LOAD PAIR DISJOINT; LOAD PAIR FROM QUADWORD; MONITOR CALL; MOVE LONG; MOVE LONG EXTENDED; MOVE LONG UNICODE; MOVE STRING; NON-TRANSACTIONAL STORE; PERFORM CRYPTOGRAPHIC COMPUTATION; PREFETCH DATA; PREFETCH DATA RELATIVE LONG; RUNTIME INSTRUMENTATION EMIT; RUNTIME INSTRUMENTATION NEXT; RUNTIME INSTRUMENTATION OFF; RUNTIME INSTRUMENTATION ON; SEARCH STRING; SEARCH; STRING UNICODE; SET ADDRESSING MODE; STORE CHARACTERS UNDER MASK HIGH, wenn das M3-Feld null ist und der Code im R1-Feld 6 oder 7 ist; STORE CLOCK; STORE CLOCK EXTENDED; STORE CLOCK FAST; STORE FACILITY LIST EXTENDED; STORE PAIR TO QUADWORD; TEST ADDRESSING MODE; TRANSACTION ABORT; TRANSACTION BEGIN (sowohl TBEGIN als auch TBEGINC); TRANSLATE AND TEST EXTENDED; TRANSLATE AND TEST REVERSE EXTENDED; TRANSLATE EXTENDED; TRANSLATE ONE TO ONE; TRANSLATE ONE TO TWO TRANSLATE TWO TO ONE; und TRANSLATE TWO TO TWO.
    • 4. Die Speicheroperanden der Transaktion greifen auf nicht mehr als vier Achtfachwörter zu. Anmerkung: LOAD ON CONDITION und STORE ON CONDITION werden als auf Speicher verweisend angesehen, unabhängig vom Bedingungscode. Ein Achtfachwort ist beispielsweise eine Gruppe von 32 aufeinanderfolgenden Bytes auf einer 32-Byte-Grenze.
    • 5. Die auf dieser CPU ausgeführte Transaktion oder Speichervorgänge von anderen CPUs oder dem E/A-Teilsystem greift bzw. greifen nicht auf Zugriffsspeicheroperanden in 4-K-Byte-Blöcken zu, die die 256 Speicherbytes enthalten, beginnend mit der Anweisung TRANSACTION BEGIN constrained (TBEGINC).
    • 6. Die Transaktion greift nicht auf Anweisungen oder Speicheroperanden unter Verwendung unterschiedlicher logischer Adressen zu, die der gleichen absoluten Adresse zugeordnet sind.
    • 7. Von der Transaktion durchgeführte Operandenverweise müssen innerhalb eine einzigen Doppelwortes liegen, mit Ausnahme von LOAD ACCESS MULTIPLE, LOAD MULTIPLE, LOAD MULTIPLE HIGH, STORE ACCESS MULTIPLE, STORE MULTIPLE, und STORE MULTIPLE HIGH, wobei Operandenverweise innerhalb eines einzigen Achtfachworts liegen müssen.
  • Wenn eine eingeschränkte Transaktion eine der oben angeführten Einschränkungen 1 bis 7 verletzt, wird (a) eine Programmunterbrechung durch eine eingeschränkte Transaktion erkannt oder (b) das Ausführen wird fortgesetzt, als wäre die Transaktion nicht eingeschränkt, außer wenn weitere Einschränkungsverletzungen weiterhin zu einer Programmunterbrechung durch eine eingeschränkte Transaktion führen. Es ist nicht vorhersagbar, welche Aktion vorgenommen wird, und die vorgenommene Aktion kann beruhend darauf, welche Einschränkung verletzt wird, unterschiedlich sein.
  • Liegen keine Einschränkungsverletzungen, wiederholte Unterbrechungen oder Konflikte mit anderen CPUs oder dem E/A-Teilsystem vor, wird eine eingeschränkte Transaktion schließlich wie oben beschrieben ausgeführt.
    • 1 . Die Chance für ein erfolgreiches Ausführen einer eingeschränkten Transaktion erhöht sich, wenn die Transaktion die folgenden Kriterien erfüllt:
      • a. Die ausgegebenen Anweisungen übersteigen das Maximum von 32 nicht.
      • b. Die Speicheroperandenverweise übersteigen das Maximum von 4 Achtfachwörtern nicht.
      • c. Die Speicheroperandenverweise befinden sich in der gleichen Cachespeicherzeile.
      • d. Speicheroperandenverweise auf die gleichen Speicherorte erfolgen bei allen Transaktionen in der gleichen Reihenfolge.
    • 2. Bei der ersten Ausführung einer eingeschränkten Transaktion ist deren erfolgreicher Ausführung nicht notwendigerweise gewährleistet. Wenn jedoch eine eingeschränkte Transaktion, die keine der oben aufgelisteten Einschränkten verletzt, abgebrochen wird, verwendet die CPU einen Schaltkreis, um sicherzustellen, dass ein wiederholtes Ausführen der Transaktion danach erfolgreich ist.
    • 3. Im Rahmen einer eingeschränkten Transaktion ist TRANSACTION BEGIN eine eingeschränkte Anweisung, somit kann eine eingeschränkte Transaktion nicht verschachtelt werden.
    • 4. Eine Verletzung einer der oben angeführten Einschränkungen 1 bis 7 durch eine eingeschränkte Transaktion kann zu einer Programmschleife führen.
    • 5. Die Beschränkungen einer eingeschränkten Transaktion ähneln jenen einer Compare-and-Swap-Schleife. Aufgrund einer möglichen Störung aus anderen CPUs und dem E/A-Teilsystem gibt es aus architektonischer Sicht keine Sicherheit, dass eine Anweisung COMPARE AND SWAP jemals mit einem Bedingungscode 0 ausgeführt wird. Bei einer eingeschränkte Transaktion kann eine ähnliche Störung in Form von Abruf- oder Speicherkonfliktabbrüchen oder nicht erwarteten Unterbrechungen auftreten.
  • Die CPU verwendet Ausgleichsalgorithmen, um sicherzustellen, dass eine eingeschränkte Transaktion bei Fehlen von Einschränkungsverletzungen schließlich ausgeführt wird.
    • 6. Um die Anzahl wiederholter Iterationen zu ermitteln, die erforderlich ist, um eine eingeschränkte Transaktion auszuführen, kann das Programm einen Zähler in einem allgemeinen Register verwendet, der nicht der Speichermaske für allgemeine Register unterliegt. Nachstehend ist ein Beispiel gezeigt.
    LH1 15,0 Wiederholungszähler null.
    Schleife TBEGINC 0(0),X ‚FE00‘ Allgemeine Register 0 bis 13 beibehalten
    AHI 15,1 Zähler erhöhen
    ...
    ... Code für eine eingeschränkte transaktionsorientierte Ausführung
    ...
    TEND Ende der Transaktion.

    * R15 enthält nun einen Zählwert der
    Transaktionswiederholungsversuche.
  • Man bemerke, dass beide Register 14 und 15 bei diesem Beispiel nicht zurückgesetzt werden. Man bemerke darüber hinaus, dass der Zählwert im allgemeinen 15 bei einigen Modellen niedrig sein kann, wenn die CPU die Abbruchbedingung zwar nach Ausführen der Anweisung TBEGINC, aber vor Ausführen der AHI-Anweisung erkennt.
  • Wie durch die CPU wahrgenommen, unterscheiden sich im Modus der transaktionsorientierten Ausführung durchgeführte Abrufe und Speichervorgänge nicht von jenen, die nicht im Transaktionsausführungsmodus durchgeführt wurden.
  • Bei einer Ausführungsform wählt der Benutzer (d.h. derjenige, der die Transaktion erstellt) aus, ob eine Transaktion eingeschränkt werden soll. Eine Ausführungsform der Logik, die der Verarbeitung von eingeschränkten Transaktionen und insbesondere der Verarbeitung im Zusammenhang mit einer Anweisung TBEGINC zugehörig ist, wird unter Bezugnahme auf 11 beschrieben. Das Ausführen der Anweisung TBEGINC bewirkt, dass die CPU in den Modus der eingeschränkten transaktionsorientierten Ausführung übergeht oder im Modus der nichteingeschränkten Ausführung bleibt. Die CPU (d.h. der Prozessor), die TBEGINC ausführt, für die Logik von 11 aus.
  • Unter Bezugnahme auf 11 wird eine Serialisierungsfunktion auf der Grundlage des Ausführens einer Anweisung TBEGINC durchgeführt, SCHRITT 1100. Eine Serialisierungsfunktion oder -operation beinhaltet das Ausführen aller konzeptionell davor liegenden Speicherzugriffe (und bei der z/Architecture beispielsweise entsprechende Referenzbit- und Änderungsbiteinstellungen) durch die CPU, wie von anderen CPUs und dem E/A-Teilsystem wahrgenommen, bevor die konzeptionell nachfolgenden Speicherzugriffe (und entsprechenden Referenzbit- und Änderungsbiteinstellungen) erfolgen. Die Serialisierung betrifft die Abfolge aller CPU-Zugriffe auf einen Speicher und auf die Speicherschlüssel, mit Ausnahme jener, die mit dem Abrufen von ART-Tabelleneinträgen und DAT-Tabelleneinträgen in Zusammenhang stehen.
  • Wie von einer CPU im Modus der transaktionsorientierten Ausführung wahrgenommen, arbeitet eine Serialisierung normal (wie oben beschrieben). Wie von anderen CPUs und durch das E/A-Teilsystem wahrgenommen, erfolgt eine Serialisierungsoperation, die durchgeführt wird, während sich eine CPU im Modus der transaktionsorientierten Ausführung befindet, wenn die CPU den Modus der transaktionsorientierten Ausführung verlässt, entweder infolge einer Anweisung TRANSACTION END, die die Transaktionsverschachtelungstiefe auf null senkt (normale Beendigung), oder infolge des Abbruchs der Transaktion.
  • Nach durchgeführter Serialisierung wird eine Ermittlung durchgeführt, ob eine Ausnahme erkannt wurde, ABFRAGE 1102. Ist dies der Fall, wird die Ausnahme bearbeitet, SCHRITT 1104. Beispielsweise wird eine Ausnahme durch eine spezielle Operation erkannt, und die Operation wird unterdrückt, wenn die Steuerung der transaktionsorientierten Ausführung, Bit 8 von Steuerregister 0, 0 ist. Als weiteres Beispiel wird eine Spezifikationsausnahme erkannt und die Operation unterdrückt, wenn das B1-Feld, Bits 16 bis 19 der Anweisung, ungleich null ist; eine Ausführungsausnahme erkannt und die Operation unterdrückt, wenn die TBEGINC das Ziel einer Anweisung vom Ausführungstyp ist; und eine Operationsausnahme wird erkannt und die Operation unterdrückt, wenn die Einrichtung für transaktionsorientierte Ausführung in der Konfiguration nicht installiert ist. Wenn sich die CPU bereits im eingeschränkten Transaktionsausführungsmodus befindet, wird eine Programmausnahme aufgrund einer durch eine eingeschränkte Transaktion bedingten Ausnahme erkannt und die Operation unterdrückt. Wenn die um 1 erhöhte Transaktionsverschachtelungstiefe eine modellabhängige maximale Transaktionsverschachtelungstiefe überschreitet, wird die Transaktion mit Abbruchcode 13 abgebrochen. Andere oder unterschiedliche Ausnahmen können erkannt und bearbeitet werden.
  • Wenn allerdings keine Ausnahme vorliegt, wird eine Ermittlung durchgeführt, ob die Transaktionsverschachtelungstiefe null ist, ABFRAGE 1106. Wenn die Transaktionsverschachtelungstiefe null ist, wird die Transaktionsdiagnoseblock-Adresse als ungültig angesehen, SCHRITT 1108; das Transaktionsabbruch-PSW wird aus den Inhalten des aktuellen PSW gesetzt, außer wenn die Anweisungsadresse des Transaktionsabbruch-PSW die Anweisung TBEGINC anstatt der nächsten sequenziellen Anweisung ausweist, SCHRITT 1110; und die Inhalte der Paare allgemeiner Register werden, wie durch die Speichermaske für allgemeine Register ausgewiesen, an einem modellabhängigen Speicherort gespeichert, der für das Programm nicht direkt zugänglich ist, SCHRITT 1112. Darüber hinaus wird die Verschachtelungstiefe auf 1 gesetzt, SCHRITT 1114. Ferner werden der effektive Wert der Steuerung zum Zulassen einer Gleitkommaoperation (F) und der Programmunterbrechungsfilterungs-Steuerung (PIFC) auf null gesetzt, SCHRITT 1316. Darüber hinaus wird der effektive Wert der Steuerung zum Zulassen einer AR-Änderung (A), Bit-12-Feld des I2-Feldes der Anweisung, ermittelt, SCHRITT 1118. Beispielsweise ist die effektive A-Steuerung das logische UND der A-Steuerung in der Anweisung TBEGINC für die aktuelle Ebene und für alle äußeren Anweisungen TBEGIN.
  • Unter erneuter Bezugnahme auf ABFRAGE 1106 wird die Verschachtelungstiefe um 1 erhöht, SCHRTT 1120, wenn die Verschachtelungstiefe höher als null ist. Darüber hinaus wird der effektive Wert der Steuerung zum Zulassen einer Gleitkommaoperation (F) auf null gesetzt, und der effektive Wert der Programmunterbrechungsfilterungs-Steuerung (PIFC) bleibt unverändert, SCHRITT 1122. Die Verarbeitung fährt mit SCHRITT 1118 fort. Bei einer Ausführungsform führt ein erfolgreiches Einleiten der Transaktion zu Bedingungscode 0. Dies schließt eine Ausführungsform der Logik ab, die dem Ausführen einer Anweisung TBEGINC zugehörig ist.
  • Bei einer Ausführungsform kann das oben bereitgestellte Prüfen auf Ausnahmen in variierender Reihenfolge stattfinden. Eine bestimmte Reihenfolge für das Prüfen auf Ausnahmen ist wie nachstehend angeführt:
  • Ausnahmen mit der gleichen Priorität wie die Priorität der Programmunterbrechungsbedingungen für den allgemeinen Fall.
  • Spezifikationsausnahme aufgrund dessen, dass das B1-Feld einen Wert ungleich null enthält.
  • Abbruch aufgrund einer Überschreitung der Transaktionsverschachtelungstiefe.
  • Bedingungscode 0 aufgrund einer normalen Ausführung.
  • Darüber hinaus kommt Folgendes bei einer oder mehreren Ausführungsformen zur Anwendung:
    • 1. Register, die von der Speichermaske für allgemeine Register als zu speichern ausgewiesen sind, werden nur zurückgesetzt, wenn die Transaktion abgebrochen wird, und nicht, wenn die Transaktion normal durch TRANSACTION END endet. Nur die von der GRSM der äußersten Anweisung TRANSACTION BEGIN ausgewiesenen Register werden bei einem Abbruch zurückgesetzt.
  • Das I2-Feld sollte alle Registerpaare ausweisen, die Eingabewerte bereitstellen, die durch eine eingeschränkte Transaktion geändert werden. Wenn die Transaktion abgebrochen wird, werden somit die Eingaberegisterwerte auf ihre ursprünglichen Inhalte zurückgesetzt, wenn die eingeschränkte Transaktion erneut ausgeführt wird.
    • 2. Bei den meisten Modellen kann eine verbesserte Leistung sowohl bei TRANSACTION BEGIN als auch bei Transaktionsabbruch dadurch erzielt werden, dass die Mindestanzahl von Registern spezifiziert wird, die in der Speichermaske für allgemeine Register gespeichert und zurückgesetzt werden müssen.
    • 3. Im Folgenden sind die Ergebnisse der Anweisung TRANSACTION BEGIN (sowohl TBEGIN als auch TBEGINC) auf der Grundlage der aktuellen Transaktionsverschachtelungstiefe und bei TND ungleich null gezeigt, unabhängig davon, ob sich die CPU im Modus der nichteingeschränkten oder eingeschränkten transaktionsorientierten Ausführung befindet:
    Anweisung: TND = 0
    TBEGIN Eintreten in den Modus der nichteingeschränkten transaktionsorientierten Ausführung
    TBEGINC Eintreten in den Modus der eingeschränkten transaktionsorientierten Ausführung
    Anweisung: TND > 0
    TBEGIN NTX-Modus CTX-Modus
    Fortsetzen im Modus der nichteingeschränkten transaktionsorientierten Ausführung Ausnahme durch eine eingeschränkte Transaktion
    TBEGINC Fortsetzen im Modus der nichteingeschränkten transaktionsorientierten Ausführung Ausnahme durch eine eingeschränkte Transaktion
  • Erläuterung:
    CTX CPU befindet sich im Modus der eingeschränkten transaktionsorientierten Ausführung
    NTX CPU befindet sich im Modus der nichteingeschränkten transaktionsorientierten Ausführung
    TND Transaktionsverschachtelungstiefe zu Beginn der Anweisung.
  • Zusammenfassend ist die Verarbeitung einer eingeschränkten Transaktion wie folgt:
    • * Wenn bereits im Modus der eingeschränkten TX befindlich, wird eine Ausnahme durch eine eingeschränkte Transaktion erkannt.
    • * Wenn die aktuelle TND (Transaktionsverschachtelungstiefe) > 0, wird das Ausführen wie im Fall einer nichteingeschränkten Transaktion fortgesetzt.
      • ) Effektive F-Steuerung wird auf null gesetzt
      • ) Effektive PIFC bleibt unverändert
      • ) Ermöglicht einer äußeren nichteingeschränkten TX, eine Servicefunktion aufzurufen, die eingeschränkte TX gegebenenfalls verwendet.
    • * Wenn aktuelle TND = 0:
      • ) Transaktionsdiagnoseblock-Adresse ist ungültig
        • - Bei Abbruch wird keine anweisungsspezifizierte TDB gespeichert
      • ) Transaktionsabbruch-PSW wird auf Adresse der TBEGINC gesetzt
        • - Nicht die nächste sequenzielle Anweisung
      • ) Von der GRSM ausgewiesene Paare allgemeiner Register werden an einem modellabhängigen Speicherort gespeichert, der für das Programm nicht zugänglich ist
      • ) Transaktions-Token wird gegebenenfalls gebildet (aus D2-Operanden). Das Transaktionstoken ist eine Kennung der Transaktion. Es kann gleich der Speicheroperandenadresse sein oder einen anderen Wert aufweisen.
    • ∗ Effektive A = TBEGINC A und jedwede äußere A
    • ∗ TND wird erhöht
      • ) Wenn die TND von 0 auf 1 übergeht, tritt die CPU in den Modus der eingeschränkten TX ein.
      • ) Andernfalls bleibt die CPU im Modus der eingeschränkten TX.
    • ∗ Die Anweisung wird mit CC0 ausgeführt.
    • ∗ Ausnahmen:
      • ) Spezifikationsausnahme (PIC (Program Interruption Code - Programmunterbrechungscode) 0006), wenn das B1-Feld ungleich null ist.
      • ) Ausnahme durch spezielle Operation (PIC 0013 hex), wenn die Transaktionsausführungssteuerung (CR0.8) null ist
      • ) Ausnahme durch eingeschränkte Transaktion (PIC 0018 hex), wenn im Modus der eingeschränkten TX ausgegeben
      • ) Operationsausnahme (PIC 0001), wenn die Einrichtung für eingeschränkte transaktionsorientierte Ausführung nicht installiert ist
      • ) Ausführungsausnahme (PIC 0003), wenn die Anweisung das Ziel einer Anweisung vom Ausführungstyp ist
      • ) Abbruchcode 13, wenn die Verschachtelungstiefe überschritten wird
        • ∗ Abbruchbedingungen bei eingeschränkter Transaktion:
      • ) Abbruch-PSW zeigt auf Anweisung TBEGINC
        • - Nicht die darauffolgende Anweisung
        • - Abbruchbedingung bewirkt einen Neustart der gesamten TX
          • ∗ Kein Pfad für Fehlschläge
      • ) CPU ergreift spezielle Maßnahmen, um ein sicheres Ausführen bei erneutem Anlauf sicherzustellen
      • ) Geht man von keinem dauerhaften Konflikt bzw. keiner Unterbrechung oder Einschränkungsverletzung aus, ist sichergestellt, dass die Transaktion schließlich ausgeführt wird.
    • ∗ Einschränkungsverletzung:
      • ) PIC 0018 hex - zeigt eine Verletzung einer Transaktionseinschränkung an
      • ) Oder Transaktion wird ausgeführt, als wäre sie nichteingeschränkt
  • Wie oben beschrieben, stellt die Transaktionseinrichtung bei einer Ausführungsform zusätzlich zur optionalen Verarbeitung von eingeschränkten Transaktionen auch eine Verarbeitung von nichteingeschränkten Transaktionen bereit. Weitere Details zur Verarbeitung von nichteingeschränkten Transaktionen und insbesondere zur Verarbeitung in Zusammenhang mit einer Anweisung TBEGIN sind unter Bezugnahme auf 12 beschrieben. Das Ausführen der Anweisung TBEGIN bewirkt, dass die CPU in den Modus der nichteingeschränkten transaktionsorientierten Ausführung übergeht oder in diesem bleibt. Die CPU (d.h. der Prozessor), die TBEGIN ausführt, führt die Logik von 12 aus.
  • Unter Bezugnahme auf 12 wird eine Serialisierungsfunktion (oben beschrieben) auf der Grundlage des Ausführens der Anweisung TBEGIN durchgeführt, SCHRTT 1200. Nach durchgeführter Serialisierung wird eine Ermittlung dahingehend durchgeführt, ob eine Ausnahme erkannt wurde, ABFRAGE 1202. Ist dies der Fall, wird die Ausnahme bearbeitet, SCHRITT 1204. Beispielsweise wird eine Ausnahme durch spezielle Operation erkannt und die Operation unterdrückt, wenn die Steuerung der transaktionsorientierten Ausführung, Bit 8 von Steuerregister 0, null ist. Darüber hinaus wird eine Spezifikationsausnahme erkannt und die Operation unterdrückt, wenn die Programmunterbrechungsfilterungs-Steuerung, Bits 14 bis 15 des I2-Feldes der Anweisung, den Wert 3 enthalten; oder die Adresse des ersten Operanden keine Doppelwortgrenze ausweist. Eine Operationsausnahme wird erkannt und die Operation unterdrückt, wenn die Einrichtung für transaktionsorientierte Ausführung in der Konfiguration nicht installiert ist; und eine Ausführungsausnahme wird erkannt und die Operation unterdrückt, wenn die TBEGIN das Ziel einer Anweisung vom Ausführungstyp ist. Wenn sich die CPU im Modus der eingeschränkten transaktionsorientierten Ausführung befindet, wird darüber hinaus eine Programmausnahme aufgrund einer durch eine eingeschränkte Transaktion bedingten Ausnahme erkannt und die Operation unterdrückt. Wenn die um 1 erhöhte Transaktionsverschachtelungstiefe eine modellabhängige maximale Transaktionsverschachtelungstiefe überschreitet, wird die Transaktion mit Abbruchcode 13 abgebrochen.
  • Wenn das B1-Feld der Anweisung ungleich null ist und sich die CPU nicht im Modus der transaktionsorientierten Ausführung befindet, d.h., die Transaktionsverschachtelungstiefe ist null, wird die Speicherzugänglichkeit für den ersten Operanden ermittelt. Wenn auf den ersten Operanden für Speichervorgänge nicht zugegriffen werden kann, wird eine Zugriffsausnahme erkannt, und die Operation wird entweder aufgehoben, unterdrückt oder beendet, je nach spezifischer Zugriffsausnahmebedingung. Darüber hinaus wird jedes PER-Speicheränderungsereignis für den ersten Operanden erkannt. Wenn das B1-Feld ungleich null ist und sich die CPU bereits im Modus der transaktionsorientierten Ausführung befindet, ist es nicht vorhersagbar, ob eine Speicherzugänglichkeit für den ersten Operanden ermittelt wird, und PER-Speicheränderungsereignisse werden für den ersten Operanden ermittelt. Wenn das B1-Feld null ist, wird auf den ersten Operanden nicht zugegriffen.
  • Neben dem Prüfen auf Ausnahmen kann eine Ermittlung dahingehend durchgeführt werden, ob sich die CPU im Modus der transaktionsorientierten Ausführung befindet (d.h., die Transaktionsverschachtelungstiefe ist null), ABFRAGE 1206. Wenn sich die CPU nicht im Modus der transaktionsorientierten Ausführung befindet, werden die Inhalte ausgewählter Paare allgemeiner Register gespeichert, SCHRITT 1208. Insbesondere werden die Inhalte der von der Speichermaske für allgemeine Register ausgewiesenen Paare allgemeiner Register an einem modellabhängigen Speicherort gespeichert, der für das Programm nicht direkt zugänglich ist.
  • Darüber hinaus wird eine Ermittlung dahingehend durchgeführt, ob das B1-Feld der Anweisung null ist, ABFRAGE 1210. Wenn das B1-Feld ungleich null ist, wird die Adresse des ersten Operanden im Transaktionsdiagnoseblock platziert, SCHRITT 1214, und die Transaktionsdiagnoseblock-Adresse ist gültig. Darüber hinaus wird das Transaktionsabbruch-PSW aus den Inhalten des aktuellen PSW gesetzt, SCHRITT 1216. Die Anweisungsadresse des Transaktionsabbruch-PSW weist die nächste sequenzielle Anweisung aus (d.h. die Anweisung, die auf die äußerste TBEGIN folgt).
  • Ferner wird eine Ermittlung in Bezug auf den effektiven Wert der Steuerung zum Zulassen einer AR-Änderung (A), Bit 12 des I2-Feldes der Anweisung, durchgeführt, SCHRITT 1218. Die effektive A-Steuerung ist das logische AND der A-Steuerung in der Anweisung TBEGIN für die aktuelle Ebene und für alle anderen äußeren Ebenen. Außerdem wird ein effektiver Wert der Steuerung zum Zulassen einer Gleitkommaoperation (F), Bit 13 des I2. Feldes der Anweisung, ermittelt, SCHRITT 1220. Die effektive F-Steuerung ist das logische UND der F-Steuerung in der Anweisung TBEGIN für die aktuelle Ebene und für alle anderen äußeren Ebenen. Darüber hinaus wird ein effektiver Wert der Programmunterbrechungsfilterung-Steuerung (PIFC), Bits 14 bis 15 des I2-Feldes der Anweisung, ermittelt, SCHRITT 1222. Der effektive PIFC-Wert ist der höchste Wert in der Anweisung TBEGIN für die aktuelle Ebene und für alle äußeren Ebenen.
  • Außerdem wird ein Wert von eins zur Transaktionsverschachtelungstiefe addiert, SCHRITT 1224, und die Anweisung wird durch Setzen des Bedingungscodes 0 ausgeführt, SCHRITT 1226. Wenn die Transaktionsverschachtelungstiefe von null auf eins übergeht, tritt die CPU in den Modus der nichteingeschränkten transaktionsorientierten Ausführung ein; andernfalls bleibt die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung.
  • Unter erneuter Bezugnahme auf ABFRAGE 1210 ist die Transaktionsdiagnoseblock-Adresse ungültig, wenn B1 gleich null ist, SCHRITT 1211, und die Verarbeitung fährt mit SCHRITT 1218 fort. Gleichermaßen fährt die Verarbeitung mit SCHRITT 1218 fort, wenn sich die CPU im Modus der transaktionsorientierten Ausführung befindet, ABFRAGE 1206.
  • Zu den entstehenden Bedingungscodes des Ausführens von TBEGIN gehören beispielsweise:
    0 Transaktionseinleitung erfolgreich
    1 -
    2 -
    3 -
  • Zu Programmausnahmen gehören beispielsweise:
    • ∗ Zugriff (Speichervorgang, erster Operand)
    • ∗ Operation (Einrichtung für transaktionsorientierte Ausführung nicht installiert)
    • ∗ Spezielle Operation
    • ∗ Spezifikation
    • ∗ Transaktionseinschränkung (aufgrund einer eingeschränkten Anweisung)
  • Bei einer Ausführungsform kann das oben bereitgestellte Prüfen auf Ausnahmen in variierender Reihenfolge stattfinden. Eine bestimmte Reihenfolge für das Prüfen auf Ausnahmen ist wie nachstehend angeführt:
    • ∗ Ausnahmen mit der gleichen Priorität wie die Priorität der Programmunterbrechungsbedingungen für den allgemeinen Fall.
    • ∗ Spezifikationsausnahme aufgrund eines reservierten PIFC-Werts.
    • ∗ Spezifikationsausnahme aufgrund dessen, dass sich die Adresse des ersten Operanden nicht auf einer Doppelwortgrenze befindet.
    • ∗ Zugriffsausnahme (wenn das B1-Feld ungleich null ist).
    • ∗ Abbruch aufgrund einer Überschreitung der maximalen Transaktionsverschachtelungstiefe.
    • ∗ Bedingungscode 0 aufgrund einer normalen Ausführung.
  • Anmerkungen:
    • 1. Wenn das B1-Feld ungleich null ist, gilt Folgendes:
      • ∗ Ein zugänglicher Transaktionsdiagnoseblock (TDB) ist bereitzustellen, wenn eine äußerste Transaktion eingeleitet wird - selbst wenn die Transaktion niemals abgebrochen wird.
      • ∗ Da es nicht vorhersagbar ist, ob die Zugänglichkeit des TDB auf verschachtelte Transaktionen getestet ist, sollte ein zugänglicher TDB für alle verschachtelten Anweisungen TBEGIN bereitgestellt werden.
      • ∗ Die Ausführung einer TBEGIN, bei der das B1-Feld ungleich null ist, und die Ausführung einer Abbruchverarbeitung, die für eine Transaktion erfolgt, die durch eine äußerste TBEGIN eingeleitet wurde, bei der das B1-Feld ungleich null ist, können langsamer sein als bei einem B1-Feld von null.
    • 2. Register, die von der Speichermaske für allgemeine Register als zu speichern ausgewiesen sind, werden bei einer Ausführungsform nur zurückgesetzt, wenn die Transaktion abgebrochen wird, und nicht, wenn die Transaktion normal durch TRANSACTION END endet. Nur die von der GRSM der äußersten Anweisung TRANSACTION BEGIN ausgewiesenen Register werden bei einem Abbruch zurückgesetzt.
  • Das I2-Feld sollte alle Registerpaare ausweisen, die Eingabewerte bereitstellen, die durch die Transaktion geändert werden. Wenn die Transaktion abgebrochen wird, werden somit die Eingaberegisterwerte auf ihre ursprünglichen Inhalte zurückgesetzt, wenn zum Abbruch-Handler übergegangen wird.
    • 3. Es wird erwartet, dass auf die Anweisung TRANSACTION BEGIN (TBEGIN) eine Anweisung einer bedingten Verzweigung folgt, die ermittelt, ob die Transaktion erfolgreich eingeleitet wurde.
    • 4. Wenn eine Transaktion aufgrund von Bedingungen abgebrochen wird, die nicht zu einer Unterbrechung führen, erhält die durch das Transaktionsabbruch-PSW ausgewiesene Anweisung die Steuerung (d.h. die Anweisung, die auf die äußerste TRANSACTION BEGIN (TBEGIN) folgt). Neben dem Bedingungscode, der durch die Anweisung TRANSACTION BEGIN (TBEGIN) gesetzt wird, werden Bedingungscodes 1 bis 3 ebenfalls gesetzt, wenn eine Transaktion abgebrochen wird.
  • Aus diesem Grund sollte die auf die äußerste Anweisung TRANSACTION BEGIN (TBEGIN) folgende Anweisungsabfolge in der Lage sein, alle vier Bedingungscodes zu berücksichtigen, auch wenn die Anweisung TBEGIN bei diesem Beispiel nur Code 0 setzt.
    • 5. Bei den meisten Modellen kann eine verbesserte Leistung sowohl bei TRANSACTION BEGIN als auch bei Transaktionsabbruch dadurch erzielt werden, dass die Mindestanzahl von Registern spezifiziert wird, die in der Speichermaske für allgemeine Register gespeichert und zurückgesetzt werden müssen.
    • 6. Wenn im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindlich, kann ein Programm eine Servicefunktion aufrufen, die Zugriffregister oder Gleitkommaregister (darunter das Gleitkomma-Steuerregister) ändern kann. Auch wenn eine solche Serviceroutine die geänderten Register beim Eintritt speichern und beim Austritt zurücksetzen kann, kann die Transaktion vor normalem Austritt der Routine abgebrochen werden. Wenn das aufrufende Programm nicht vorsieht, dass diese Register beibehalten werden, während sich die CPU im Modus der nichteingeschränkten transaktionsorientierten Ausführung befindet, ist es eventuell nicht in der Lage, die Änderung der Register durch die Servicefunktion zu tolerieren.
  • Um ein unbeabsichtigtes Ändern von Zugriffsregistern im Modus der nichteingeschränkten Transaktionsausführung zu verhindern, kann das Programm die Steuerung zum Zulassen einer AR-Änderung, Bit 12 des I2-Feldes der Anweisung TRANSACTION BEGIN, auf null setzen. Um ein unbeabsichtigtes Ändern der Gleitkommaregister zu verhindern, kann das Programm gleichermaßen die Gleitkommaoperations-Steuerung, Bit 13 des I2-Feldes der Anweisung TBEGIN, auf null setzen.
    • 7. Programmausnahmebedingungen, die während des Ausführen der Anweisung TRANSACTION BEGIN (TBEGIN) erkannt werden, unterliegen der effektiven Programmunterbrechungsfilterungs-Steuerung, die durch äußere Anweisungen TBEGIN gesetzt wird. Programmausnahmebedingungen, die während des Ausführens der äußersten Anweisung TBEGIN erkannt werden, unterliegen keiner Filterung.
    • 8. Um mehrere Speicherorte auf seriell zu aktualisieren, können herkömmliche Codesequenzen ein Sperrwort (Semaphor) verwenden. Wenn (a) eine transaktionsorientierte Ausführung verwendet wird, um Aktualisierungen mehrerer Speicherorte zu implementieren, (b) das Programm darüber hinaus einen „Ausweich“-Pfad bereitstellt, der bei Abbruch einer Transaktion aufzurufen ist, und (c) der Ausweichpfad ein Sperrwort verwendet, sollte der Pfad für die transaktionsorientierte Ausführung auch die Verfügbarkeit der Sperre testen und die Transaktion mithilfe der Anweisung TRANSACTION END beenden und zum Ausweichpfad verzweigen, wenn die Sperre nicht verfügbar ist. Dies stellt einen einheitlichen Zugriff auf die serialisierten Ressourcen sicher, unabhängig davon, ob sie transaktionsorientiert aktualisiert werden.
  • Alternativ könnte ein Abbruch des Programms stattfinden, wenn die Sperre nicht verfügbar ist, die Abbruchverarbeitung kann jedoch erheblich langsamer sein als das einfache Beenden der Transaktion über TEND.
    • 9. Wenn die effektive Programmunterbrechungsfilterungs-Steuerung (PIFC) größer als null ist, filtert die CPU die meisten Programmunterbrechungen durch Datenausnahme. Wenn die effektive Steuerung zum Zulassen von einer Gleitkommaoperation (F) null ist, wird der Datenausnahmecode (DXE) infolge eines Abbruchs, der durch eine Datenausnahme-Programmausnahme-Bedingung verursacht wird, im Gleitkomma-Steuerregister nicht gesetzt. Bei diesem Szenario (Filterung kommt zur Anwendung, und die effektive F-Steuerung ist null) befindet sich nur der Speicherort im TBEGIN-spezifizierten TDB, bei dem der DXC geprüft wurde. Wenn der Abbruch-Handler des Programms in einer solchen Situation den DXC prüfen soll, sollte das allgemeine Register B1 ungleich null sein, so dass eine gültige Transaktionsdiagnoseblock-Adresse (TDBA) gesetzt wird.
    • 10. Wenn eine PER-Speicheränderungsbedingung oder Null-Adresse-Erkennungs-Bedingung für den TBEGIN-spezifizierten TDB der äußersten Anweisung TBEGIN vorhanden ist und die PER-Ereignisunterdrückung nicht zur Anwendung kommt, wird das PER-Ereignis während des Ausführens der Anweisung erkannt, wodurch ein sofortiger Abbruch der Transaktion bewirkt wird, unabhängig davon, ob eine andere Abbruchbedingung vorliegt.
  • Gemäß einem Aspekt setzt die Anweisung TBEGIN die Transaktionsabbruchadresse implizit dahingehend, dass sie die nächste sequenzielle Anweisung nach der TBEGIN ist. Diese Adresse ist als Anweisung für eine bedingte Verzweigung vorgesehen, die je nach Bedingungscode (CC) ermittelt, ob eine Verzweigung durchgeführt werden sollte. Eine erfolgreiche TBEGIN setzt CC0, eine abgebrochene Transaktion hingegen setzt CC1, CC2 oder CC3.
  • Bei einer Ausführungsform stellt die Anweisung TBEGIN einen optionalen Speicheroperanden bereit, der die Adresse eines Transaktionsdiagnoseblocks (TDB) ausweist, in den Informationen bei Abbruch der Transaktion gespeichert werden.
  • Darüber hinaus stellt sie einen Direktoperanden bereit, darunter Folgendes:
    • Eine Speichermaske für allgemeine Register (GRSM), die anzeigt, welche Paare allgemeiner Register zu Beginn der transaktionsorientierten Ausführung zu speichern und zurückzusetzen sind, wenn die Transaktion abgebrochen wird:
      • Ein Bit (A), um ein Abbrechen der Transaktion zu ermöglichen, wenn die Transaktion Zugriffsregister ändert;
      • Ein Bit (F), um ein Abbrechen der Transaktion zu ermöglichen, wenn die Transaktion versucht, Gleitkommaanweisungen auszuführen; und
      • Eine Programmunterbrechungsfilterungs-Steuerung (PIFC), die ermöglicht, dass einzelne Transaktionsebenen durch tatsächliches Darbieten einer Programmunterbrechung umgangen werden, wenn eine Transaktion abgebrochen wird.
  • Die A-, F- und PIFC-Steuerungen können bei verschiedenen Verschachtelungsebenen unterschiedlich sein und auf die vorherigen Ebenen zurückgesetzt werden, wenn innere Transaktionsebenen beendet werden.
  • Außerdem wird die TBEGIN (oder bei einer weiteren Ausführungsform TBEGINC) verwendet, um ein Transaktions-Token zu bilden. Gegebenenfalls kann das Token mit einem durch die Anweisung TEND gebildeten Token abgeglichen werden. Für jede Anweisung TBEGIN (oder TBEGINC) beispielsweise wird ein Token aus der Adresse des ersten Operanden gebildet. Dieses Token kann unabhängig davon gebildet werden, ob das Basisregister null ist (im Gegensatz zum Setzen der TDB-Adresse, was nur erfolgt, wenn das Basisregister ungleich null ist). Für jede Anweisung TRANSACTION END, die mit einem Basisregister ungleich null ausgeführt wird, wird ein ähnliches Token aus dessen Speicheroperanden gebildet. Wenn das Token nicht übereinstimmt, kann eine Programmausnahme erkannt werden, um das Programm über eine nicht gepaarte Anweisung zu informieren.
  • Der Token-Abgleich stellt einen Mechanismus bereit, mit dem die Software-Zuverlässigkeit verbessert werden soll, indem sichergestellt wird, dass eine TEND-Aussage korrekt mit einer TBEGIN (oder TBEGINC) gepaart wird. Wenn eine Anweisung TBEGIN auf einer bestimmten Verschachtelungsebene ausgeführt wird, wird ein Token aus der Speicheroperandenadresse gebildet, die diese Instanz einer Transaktion kennzeichnet. Wenn eine entsprechende Anweisung TEND ausgeführt wird, wird ein Token aus der Speicheroperandenadresse der Anweisung gebildet, und die CPU vergleicht das Start-Token hinsichtlich der Verschachtelungsebene mit dem End-Token. Wenn die Tokens nicht übereinstimmen, wird eine Ausnahmebedingung erkannt. Ein Modell kann einen Token-Abgleich bezüglich nur einer bestimmten Anzahl von Verschachtelungsebenen (oder keiner Verschachtelungsebenen) implementieren. Das Token kann alle Bits der Speicheroperandenadresse beinhalten, oder die Bits können mittels Hashing oder anderer Verfahren kombiniert werden. Ein Token kann durch die Anweisung TBEGIN gebildet werden, auch wenn nicht auf den Speicheroperanden zugegriffen wird.
  • Zusammenfassend ist die Verarbeitung einer nichteingeschränkten Transaktion wie folgt:
    • ∗ Wenn TND = 0:
      • ) Wenn B1 γ0, wird die Transaktionsdiagnoseblock-Adresse aus der Adresse des ersten Operanden gesetzt.
      • ) Das Transaktionsabbruch-PSW wird auf die nächste sequenzielle Anweisungsadresse gesetzt.
      • ) Vom I2-Feld ausgewiesene Paare allgemeiner Register werden an einem modellabhängigen Speicherort gespeichert.
        • - Für das Programm nicht direkt zugänglich
    • ∗ Effektive PIFC-, A- und F-Steuerungen berechnet
      • ) Effektive A = TBEGIN A und jedwede äußere A
      • ) Effektive F = TBEGIN F und jedwede äußere F
      • ) Effektive PIFC = max(TBEGIN PIFC, jedwede äußere PIFC)
    • ∗ Transaktionsverschachtelungstiefe (TND) wird erhöht
    • ∗ Wenn die TND von 0 auf 1 übergeht, tritt die CPU in den Modus der transaktionsorientierten Ausführung ein
    • ∗ Bedingungscode wird auf null gesetzt
      • ) Wenn die auf TBEGIN folgende Anweisung die Steuerung erhält:
        • - Erfolg von TBEGIN wird durch CC0 angezeigt
        • - Abgebrochene Transaktion wird durch CC ungleich null angezeigt
    • ∗ Ausnahmen:
      • ) Abbruchcode 13, wenn die Verschachtelungstiefe überschritten wird
      • ) Zugriffsausnahme (einer von verschiedenen PICs), wenn das B1-Feld ungleich null ist und auf den Speicheroperanden nicht für eine Speicheroperation zugegriffen werden kann
      • ) Ausführungsausnahme (PIC 0003), wenn die Anweisung TBEGIN das Ziel einer Anweisung vom Ausführungstyp ist
      • ) Operationsausnahme (PIC 0001), wenn die Einrichtung für transaktionsorientierte Ausführung nicht installiert ist
      • ) PIC 0006, wenn entweder
        • - PIFC ungültig ist (Wert von 3)
        • - Die Adresse des zweiten Operanden nicht bezüglich Doppelwort ausgerichtet ist
      • ) PIC 0013 hex, wenn die Steuerung für transaktionsorientierte Ausführung (CR0.8) null ist
      • ) PIC 0018 hex, wenn im Modus der eingeschränkten TX ausgegeben
  • Wie oben angezeigt, kann eine entweder eingeschränkte oder nichteingeschränkte Transaktion durch eine Anweisung TRANSACTION END(TEND) beendet werden. Weitere Details zur Verarbeitung einer Anweisung Transaction end (TEND) sind unter Bezugnahme auf 13 beschrieben. Die CPU (d.h. der Prozessor), die TEND ausführt, führt die Logik von 13 aus.
  • Unter Bezugnahme auf 13 wird zunächst auf der Grundlage dessen, dass der Prozessor die Anweisung TEND erhält (z.B. abruft, empfängt usw.), ein Prüfen auf verschiedene Ausnahmen durchgeführt, und wenn eine Ausnahme vorliegt, ABFRAGE 1300, wird die Ausnahme bearbeitet, SCHRITT 1302. Wenn beispielsweise die TRANSACTION END das Ziel einer Anweisung vom Ausführungstyp ist, wird die Operation unterdrückt und eine Ausführungsausnahme erkannt, und eine Ausnahme durch eine spezielle Operation wird erkannt und die Operation wird unterdrückt, wenn die Steuerung für transaktionsorientierte Ausführung, Bit 8 bis CR0, null ist. Außerdem wird eine Operationsausnahme erkannt und die Operation unterdrückt, wenn die Einrichtung für transaktionsorientierte Ausführung in der Konfiguration nicht installiert ist.
  • Unter erneuter Bezugnahme auf ABFRAGE 1300 wird die Transaktionsverschachtelungstiefe verringert (z.B. um eins), SCHRITT 1304, wenn keine Ausnahme erkannt wird. Es wird eine Ermittlung dahingehend durchgeführt, ob die Transaktionsverschachtelungstiefe nach dem Verringern null ist, ABFRAGE 1306. Wenn die Transaktionsverschachtelungstiefe null ist, werden alle von der Transaktion (und gegebenenfalls anderen Transaktionen innerhalb der Ebene von Transaktionen deren Teil diese Transaktion ist) durchgeführten Speicherzugriffe festgeschrieben, SCHRITT 1308. Darüber hinaus verlässt die CPU den Modus der transaktionsorientierten Ausführung, SCHRITT 1310, und die Anweisung wird ausgeführt, SCHRITT 1312.
  • Unter erneuter Bezugnahme auf ABFRAGE 1306 wird die Anweisung TRANSACTION END gerade ausgeführt, wenn die Transaktionsverschachtelungstiefe ungleich null ist.
  • Wenn sich die CPU zu Beginn der Operation im Transaktionsausführungsmodus befindet, wird der Bedingungscode auf 0 gesetzt; andernfalls wird der Bedingungscode auf 2 gesetzt.
  • Es wird angemerkt, dass die effektive Steuerung zum Zulassen einer Gleitkommaoperation (F), die effektive Steuerung zum Zulassen einer AR-Änderung (A) und die effektive Programmunterbrechungsfilterungs-Steuerung (PIFC) auf ihre jeweiligen Werte vor der Anweisung TRANSACTION BEGIN zurückgesetzt werden, die das Beenden der Ebene eingeleitet hat. Darüber hinaus wird eine Serialisierungsfunktion beim Ausführen der Operation durchgeführt.
  • Die PER-Anweisungsabruf- und Transaktionsende-Ereignisse, die beim Ausführen der äußersten Anweisung TRANSACTION END erkannt werden, führen nicht dazu, dass die Transaktion abgebrochen wird.
  • Bei einem Beispiel enthält die Anweisung TEND auch ein Basisfeld B2 und ein Verschiebungsfeld D2, die kombiniert (z.B. addiert) werden, um eine Adresse des zweiten Operanden zu bilden. Bei diesem Beispiel kann ein Token-Abgleich durchgeführt werden. Wenn beispielsweise B2 ungleich null ist, werden ausgewählte Bits der Adresse des zweiten Operanden mit einem Transaktions-Token abgeglichen, der durch die entsprechende TBEGIN gebildet wurde. Wenn eine Fehlpaarung vorliegt, gibt es eine Ausnahme (z.B. PIC 0006).
  • Zusätzlich zu den obigen Ausführungen kann eine Transaktion durch eine Anweisung TRANSACTION ABORT implizit oder explizit abgebrochen werden. Das Abbrechen einer Transaktion durch TABORT oder auf andere Weise beinhaltet das Durchführen einer Reihe von Schritten. Ein allgemeines Beispiel für die Schritte zum Abbrechen der Verarbeitung wird unter Bezugnahme auf 14 beschrieben. Wenn auf der Grundlage dessen, ob der Abbruch durch TABORT oder auf andere Weise eingeleitet wird, ein Verarbeitungsunterschied vorliegt, wird dies in der nachstehenden Beschreibung angezeigt. Bei einem Beispiel führt ein Prozessor (z.B. CPU) die Logik von 14 aus.
  • Unter Bezugnahme auf 14 werden zunächst auf der Grundlage des Ausführens der Anweisung TABORT oder eines impliziten Abbruchs nichttransaktionsbezogene Speicherzugriffe festgeschrieben, SCHRITT 1400, die durchgeführt wurden, während sich die CPU im Modus der transaktionsbezogenen Ausführung befand. Andere Speichervorgänge (z.B. transaktionsbezogene Speichervorgänge), die durchgeführt wurden, während sich die CPU im Modus der transaktionsorientierten Ausführung befand, werden verworfen, SCHRITT 1402.
  • Die CPU verlässt den Modus der transaktionsorientieren Ausführung, SCHRITT 1404, und nachfolgende Speichervorgänge erfolgen nichttransaktionsorientiert. Das aktuelle PSW wird durch die Inhalte des Transaktionsabbruch-PSW ersetzt, außer wenn der Bedingungscode wie oben beschrieben gesetzt wird (anders als bei der folgenden Situation, bei der CC = 1, wenn die TDBA gültig, aber der Block nicht zugänglich ist), SCHRITT 1406. Als Teil der Abbruchverarbeitung oder danach verzweigt die Verarbeitung zum durch das Transaktionsabbruch-PSW spezifizierten Speicherort, um eine Aktion durchzuführen. Bei einem Beispiel, bei dem die Transaktion eine eingeschränkte Transaktion ist, ist der Speicherort die Anweisung TBEGINC und die Aktion das erneute Ausführen dieser Anweisung; und bei einem weiteren Beispiel, bei dem die Transaktion eine nichteingeschränkte Transaktion ist, ist der Speicherort die Anweisung nach TBEGIN, und die Aktion ist das Ausführen dieser Anweisung, die beispielsweise eine Verzweigung zu einem Abbruch-Handler sein kann.
  • Danach wird eine Ermittlung dahingehend durchgeführt, ob die Transaktionsdiagnoseblock-Adresse gültig ist, ABFRAGE 1408. Wenn die Transaktionsdiagnoseblock-Adresse gültig ist, werden Diagnoseinformationen, die den Grund für den Abbruch kennzeichnen, und die Inhalte der allgemeinen Register in den durch TBEGIN spezifizierten Transaktionsdiagnoseblock gespeichert, SCHRITT 1410. Die gespeicherten TDB-Felder und die Bedingungen, unter denen sie gespeichert werden, sind oben unter Bezugnahme auf den Transaktionsdiagnoseblock beschrieben.
  • Wenn die Transaktionsdiagnoseblock-Adresse gültig ist, aber der Block nach Ausführen der äußersten Anweisung TBEGIN unzugänglich geworden ist, wird nicht auf den Block zugegriffen, und Bedingungscode 1 kommt zur Anwendung.
  • Bei Transaktionen, die aufgrund von Programmausnahmebedingungen abgebrochen werden, die zu einer Unterbrechung führen, wird der Programmunterbrechungs-TDB gespeichert.
  • Unter erneuter Bezugnahme auf ABFRAGE 1408 wird bei ungültiger Transaktionsdiagnoseblock-Adresse kein durch TBEGIN spezifizierter TDB gespeichert, und Bedingungscode 2 oder 3 kommt zur Anwendung, je nach Grund für den Abbruch.
  • Zusätzlich zu den obigen Ausführungen wird die Transaktionsverschachtelungstiefe gleich null gesetzt, SCHRITT 1412. Darüber hinaus werden sämtliche Paare allgemeiner Register, die von der äußersten Anweisung TBEGIN als zu speichern ausgewiesen sind, zurückgesetzt, SCHRITT 1414. Paare allgemeiner Register, die von der äußersten Anweisung TBEGIN nicht als zu speichern ausgewiesen wurden, werden bei einem Transaktionsabbruch nicht zurückgesetzt.
  • Darüber hinaus wird eine Serialisierungsfunktion durchgeführt, SCHRITT 1416. Eine Serialisierungsfunktion oder -operation beinhaltet das Ausführen aller konzeptionell davor liegenden Speicherzugriffe (und bei der z/Architecture beispielsweise entsprechende Referenzbit- und Änderungsbiteinstellungen) durch die CPU, wie von anderen CPUs und dem E/A-Teilsystem wahrgenommen, bevor die konzeptionell nachfolgenden Speicherzugriffe (und entsprechenden Referenzbit- und Änderungsbiteinstellungen) erfolgen. Die Serialisierung betrifft die Abfolge aller CPU-Zugriffe auf einen Speicher und auf die Speicherschlüssel, mit Ausnahme jener, die mit dem Abrufen von ART-Tabelleneinträgen und DAT-Tabelleneinträgen in Zusammenhang stehen.
  • Wie von einer CPU im Modus der transaktionsorientierten Ausführung wahrgenommen, arbeitet eine Serialisierung normal (wie oben beschrieben). Wie von anderen CPUs und durch das E/A-Teilsystem wahrgenommen, erfolgt eine Serialisierungsoperation, die durchgeführt wird, während sich eine CPU im Modus der transaktionsorientierten Ausführung befindet, wenn die CPU den Modus der transaktionsorientierten Ausführung verlässt, entweder infolge einer Anweisung TRANSACTION END, die die Transaktionsverschachtelungstiefe auf null senkt (normale Beendigung), oder infolge des Abbruchs der Transaktion.
  • Bei einer Abbruchverarbeitung, die nicht durch TABORT eingeleitet wird, werden Unterbrechungscodes oder mit der Unterbrechung in Zusammenhang stehende Parameter entsprechend dem Unterbrechungstyp an den zugewiesenen Speicherorten gespeichert, SCHRITT 1420, wenn die Transaktion aufgrund einer Ausnahmebedingung abgebrochen wird, die zu einer Unterbrechung führt, ABFRAGE 1418. Darüber hinaus wird das aktuelle PSW, wie oben gesetzt, in das alte Unterbrechungs-PSW gespeichert, SCHRITT 1422. Danach oder wenn die Transaktion nicht aufgrund einer Ausnahmebedingung abgebrochen wurde, die zu einer Unterbrechung führte, endet die Anweisung mit Bedingungscode null.
  • Zusätzlich zu den obigen Ausführungen erfolgt bei einer Ausführung für ein interpretatives Ausführen der z/Architecture kein Abfangen, wenn sich die CPU im Modus der transaktionsorientierten Ausführung befindet und eine Gastbedingung erfolgt, die normalerweise zu Abfangcodes 4, 12, 44, 56, 64, 68 oder 72 führen würde. Stattdessen bleibt die CPU im Modus der interpretativen Ausführung, und die Abbruchbedingungen werden dem Gast wie folgt angezeigt.
    • ∗ Bei einer nichteingeschränkten Transaktion wird die Transaktion aufgrund einer eingeschränkten Anweisung abgebrochen (Abbruchcode 11). Wenn ein gleichzeitiges PER-Ereignis erkannt wurde und die CPU für PER aktiviert ist, erfolgt eine Programmunterbrechung mit Unterbrechungscode 0280 hex.
    • ∗ Bei einer eingeschränkten Transaktion wird eine Transaktionseinschränkungsausnahme erkannt. Wenn ein gleichzeitiges PER-Ereignis erkannt wurde und die CPU für PER aktiviert ist, erfolgt eine Programmunterbrechung mit Unterbrechungscode 0298 hex.
  • Wenn eine Transaktion aufgrund einer Programmausnahmebedingung abgebrochen wird, kann eine Programmunterbrechungsfilterung das Darbieten einer Unterbrechung verhindern. Bei Programmunterbrechungen, die zu einem Abfangen führen, verhindert das Filtern ebenfalls das Abfangen.
  • Bei einer Ausführungsform kann die Transaktion nach einem Transaktionsabbruch erneut ausgeführt werden, um zu versuchen, die Transaktion erfolgreich auszuführen. Um ein erfolgreiches Ausführen zu fördern, können eine oder mehrere ausgewählte Aktionen durchgeführt werden, um die Verarbeitung innerhalb der Datenverarbeitungsumgebung einzuschränken, bevor die Transaktion erneut ausgeführt wird, um das erfolgreiche Ausführen der Transaktion zu erleichtern. Die ausgewählten Aktionen beruhen beispielsweise auf der Grundlage der Häufigkeit, mit der die Transaktion abgebrochen wird. Darüber hinaus können weitere Aktionen unternommen werden, um die Verarbeitung weiter einzuschränken, wenn die Häufigkeit der Abbrüche der Aktion steigt. Ferner können schwerwiegende oder einschränkende Aktionen unternommen werden, wenn die Häufigkeit von Abbrüchen einer Transaktion steigt.
  • Für gewöhnlich bieten Architekturen mit transaktionsorientiertem Speicher keine Gewährleistung, dass eine Transaktion ausgeführt wird. Aus diesem Grund liegt es an der Software, einen Ausweichpfad für wiederholte Abbrüche einer Transaktion verfügbar zu halten. Bei einigen Transaktionen, bei einer Ausführungsform beispielsweise eingeschränkte Transaktionen, gewährleistet jedoch die Hardware (z.B. Hardware auf Silizium-Basis und/oder Firmware), dass die Transaktion schließlich erfolgreich ist, d.h., dass sie nur eine begrenzte Anzahl an Malen abgebrochen wird.
  • Eine Ausführungsform eines Überblicks über die Logik, mit der ein erfolgreiches Ausführen einer Transaktion zu erleichtern ist, wird unter Bezugnahme auf 15 beschrieben. Bei einem Beispiel führt ein Prozessor, z.B. der den Abbruch erkennende Prozessor, diese Logik aus. Bei dieser Ausführungsform ist die Transaktion eine eingeschränkte Transaktion; bei anderen Ausführungsformen jedoch kann sie ein anderer Transaktionstyp sein, darunter nichteingeschränkte Transaktionen.
  • Unter Bezugnahme auf 15 führt zunächst der Prozessor eine eingeschränkte Transaktion aus, die von der Anweisung TBEGINC gestartet wurde, SCHRITT 1500. Wenn eine Abbruchbedingung erkannt wird, ABFRAGE 1502, die nicht zu einer Unterbrechung führt, unternimmt der Prozessor gegebenenfalls (z.B. in Abhängigkeit der Anzahl von Abbrüchen und/oder des Abbruchgrundes) eine oder mehrere Aktionen, wie hier beschrieben, um ein Ausführen sicherzustellen, SCHRITT 1504. Darüber hinaus führt der Prozessor die Anweisung TBEGINC erneut aus, SCHRITT 1506, und die Verarbeitung fährt mit SCHRITT 1500 fort.
  • Unter erneuter Bezugnahme auf ABFRAGE 1502 fährt die Verarbeitung fort, wenn keine Abbruchbedingung oder eine Abbruchbedingung vorliegt, die zu einer Unterbrechung führt, bis ein Abschluss der Transaktion (z.B. TEND) oder eine Unterbrechung erfolgt, ABFRAGE 1508. Bei einer Unterbrechung lädt die CPU das dem Unterbrechungstyp zugehörige PSW. Die Transaktion endet auf der Grundlage des Ausführens oder der Unterbrechung; andernfalls fährt sie mit der Verarbeitung fort.
  • Weitere Details zum Auswählen und Durchführen von Aktionen, um das Ausführen von Transaktionen zu erleichtern, werden hier beschrieben. Bei einer Ausführungsform werden ein oder mehrere Techniken bereitgestellt, um das Ausführen von Transaktionen zu erleichtern, beispielsweise: (a) Verwalten eines Abbruchzählers und Darbieten einer Programmunterbrechung auf der Grundlage dessen, dass ein Schwellenwert für Abbrüche erreicht wird; (b) Ausweiten, um Kollisionen einer Transaktion mit Anweisungen zu verhindern, die nichtsequenziell am gleichen Prozessor ausgeführt werden; und/oder (c) eine Sperre von zu Konflikten führenden Prozessoren. Jede dieser Techniken kann separat oder in einer Kombination verwendet werden, und jede wird nachstehend ausführlicher beschrieben.
  • Bei einer Ausführungsform wird ein Zähler der Anzahl von Abbrüchen für eine Transaktion verwendet, um das erfolgreiche Ausführen einer Transaktion weiter zu erleichtern. Dieser Zähler wird beispielsweise von einem Abbruch-Handler gepflegt, der beispielsweise in Firmware oder in Hardware und/oder Software implementiert ist. Wenn eine Transaktion abgebrochen wird, wird der dieser Transaktion zugehörige Zähler erhöht. Wenn ein Schwellenwert für Abbrüche erreicht wird, wird eine Unterbrechung dargeboten. Bevor es dazu kommt, können jedoch andere Aktionen unternommen werden, um die Chancen für ein erfolgreiches Ausführen der Transaktion zu erhöhen. Die unternommene Aktion schränkt die Verarbeitung innerhalb der Datenverarbeitungsumgebung nach und nach ein (z.B. innerhalb des gleichen Prozessors, auf dem die Transaktion ausgeführt wird, oder innerhalb anderer Prozessoren). Bei einem Beispiel schränken eine oder mehrere der Aktionen die Handlungsmöglichkeiten eines Prozessors (z.B. wie der Prozessor verarbeiten kann) während des Verarbeitens der Transaktion ein. Mit steigender Anzahl von Abbrüchen kann sich auch der Schweregrad oder die Aggressivität der ausgewählten Aktion erhöhen.
  • Eine Ausführungsform zu weiteren Details über den Abbruchzähler und das Darbieten einer Programmunterbrechung bei Erreichen eines Schwellenwerts (d.h. eines vorab festgelegten Werts) sind unter Bezugnahme auf 16A beschrieben. Die Logik von 16A wird von einem Prozessor durchgeführt, z.B. vom Prozessor, der die Transaktion einleitet.
  • Unter Bezugnahme auf 16A wird zunächst ein Abbruchzähler (hier auch als Zähler bezeichnet) für die bestimmte Transaktion auf null gesetzt, SCHRITT 1600, und eine Transaktion wird eingeleitet, SCHRITT 1602. Bei einem Beispiel ist die Transaktion eine eingeschränkte Transaktion und aus diesem Grund wird die Transaktion durch eine Anweisung TBEGINC eingeleitet.
  • Es wird eine Ermittlung dahingehend durchgeführt, ob die Transaktion erfolgreich beendet wurde, ABFRAGE 1604. Wenn sie erfolgreich beendet wurde (z.B. durch TEND), wird der Zähler zurückgesetzt (z.B. auf 0 gesetzt), SCHRITT 1606, und die Verarbeitung ist abgeschlossen. Wenn die Transaktion jedoch abgebrochen wurde, wird eine Abfrage dahingehend durchgeführt, ob der Abbruch bedingt durch eine Unterbrechung erfolgt ist, die das Programm an einen unterschiedlichen Programmspeicherort überführt (z.B. eine Programmunterbrechung, E/A-Unterbrechung), ABFRAGE 1608. Ist dies der Fall, wird die Anweisungsadresse auf den neuen Speicherort gesetzt (d.h. ein anderer als der TBEGINC-Speicherort), SCHRITT 1610, wird der Zähler zurückgesetzt, SCHRITT 1606, und die Verarbeitung ist abgeschlossen.
  • Wenn andererseits der Abbruch nicht durch eine Unterbrechung bedingt ist, ABFRAGE 1608, sondern durch eine Abbruchbedingung, die sofort zur Anweisung TBEGINC zurückkehrt, um die Transaktion erneut auszuführen, wird eine weitere Ermittlung dahingehend durchgeführt, ob sich der Abbruchzähler auf einem Schwellenwert (hier auch als maximaler oder vorab festgelegter Wert bezeichnet) befindet, ABFRAGE 1612. Wenn sich der Abbruchzähler am Schwellenwert befindet, wird eine Unterbrechung dargeboten, SCHRITT 1614, der Zähler zurückgesetzt, SCHRITT 1606, und die Verarbeitung ist abgeschlossen.
  • Wenn sich der Abbruchzähler jedoch nicht am Schwellenwert befindet, wird der Zähler erhöht (z.B. Zähler = Zähler + 1), SCHRITT 1616, und eine Ermittlung wird dahingehend durchgeführt, ob eine Aktion unternommen werden muss, um die Chancen für ein erfolgreiches Ausführen zu erhöhen, ABFRAGE 1618. Das heißt, vor Wiederholen der Transaktion können je nach Abbruchzählwert bestimmte Aktionen unternommen werden, darunter das Setzen bestimmter Modi im Prozessor, um die Chancen für eine erfolgreiche Transaktionsausführung bei der Wiederholung zu verbessern. Dies wird im Folgenden ausführlicher beschrieben.
  • Wenn eine Aktion zu unternehmen ist, wird die Aktion durchgeführt, SCHRITT 1620. Danach oder wenn keine Aktion durchzuführen ist, wird die Programmanweisungsadresse auf die Anweisung TRANSACTION BEGIN, SCHRITT 1622, gesetzt. Danach wird die Transaktion wiederholt, SCHRITT 1624.
  • Unter Bezugnahme auf 16B werden weitere Details zur Logik beschrieben, die dem Ermitteln zugehörig ist, ob eine Aktion unternommen werden sollte, um die Chancen für ein erfolgreiches Ausführen der erneut ausgeführten Transaktion zu erhöhen. Diese Logik wird von einem Prozessor durchgeführt, z.B. der Prozessor, der die Logik von 16A durchführt.
  • Zunächst wird über den Abbruchzähler eine Prüfung bezüglich der Anzahl der Male durchgeführt, die die Transaktion abgebrochen wurde, SCHRITT 1640. Eine Ermittlung wird dahingehend durchgeführt, ob aufgrund des Abbruchzählwerts eine Maßnahme zu ergreifen ist, um das Ausführen der Transaktion zu erleichtern, ABFRAGE 1641. Wenn beispielsweise der Abbruchzählwert kleiner als vier ist, wird z.B. keine Aktion unternommen und die Transaktion wieder einfach wiederholt und der Zähler erhöht. Wenn bei diesem Beispiel der Zählwert jedoch vier oder höher ist, ist aufgrund des Abbruchzählwerts eine Maßnahme zu ergreifen. Somit fährt die Verarbeitung mit dem Ermitteln fort, ob aufgrund des Abbruchzählwertes eine Maßnahme innerhalb des Prozessors zu ergreifen ist, um die Chancen für ein erfolgreiches Ausführen der abgebrochenen Aktion zu erhöhen, ABFRAGE 1642. Bei einer Ausführungsform beispielsweise wird dem Prozessor beim Ausführen einer Transaktion erlaubt, eine normale Spekulation oder eine spekulative Verarbeitung durchzuführen (z.B. eine nichtsequenzielle Ausführung, Sprungvorhersage, Vorablesen usw.) Die spekulative Ausführung kann zu Transaktionsabbrüchen führen, z.B. weil ein spekulativer Zugriff einen Konflikt mit der Transaktion bewirken kann. Solche Konflikte können beispielsweise auftreten wegen: a) Zugreifen auf zu viele unterschiedliche Cachezeilen auf spekulativen Pfaden des Programms; b) spekulatives Abrufen von Anweisungen aus Cachezeilen, die Teil des Footprint für transaktionsorientiertes Speichern sind; und/oder c) Zugreifen auf Adressen, die Synonyme virtueller Adressen zum tatsächlichen Transaktions-Footprint sind.
  • Um ein wiederholten „Fahren“ über den gleichen spekulativen Pfad zu verhindern, wird eine Vielzahl von Aktionen (auch als Prozessormodi oder Modi bezeichnet) bei steigendem Abbruchzählwert erfolgreich angewandt. Die Aktionen werden erfolgreich angewandt, da jede Aktion eine Verlangsamung der Verarbeitung bewirkt, so dass ein frühzeitiges Aktivieren zu einer Verringerung der Leistung führt. Die bei anderen beispielhaften Abbruchzählwerten angewandten Modi werden nachstehend gezeigt. Es wird angemerkt, dass eine Überlappung bezüglich der Zählwerte vorliegt; somit können eine oder mehrere der Aktionen durchgeführt werden. Bei einer Ausführungsform werden alle Aktionen für einen bestimmten Zählwert durchgeführt, beispielsweise gleichzeitig. Bei einer weiteren Ausführungsform wird im Fall einer Überlappung eine Aktion einer anderen vorgezogen, beispielsweise durch Auswählen aus einer Liste entsprechend einer Reihenfolge, zufälliges Auswählen auf der Grundlage einer Auswahlfunktion oder andere Techniken.
  • Bei einer Ausführungsform ersetzen die ausgewählten Aktionen die vorherigen Aktionen, wenn zu einer nächsten Ebene von Abbruchzählwerten übergegangen wird. Beispielsweise wird etwas zuvor Deaktiviertes aktiviert, und die neuen Aktionen werden durchgeführt. Bei einer weiteren Ausführungsform jedoch werden die neuen Aktionen zusätzlich zu den vorherigen Aktionen durchgeführt. Wie hier verwendet, ersetzt somit eine andere Aktion eine vorherige Aktion und erfolgt zusätzlich zu einer vorherigen Aktion oder eine Kombination davon. Darüber hinaus kann sie gegenüber einer vorherigen Aktion gleich oder unterschiedlich sein.
  • Beispiele für Aktionen, die bei bestimmten Zählwerten durchgeführt werden können, sind im Folgenden angeführt:
    ZÄHLWERTE AKTION
    8 bis 20 Deaktivieren der Verzweigungsvorhersage (z.B. über einen Switch).
    8 bis 20 Deaktivieren des spekulativen Abrufens von Anweisungen, das über die Cachezeilengrenze der aktuellen Anweisung hinausgeht. Dies wird erzielt, indem beim Abrufen von Anweisungen nur das Kreuzen einer Cachezeilengrenze zugelassen wird, wenn das Back-End der Pipeline leer ist.
    8 bis 20 Deaktivieren der superskalaren Zuteilung (z.B. über einen Switch).
    8 bis 20 Deaktivieren der nichtsequenziellen Ausführung (z.B. über einen Switch).
    8 bis 20 Ausschließliches Abrufen aller Cachespeicherfehltreffer, selbst bei Nur-Abruf-Anforderungen.
    21 bis 23 Ausführen nur jeweils einer einzelnen Anweisung in der gesamten Pipeline (langsamer Modus).
    24 bis 28 Deaktivieren der superskalaren Zuteilung (z.B. über einen Switch).
    32 bis 63 Ausführen nur jeweils einer einzelnen Anweisung in der gesamten Pipeline und ausschließliches Abrufen aller Cachespeicherfehltreffer.
  • Jede Ausweitung wird unter den gleichen Bedingungen, die auch den Zähler auf 0 zurücksetzen, automatisch in den „normalen Modus“ (Modus mit voller Geschwindigkeit) zurückgesetzt.
  • Wenn aufgrund des Abbruchzählwerts eine Aktion innerhalb des Prozessors auszuführen ist, wird die Aktion auf der Grundlage des Abbruchzählwerts und anderer gewünschter Auswahlkriterien ausgewählt, SCHRITT 1644. Diese ausgewählte Aktion wird sodann durchgeführt. Bei einer weiteren Ausführungsform können eine oder mehrere Aktionen ausgewählt und durchgeführt werden. Bei einer Ausführungsform wird die Aktion durchgeführt, indem Firmware ein Hardware-Bit setzt, das den bestimmten Verarbeitungsmodus ermöglicht (z.B. Deaktivieren der Verzweigungsvorhersage usw.). Die Hardware setzt dieses Bit unter den gleichen Bedingungen, die den Zähler zurücksetzen, automatisch zurück.
  • Unter erneuter Bezugnahme auf ABFRAGE 1642 wird die Aktion jedoch gegen anderen in Konflikt stehenden Prozessoren durchgeführt, wenn aufgrund des Abbruchzählwerts eine Aktion innerhalb des Prozessors nicht ausgeführt werden sollte, SCHRITT 1646. Das heißt, dass Transaktionen in einer Multiprozessorumgebung aufgrund von Konflikten mit Zugriffen abgebrochen werden können, die von anderen Prozessoren durchgeführt werden. Diese anderen Zugriffe können transaktionsorientiert oder nichttransaktionsorientiert sein. Bei einem Beispiel wird eine Zufallsverzögerung (d.h., das erneute Ausführen der Transaktion wird um eine bestimmte Zeit oder eine bestimmte Anzahl von Maschinenzyklen usw. verzögert) eingefügt, bevor die Transaktion erneut versucht wird; mit dieser Technik und dem sukzessiven Erhöhen des Bereichs der Zufallsverzögerung ist es wahrscheinlich, dass eine Transaktion letztendlich ausgeführt wird, wenn sie nur mit anderen Transaktionen in Konflikt steht. Diese Technik ist bei Konflikten mit anderen nichtabbrechenden oder nichttransaktionsorientierten Zugriffen allerdings nicht nützlich. Gemäß einer weiteren Ausführungsform wird die Zufallsverzögerung somit auf heuristischen Verfahren auf der Grundlage bestimmter Abbruchzählwerte (z.B. Zählwerte 4 bis 15) bereitgestellt, wodurch aufwändigere Techniken weniger häufig herangezogen werden müssen.
  • Gemäß einer Ausführungsform, wenn der Abbruchzählwert derart ist, dass andere Ausweitungen innerhalb des gleichen Prozessors wie oben beschrieben oder die Zufallsverzögerung nicht erfolgreich war bzw. waren, wird bei einer Ausführung ein Semaphor (z.B. eine Sperre) auf die Sperre mit anderen Prozessoren angewandt. Ein Beispiel für diese Verarbeitung wird unter Bezugnahme auf 16C beschrieben. Die Logik von 16C wird von einem Prozessor durchgeführt, z.B. von dem Prozessor, der die Logik von 16A bis 16B durchführt.
  • Unter Bezugnahme auf 16C wird bei einer Ausführungsform eine Firmware-Routine auf der Grundlage dessen aufgerufen, SCHRITT 1660, dass ein bestimmter Abbruchzählwert (z.B. 24 bis 63) oder eine Abbruchebene erreicht wurde, um ein Semaphor zu erhalten, SCHRITT 1662. Das Semaphor wird an einem bestimmten Systemspeicherort gepflegt, und die Firmware verwendet beispielsweise einen Compare-and-Swap-Mechanismus, um die Semaphore zu erhalten. Wenn das Semaphor besetzt ist (d.h., ein weiterer Prozessor besitzt dieses bereits, da der Prozessor aufgrund wiederholter Transaktionsabbrüche auch in diesen Modus eskaliert ist), wartet der Prozessor, ohne dass er mit Ausnahme des Semaphors auf einen Speicherort zugreift.
  • Nachdem das Semaphor erhalten wurde, wird eine Unterbrechung an alle anderen Prozessoren rundgesendet, SCHRITT 1664. Die anderen Prozessoren empfangen die Unterbrechung, und beim Empfangen der Unterbrechung prüfen sie das Semaphor und warten, bis das Semaphor wieder freigegeben wird. Sie greifen während des Wartens nur auf das Semaphor und nicht auf einen anderen Speicherort zu. Nachdem das Semaphor freigegeben oder freigesetzt wurde (z.B. auf null gesetzt), fahren die Prozessoren dort fort, wo sie unterbrochen wurden. Wenn die Unterbrechung innerhalb einer Transaktion aufgetreten ist, wird die Transaktion abgebrochen und von vorne begonnen.
  • Der den rundsendende Prozessor verlässt die Firmware-Routine und wiederholt die Transaktion, SCHRITT 1666. Es können mehrere Wiederholungen erforderlich sein, da die anderen Prozessoren eventuell nicht sofort stoppen. Alle anderen Prozessoren werden jedoch letztendlich auf das Semaphor warten; somit treten keine weiteren Konflikte mit den Prozessoren auf, und die Transaktion wird schließlich ausgeführt.
  • Wenn der sendende Prozessor die Transaktion beendet (z.B. eine erfolgreiche TEND-Ausführung) oder eine Unterbrechung stattfinden lässt, die dazu führt, dass die Transaktion nicht mehr länger wiederholt wird (z.B. Programmunterbrechung), ABFRAGE 1668, setzt die Firmware-Routine das Semaphor zurück, indem sie eine Null darin speichert, wodurch die anderen Prozessoren effektiv mit ihrer Arbeit fortfahren können, SCHRITT 1670.
  • Bei einer weiteren Ausführungsform können mehrere Semaphor-Speicherorte verwendet werden. Beispielsweise werden bei einer Ausführungsform nicht alle Prozessoren mit den Rundsende-Unterbrechungen adressiert, sondern nur jene, bei denen die Wahrscheinlichkeit für einen Konflikt besteht. Eine Ausführungsform unterbricht alle Prozessoren, die zum gleichen virtualisierten System (z.B. gleiche Partition oder LPAR) in einer Hypervisor-Umgebung gehören. Nachdem alle wahrscheinlichen Prozessoren unterbrochen wurden, die Transaktion immer noch nicht ausgeführt und einen zweiten Schwellenzählwert erreicht wurde, kann der Prozessor ein Master-Semaphor erwerben und alle Prozessoren unterbrechen. Es sind auch andere Variationen möglich.
  • Oben sind Ausführungsformen beschrieben, mit denen das erfolgreiche Ausführen von Transaktionen nach wiederholten Abbrüchen erleichtert wird. Bei einer Ausführungsform pflegt die Hardware einen Zähler, der einen Zählwert dessen bereitstellt, wie oft eine Transaktion abgebrochen wurde. Der Zähler erhöht den Zählwert bei jedem Abbruch der Transaktion und wird auf bei erfolgreichem Ausführen der Transaktion oder einer Unterbrechung, die zu keiner weiteren erneuten Ausführung der Transaktion führt, auf null gesetzt. Wenn der Zählwert einen Schwellenwert erreicht (z.B. Zählwert 63), wird eine Unterbrechung dargeboten, die Transaktionsausführung ist nicht erfolgreich, und der Zähler wird zurückgesetzt. Bevor der Zählwert den Schwellenwert erreicht, können jedoch eine Vielzahl von Aktionen durchgeführt Zu diesen Aktionen gehören Aktionen, die innerhalb des die Transaktion ausführenden Prozessors durchzuführen sind, und/oder Aktionen, die gegen in Konflikt stehende Prozessoren (CPUs) durchzuführen sind.
  • Innerhalb des gleichen Prozessors können eine oder mehrere der folgenden Aktionen je nach Abbruchzählwert und Auswahlkriterien für Aktionen mit gleichen oder überlappenden Abbruchzählwerten durchgeführt werden: erneutes Ausführen der Transaktion (Zählwerte 1 bis 3); Deaktivieren der Verzweigungsvorhersage (Zählwerte 8 bis 20); Deaktivieren des spekulativen Abrufens von Anweisungen, das über die Cachespeicherzeilengrenze der aktuellen Anweisung hinausgeht (Zählwerte 8 bis 20); Deaktivieren der superskalaren Zuteilung (Zählwerte 8 bis 20); Deaktivieren der nichtsequenziellen Ausführung (Zählwerte 8 bis 20); ausschließliches Abrufen aller Cachespeicherfehltreffer, sogar bei Nur-Abruf-Anforderungen (Zählwert 8 bis 20); Ausführen von nur jeweils einer Anweisung in der gesamten Pipeline (Zählwerte 21 bis 23); Deaktivieren der superskalaren Zuteilung (Zählwerte 24 bis 28); und Ausführen von nur jeweils einer Anweisung in der gesamten Pipeline, und ausschließliches Abrufen aller Cachespeicherfehltreffer (Zählwerte 32 bis 63). Bei Anwenden einiger dieser Aktionen wird die Spekulationsaggressivität einer Prozessorpipeline bei wiederholten Transaktionsabbrüchen nach und nach eingeschränkt. Die vollständige Spekulationsaggressivität einer Prozessorpipeline wird auf der Grundlage eines erfolgreichen Ausführens der Transaktion oder einer Unterbrechung, die nicht mehr zu einer Transaktionswiederholung führt, zurückgesetzt.
  • Sollte die Transaktion nach Durchführen einer oder mehrerer der obigen Aktionen weiterhin abgebrochen werden und der Zählwert einen ausgewählten Wert oder eine ausgewählte Ebene erreichen, können Aktionen gegen in Konflikt stehende Prozessoren durchgeführt werden. Beispielsweise bei Abbrüchen 4 bis 15 können Zufallsverzögerungen durchgeführt werden; und bei Abbrüchen 16 bis 23 kann ein Semaphor für die anderen Prozessoren der Partition (z.B. LPAR-Zone) erworben werden, auf der dieser Prozessor ausgeführt wird, um Operationen auf den anderen Prozessoren zu beenden. Gleichermaßen kann bei Zählwerten 24 bis 63 ein Semaphor für das gesamte System erworben werden, wobei alle Prozessoren in dem System ihre Operationen beenden, bis das Semaphor freigegeben ist. Bei diesem Verarbeitungsmodus wird eine Firmware-Routine auf der Grundlage dessen aufgerufen, dass die ausgewählte Ebene erreicht wurde, bei der ein Semaphor zu erhalten ist, um das Semaphor unter Verwendung beispielsweise eines Compare-and-Swap-Mechanismus zu erhalten. Wenn das Semaphor erhalten wird, wird eine Unterbrechung an die entsprechenden Prozessoren übertragen (z.B. die Prozessoren innerhalb der gleichen Partition oder alle Prozessoren des Systems oder ein anderer Teilsatz). Danach verlässt der Prozessor die Firmware-Routine und führt die Transaktion einmal oder mehrmals bis zum erfolgreichen Ausführen oder einer Unterbrechung erneut aus. Das Semaphor wird zurückgesetzt, wenn die Transaktion erfolgreich ausgeführt wurde oder nicht länger versucht wird, diese zu wiederholen.
  • Durch Durchführen einer oder mehrerer der obigen Aktionen wird das erfolgreiche Ausführen einer Transaktion zumindest verbessert. Diese Aktionen können für unterschiedliche Transaktionstypen durchgeführt werden, beispielsweise nichteingeschränkte und eingeschränkte Transaktionen. Bei einer Ausführungsform gewährleistet das Verwenden der obigen Techniken für eingeschränkte Transaktionen ein erfolgreiches Ausführen der Transaktion, unter der Annahme, dass ein solches Ausführen möglich ist (es liegt z.B. keine Verletzung einer Einschränkungsbeschränkung oder eine andere Verletzung vor).
  • Auch wenn bei der obigen Ausführungsform Aktionen auf der Grundlage eines Abbruchzählwerte ausgewählt werden, werden Aktionen bei einer weiteren Ausführungsform beruhend auf Gründen für den Abbruch und/oder des Zählwerts ausgewählt. Somit werden Aktionen beruhend auf einer Abbruchbedingung, bei der die Bedingung der Zählwert ist, dem Abbruchgrund oder einer Kombination aus dem Zählwert und dem Abbruchgrund durchgeführt. Beispielsweise könnte ein Prozessor erkennen, dass der Abbruch bedingt durch eine CPU erfolgt ist, und danach das Semaphor erwerben. Dies kann auch mit einem Zählwert kombiniert werden, z.B. „Wenn Abbruch > 16 und Abbruch durch einen Konflikt mit einer weiteren CPU bedingt ist → Semaphor erwerben“. Es gibt viele Variationen und Möglichkeiten.
  • Bei einem Beispiel wird der Zähler, der zum Verfolgen der Anzahl von Abbrüchen verwendet wird, auf der Grundlage dessen automatisch zurückgesetzt, dass der Zähler einen Schwellenwert für Abbrüche für die Transaktion erreicht hat, die bewirkt, das eine Unterbrechung dargeboten wird, oder eine Unterbrechung wird für die Transaktion dargeboten, wobei die Transaktion nicht erneut ausgeführt wird.
  • Zusätzlich zu dem Erleichtern des Ausführens von Transaktionen wird oben ein effizientes Mittel zum Aktualisieren von mehreren nicht zusammenhängenden Objekten im Speicher ohne eine klassische (grobkörnige) Serialisierung wie eine Sperrung bereitgestellt, die Potenzial für eine erhebliche Verbesserung der Multiprozessorleistung bietet. Das heißt, dass mehrere nicht zusammenhängende Objekte aktualisiert werden, ohne dass weitere grobkörnige Speicherzugriffsaufträge umgesetzt werden, wie es bei klassischen Techniken der Fall ist, beispielsweise Sperren und Semaphore. Spekulative Ausführung wird ohne aufwändiges Wiederherstellungs-Setup bereitgestellt, und eingeschränkte Transaktionen werden für einfache Aktualisierungen mit kleinem Footprint geboten.
  • Die transaktionsorientierte Ausführung kann in einer Vielzahl von Szenarien herangezogen werden, z.B. partielles Inlining, spekulative Verarbeitung und Sperrauslassung (lock elision). Beim partiellen Inlining wird die in den ausgeführten Pfad aufzunehmende Teilregion in TBEGIN/TEND verpackt. TABORT kann darin aufgenommen werden, um an einem Status auf einem Nebenpfad eine Rückabwicklung durchzuführen. Bei einer Spekulation, beispielsweise in Java, können Null-Prüfungen auf dereferenzierten Zeigern unter Verwendung einer Transaktion an den Schleifenrand verzögert werden. Wenn der Zeiger null ist, kann die Transaktion unter Verwendung der in TBEGIN/TEND enthaltenen TABORT sicher abgebrochen werden.
  • Ein Beispiel für die Anwendung einer Sperrauslassung (lock elision) wird in Bezug auf die 17A BIS 17B und dem nachstehenden Codefragment beschrieben.
  • 17A zeigt eine doppelt verknüpfte Liste 1700 aus einer Vielzahl von Warteschlangenelementen 1702a bis 1702d. Ein neues Warteschlangenelement 1702 ist in die doppelt verknüpfte Liste von Warteschlangenelementen 1700 einzusetzen. Jedes Warteschlangenelement 1702a bis 1702e enthält einen Vorwärtszeiger 1704a bis 1704d und einen Rückwärtszeiger 1706a bis 1706e. Wie in 17B gezeigt, wird zum Hinzufügen eines Warteschlangenelements 1702 zwischen Warteschlangenelementen 1702b und 1702c (1) der Rückwärtszeiger 1706e so gesetzt, dass er auf Warteschlangenelement 1702b zeigt, (2) der Vorwärtszeiger 1704e so gesetzt, dass er auf Warteschlangenelement 1702c zeigt, (3) der Rückwärtszeiger 1706c so gesetzt, dass er auf Warteschlangenelement 1702e zeigt; und (4) der Vorwärtszeiger 1704b so gesetzt, dass er auf Warteschlangenelement 1702e zeigt.
  • Ein beispielhaftes Codefragment, das den 17A bis 17B entspricht, wird im Folgenden gezeigt:
    • * R1 - Adresse des neuen einzufügenden Warteschlangenelements
    • * R2 - Adresse der Einfügungsstelle; neues Element wird vor das Element eingefügt, auf das von R2 gezeigt wird.
    NEW USING QEL, R1
    CURR USING QEL, R2
    LHI R15, 10 Wiederholungszählwert laden.
    LOOP TBEGIN TDB, X'C000' Transaktion beginnen (AR 0 bis 3 speichern)
    JNZ ABORTED CC ungleich null bedeutet abgebrochen.
    LG R3, CURR.BWD Auf vorheriges Element zeigen.
    PREVUSI QEL, R3 Es adressierbar machen.
    NG
    STG R1, PREV.FWD Vorherig. Vorwärtszeiger aktualisieren
    STG R1, CURR.BWD Aktuell. Rückwärtszeiger aktualisieren
    STG R2, NEW.FWD Neuen Vorwärtszeiger aktualisieren
    STG R3, NEW.BWD Neuen Rückwärtszeiger aktualisieren
    TEND Transaktion beenden
    ...
    ABORTED JO NO_RETRY CC3: Nicht wiederholbarer Abbruch.
    JCT R15, LOOP Transaktion ein paar Mal wiederholen.
    J NO_RETRY Kein Erfolg nach 10 Malen; auf harte Weise durchziehen.
  • Bei einem Beispiel ruft die Transaktion, wenn die Transaktion für eine Sperrauslassung (lock elision) verwendet wird, aber der Ausweichpfad eine Sperre verwendet, zumindest das Sperrwort ab, um zu ermitteln, um dieses verfügbar ist. Der Prozessor stellt sicher, dass die Transaktion abgebrochen wird, wenn eine weitere CPU nichttransaktionsorientiert auf die Sperre zugreift.
  • Unter Bezugnahme auf 18 enthält ein Computerprogrammprodukt 1800 bei einem Beispiel beispielsweise ein oder mehrere nichtflüchtige computerlesbare Speichermedien 1802, um ein Mittel oder eine Logik 1804 für einen computerlesbaren Programmcode darauf zu speichern, um eine oder mehrere Ausführungsformen bereitzustellen und zu erleichtern.
  • Unter Bezugnahme auf 19 sind repräsentative Komponenten eines Host-Computersystems 5000 gezeigt, mit denen einen oder mehrere der dargestellten Ausführungsformen implementiert werden. Der repräsentative Host-Computer 5000 weist eine oder mehrere CPUs 5001 in Verbindung mit einem Computerspeicher (d.h. Zentralspeicher) 5002 sowie E/A-Schnittstellen zu Speichermedieneinheiten 5011 und Netze 5010 zum Datenaustausch mit anderen Computern oder SANs und dergleichen auf. Die CPU 5001 entspricht einer Architektur mit einem architekturdefinierten Anweisungssatz und einer architekturdefinierten Funktionalität. Die CPU 5001 kann eine Zugriffsregisterumsetzung (ART) 5012 aufweisen, die einen ART-Umsetzpuffer (ALB, Lookaside Buffer) 5013 enthält, zum Auswählen eines Adressraums, der für eine dynamische Adressumsetzung (DAT) 5003 zum Umwandeln von Programmadressen (virtuellen Adressen) in reale Speicheradressen zu verwenden ist. Eine DAT beinhaltet für gewöhnlich einen Adressumsetzpuffer (TLB, Translation Lookaside Buffer) 5007 zum Zwischenspeichern von Umsetzungen, so dass spätere Zugriffe auf den Block von Computerspeichern 5002 keine Verzögerung der Adressumsetzung erfordern. Für gewöhnlich wird ein Cachespeicher 5009 zwischen dem Computerspeicher 5002 und dem Prozessor 5001 verwendet. Der Cachespeicher 5009 kann hierarchisch sein, mit einem großen Cachespeicher, der für mehr als eine CPU verfügbar ist, und kleineren, schnelleren Cachespeichern (niedrigerer Ebene) zwischen dem großen Cachespeicher und jeder CPU. Bei einigen Implementierungen werden die Cachespeicher niedrigerer Ebene geteilt, um getrennte Cachespeicher niedrigerer Ebene für das Abrufen von Anweisungen und Datenzugriffe bereitzustellen. Bei einer Ausführungsform können für die TX-Einrichtung ein Transaktionsdiagnoseblock (TDB) 5100 und ein oder mehrere Puffer 5101 in einem oder mehreren der Cachespeicher 5009 und des Speichers 5002 gespeichert werden. Bei einem Beispiel werden Daten im TX-Modus zunächst in einem TX-Puffer gespeichert und wenn der TX-Modus endet (z.B. äußerste TEND), werden die Daten im Puffer im Speicher gespeichert (festgeschrieben) oder im Fall eines Abbruchs werden die Daten im Puffer verworfen.
  • Bei einer Ausführungsform wird eine Anweisung aus dem Speicher 5002 durch eine Anweisungsabrufeinheit 5004 über einen Cachespeicher 5009 abgerufen. Die Anweisung wird in einer Adressentschlüsselungseinheit 5006 entschlüsselt und einer oder mehreren Anweisungsausführeinheiten 5008 zugeteilt (bei einigen Ausführungsformen mit anderen Anweisungen). Für gewöhnlich werden mehrere Ausführeinheiten 5008 verwendet, beispielsweise eine Rechenausführeinheit, eine Gleitkomma-Ausführeinheit und eine Verzweigungsanweisungs-Ausführeinheit. Darüber hinaus können bei einer Ausführungsform der TX-Einrichtung mehrere TX-Steuerungen 5110 verwendet werden. Die Anweisung wird von der Ausführeinheit ausgeführt, die nach Bedarf auf Operanden aus anweisungsspezifizierten Registern und Speichern zugreift. Wenn auf einen Operanden aus einem Speicher 5002 zugegriffen werden soll (der Operand geladen oder gespeichert werden soll), bearbeitet eine Lade/Speicher-Einheit 5005 für gewöhnlich den Zugriff unter der Steuerung der Anweisung, die gerade ausgeführt wird. Anweisungen können in Hardware-Schaltungen oder in einem internen Mikrocode (Firmware) oder durch eine Kombination aus beidem ausgeführt werden.
  • Gemäß einem Aspekt der TX-Einrichtung enthält der Prozessor 5001 auch ein PSW 5102 (z.B. TX- und/oder Abbruch-PSW), eine Verschachtelungstiefe 5104, eine TDBA 5106 und ein oder mehrere Steuerregister 5108.
  • Auf Einheiten, die separate Cachespeicher für Anweisungen und Datenoperanden implementieren, kann eine erhebliche Verzögerung stattfinden, wenn das Programm in eine Cachespeicherzeile speichert, aus der Anweisungen danach abgerufen werden, unabhängig davon, ob der Speichervorgang die Anweisungen ändert, die danach abgerufen werden.
  • Bei einem Beispiel können die Ausführungsformen durch eine Software umgesetzt werden (manchmal auch als lizensierter interner Code, Firmware, Mikrocode, Millicode, Picocode und dergleichen bezeichnet, wobei jedes davon mit einer oder mehreren Ausführungsformen im Einklang steht). Unter Bezugnahme auf 19 kann über einen Prozessor 5001 des Host-Systems 5000 aus Langzeit-Speichermedieneinheiten 5011, z.B. ein CD-ROM-Laufwerk, Bandlaufwerk oder Festplattenlaufwerk, auf einen Software-Programmcode zugegriffen werden, der eine oder mehrere Ausführungsformen realisiert. Der Software-Programmcode kann auf einer Vielzahl von bekannten Medien zur Verwendung mit einem Datenverarbeitungssystem realisiert werden, z.B. Diskette, Festplattenlaufwerk oder CD-ROM. Der Code kann auf solchen Medien verteilt werden oder kann an Benutzer aus dem Computerspeicher 5002 oder Speicher eines Computersystems über ein Netzwerk 5010 an andere Computersysteme verteilt werden, damit er von Benutzern solcher anderen Systeme verwendet werden kann.
  • Der Software-Programmcode beinhaltet ein Betriebssystem, das die Funktion und Interaktion der verschiedenen Computerkomponenten und eines oder mehrerer Anwendungsprogramme steuert. Der Programmcode wird für gewöhnlich aus der Speichermedieneinheit 5011 in den Computerspeicher 5002 ausgelagert, der eine verhältnismäßig höhere Geschwindigkeit aufweist, wo er für eine Verarbeitung durch den Prozessor 5001 zur Verfügung steht. Die Techniken und Verfahren zum Realisieren eines Software-Programmcodes im Speicher, auf physischen Medien und/oder zum Verteilen von Software-Code über Netze sind hinlänglich bekannt und werden hier nicht weiter erörtert. Der Programmcode, wenn er und auf einem konkreten Medium (z.B. elektronische Speichermodule, RAM), Flash-Speicher, Compact Disks (CDs), DVDs, Magnetband und dergleichen, ohne jedoch auf diese beschränkt zu sein) erstellt und gespeichert wird, wird häufig als „Computerprogrammprodukt“ bezeichnet. Das Computerprogrammprodukt-Medium ist für gewöhnlich für eine Verarbeitungsschaltung lesbar, vorzugsweise in einem Computersystem für eine Ausführung durch die Verarbeitungsschaltung
  • 20 zeigt eine repräsentative Workstation oder ein repräsentatives Server-Hardware-System, in der bzw. dem ein oder mehrere Aspekte realisiert werden können. Das System 5020 von 20 weist ein repräsentatives Basiscomputersystem 5021 auf, z.B. einen Personal Computer, eine Workstation oder einen Server, das optionale Peripherie-Einheiten enthält. Das Basiscomputersystem 5021 enthält einen oder mehrere Prozessoren 5026 und einen Bus, der zu Verbindungszwecken dient und verwendet wird, um einen Datenaustausch zwischen dem einen oder den mehreren Prozessoren 5026 und den anderen Komponenten des Systems 5021 gemäß bekannten Verfahren zu ermöglichen. Der Bus verbindet den Prozessor 5026 mit einem Speicher 5025 und einem Langzeitspeicher 5027, der beispielsweise ein Festplattenlaufwerk (darunter beispielsweise beliebige von Magnetmedien, CD, DV und Flash-Speicher) oder ein Bandlaufwerk enthält. Das System 5021 könnte auch einen Benutzerschnittstellenadapter enthalten, der den Mikroprozessor 5026 über den Bus mit einer oder mehreren Schnittstelleneinheiten, z.B. eine Tastatur 5024, eine Maus 5023, ein Drucker/Scanner 5030 und/oder andere Schnittstelleneinheiten, verbindet, bei denen es sich um eine beliebige Benutzerschnittstelleneinheit handeln kann, z.B. ein berührungsempfindlicher Bildschirm, ein digitalisiertes Eingabe-Pad usw. Der Bus verbindet darüber hinaus eine Anzeigeeinheit 5022, z.B. einen LCD-Bildschirm oder - Monitor, über einen Anzeigenadapter mit dem Mikroprozessor 5026.
  • Das System 5021 kann über einen Netzadapter, der in der Lage ist, mit einem Netz 5029 Daten auszutauschen 5028, mit anderen Computern oder Computernetzen Daten austauschen. Beispielhafte Netzadapter sind Datenübertragungskanäle, Token-Ring, Ethernet oder Modems. Alternativ kann das System 5021 unter Verwendung einer drahtlosen Schnittstelle Daten austauschen, z.B. einer CDPD-Karte (Cellular Digital Packet Data Card). Das System 5021 kann mit solchen anderen Computern in einem lokalen Netz (LAN) oder einem Weitverkehrsnetz (WAN) verbunden sein, oder bei dem System 5021 kann es sich um einen Client in einer Client/Server-Anordnung mit einem weiteren Computer usw. handeln. All diese Konfigurationen sowie die entsprechende Datenübertragungs-Hardware und -Software sind auf dem Gebiet bekannt.
  • 21 zeigt ein Datenverarbeitungsnetz 5040, in dem ein oder mehrere Ausführungsformen realisiert sein können. Das Datenverarbeitungsnetz 5040 kann eine Vielzahl von einzelnen Netzen enthalten, z.B. ein Drahtlosnetz und ein leitungsgebundenes Netz, wobei jedes davon eine Vielzahl von einzelnen Workstations 5041, 5042, 5043, 5044 enthalten kann. Wie der Fachmann verstehen wird, können ferner ein oder mehrere LANs enthalten sein, wobei ein LAN eine Vielzahl von intelligenten Workstations enthalten kann, die mit einem Host-Prozessor verbunden sind.
  • Unter weiterer Bezugnahme auf 21 können die Netze darüber hinaus Mainframe-Computer oder -Server enthalten, z.B. einen Gateway-Computer (Client-Server 5046) oder einen Anwendungs-Server (ferner Server 5048, der auf eine Datenablage zugreifen kann und auf den auch direkt von einer Workstation 5045 zugegriffen werden kann). Ein Gateway-Computer 5046 dient als Eintrittspunkt in jedes einzelne Netz. Ein Gateway wird benötigt, um ein Netzprotokoll mit einem anderen zu verbinden. Das Gateway 5046 kann über eine Datenübertragungsverbindung vorzugsweise mit einem weiteren Netz (z.B. dem Internet 5047) verbunden sein. Das Gateway 5046 kann darüber hinaus über eine Datenübertragungsverbindung direkt mit einer oder mehreren Workstations 5041, 5042, 5043, 5044 verbunden sein. Der Gateway-Computer kann unter Verwendung eines IBM eServer System z Server implementiert werden, der von der International Business Machines Corporation verfügbar ist.
  • Unter gleichzeitiger Bezugnahme auf 20 und 21 kann vom Prozessor 5026 des Systems 5020 aus Langzeit-Speichermedien 5027, z.B. ein CD-ROM-Laufwerk oder eine Festplattenlaufwerk, auf einen Software-Programmiercode 5031 zugegriffen werden, der eine oder mehrere Aspekte realisieren kann. Der Software-Programmiercode kann auf einer Vielzahl von bekannten Medien zur Verwendung mit einem Datenverarbeitungssystem realisiert werden, z.B. Diskette, Festplattenlaufwerk oder CD-ROM. Der Code kann auf solchen Medien verteilt werden oder kann an Benutzer 5050, 5051 aus dem Speicher eines Computersystems über ein Netzwerk an andere Computersysteme verteilt werden, damit er von Benutzern solcher anderen Systeme verwendet werden kann.
  • Alternativ kann der Programmiercode im Speicher 5025 enthalten sein, und auf diesen kann durch den Prozessor 5026 über den Prozessorbus zugegriffen werden. Ein solcher Programmiercode beinhaltet ein Betriebssystem, das die Funktion und Interaktion der verschiedenen Computerkomponenten und einer oder mehrere Anwendungsprogramme 5032 steuert. Der Programmcode wird für gewöhnlich aus den Speichermedien 5027 in den Hochgeschwindigkeitsspeicher 5025 ausgelagert, wo er für eine Verarbeitung durch den Prozessor 5026 zur Verfügung steht. Die Techniken und Verfahren zum Einbringen eines Software-Programmiercodes in einen Speicher, auf physische Medien und/oder zum Verteilen von Software-Code über Netze sind hinlänglich bekannt und werden hier nicht weiter erörtert. Der Programmcode, wenn er auf einem konkreten Medium, z.B. elektronische Speichermodule (RAM), Flash-Speicher, Compact Disks (CDs), DVDs, Magnetband und dergleichen, ohne jedoch auf diese beschränkt zu sein) erstellt und gespeichert wird, wird häufig als „Computerprogrammprodukt“ bezeichnet. Das Computerprogrammprodukt-Medium ist für gewöhnlich für eine Verarbeitungsschaltung lesbar, vorzugsweise in einem Computersystem für eine Ausführung durch die Verarbeitungsschaltung
  • Der Cachespeicher, der dem Prozessor am schnellsten zur Verfügung steht (für gewöhnlich schneller und kleiner als andere Cachespeicher des Prozessors) ist der Cachespeicher der niedrigsten Ebene (L1 oder Ebene eins) und der Hauptspeicher ist der Cachespeicher der höchsten Ebene (L3, wenn 3 Ebenen vorhanden sind). Der Cachespeicher der niedrigsten Ebene ist häufig in einen Anweisungscachespeicher (I-Cachespeicher), der auszuführende Maschinenanweisungen enthält, und einen Datencachespeicher (D-Cachespeicher) unterteilt, der Datenoperanden enthält.
  • Unter Bezugnahme auf 22 ist eine beispielhafte Prozessorausführung für den Prozessor 5026 gezeigt. Für gewöhnlich werden eine oder mehrere Ebenen des Cachespeichers 5053 verwendet, um Speicherblöcke zur Verbesserung der Prozessorleistung zu puffern. Der Cachespeicher 5053 ist ein Hochgeschwindigkeitspuffer, der Cachespeicherzeilen von Speicherdaten enthält, deren Verwendung wahrscheinlich ist. Typische Cachespeicherzeilen enthalten 64, 128 oder 256 Bytes von Speicherdaten. Separate Cachespeicher werden häufig zum Zwischenspeichern von Anweisungen und nicht von Daten verwendet. Cachespeicherkohärenz (Synchronisation von Kopien von Zeilen im Speicher und in den Cachespeichern) wird häufig durch verschiedene „Snoop“-Algorithmen bereitgestellt, die auf dem Gebiet der Technik hinlänglich bekannt sind. Der Hauptspeicher 5025 eines Prozessorsystems wird häufig als Cachespeicher bezeichnet. In einem Prozessorsystem mit 4 Ebenen des Cachespeichers 5053 wird der Hauptspeicher 5025 manchmal als Level-5-(L5-)Cachespeicher bezeichnet, da er für gewöhnlich schneller ist und nur einen Teil des nichtflüchtigen Speichers enthält, der für ein Computersystem verfügbar ist. Der Hauptspeicher 5025 speichert Seiten von Daten „zwischen“, die vom Betriebssystem in und aus dem Hauptspeicher 5025 ausgelagert wurden.
  • Ein Programmzähler (Anweisungszähler) 5061 überwacht die Adresse der aktuellen Anweisung, die es auszuführen gilt. Ein Programmzähler in einem z/Architecture-Prozessor hat eine Größe von 64 Bit und kann auf 31 oder 24 Bit gekürzt werden, um vorherige Adressbeschränkungen zu unterstützen. Ein Programmzähler ist für gewöhnlich in einem PSW (Programmstatuswort) eines Computers realisiert, so dass es während eines Kontextwechsels bestehen bleibt. Somit kann ein Programm, das sich gerade in Ausführung befindet und einen Programmzählerwert aufweist, beispielsweise vom Betriebssystem unterbrochen werden (Kontextwechsel aus der Programmumgebung in die Betriebssystemumgebung). Das PSW des Programms pflegt den Programmzählerwert, während das Programm nicht aktiv ist, und der Programmzähler (im PSW) des Betriebssystems wird verwendet, während das Betriebssystem ausgeführt wird. Für gewöhnlich wird der Programmzähler um einen Betrag erhöht, die gleich der Anzahl von Bytes der aktuellen Anweisung ist. RISC-Anweisungen (Reduced Instruction Set Computing instructions) weisen für gewöhnlich eine feste Länge auf, während CISC- Anweisungen (Complex Instruction Set Computing instructions) für gewöhnlich eine variable Länge besitzen. Anweisungen der IBM-z/Architecture sind CICS-Anweisungen mit einer Länge von 2, 4 oder 6 Byte. Der Programmzähler 5061 wird beispielsweise entweder durch eine Kontextwechseloperation oder eine Verzweigung-durchgeführt-Operation einer Verzweigungsanweisung geändert. Bei einer Kontextwechseloperation wird der aktuelle Programmwert im Programmstatuswort gemeinsam mit anderen Statusinformationen über das Programm gespeichert, das gerade ausgeführt wird (z.B. Bedingungscodes), und ein neuer Programmzählerwert wird geladen, der auf eine Anweisung eines neuen Programmmoduls zeigt, die ausgeführt werden soll. Eine Verzweigung-durchgeführt-Operation wird durchgeführt, um dem Programm zu ermöglichen, Entscheidungen zu treffen oder durch Laden der Ergebnisse der Verzweigungsanweisung in den Programmzähler 5061 eine Schleife innerhalb des Programms auszuführen,.
  • Für gewöhnlich wird eine Anweisungsabrufeinheit 5055 verwendet, um Anweisungen im Namen des Prozessors 5026 abzurufen. Die Abrufeinheit ruft entweder „nächste sequenzielle Anweisungen“, Zielanweisungen von Verzweigung-durchgeführt-Anweisungen oder erste Anweisungen eines Programms nach einem Kontextwechsel ab. Moderne Anweisungsabrufeinheiten verwenden häufig Abruftechniken, um Anweisungen auf der Grundlage der Wahrscheinlichkeit einer Verwendung der vorabgelesenen Anweisungen spekulativ vorabzulesen. Beispielsweise kann eine Abrufeinheit 16 Bytes einer Anweisung abrufen, die die nächsten sequenziellen Anweisungen enthält, und weitere Bytes weiterer sequenzieller Anweisungen.
  • Die abgerufenen Anweisungen werden dann vom Prozessor 5026 ausgeführt. Bei einer Ausführungsform werden die eine oder mehreren abgerufenen Anweisungen an eine Zuteileinheit 5056 der Abrufeinheit weitergeleitet. Die Zuteileinheit entschlüsselt die eine oder mehreren Anweisungen und leitet Informationen zu der einen oder den mehreren Anweisungen an entsprechende Einheiten 5057, 5058, 5060 weiter. Eine Ausführeinheit 5057 empfängt für gewöhnlich Informationen zu entschlüsselten Rechenanweisungen von der Anweisungsabrufeinheit 5055 und führt Rechenoperationen an Operanden gemäß dem Operationscode der Anweisung durch. Operanden werden der Ausführeinheit 5057 vorzugsweise entweder aus dem Speicher 5025, architekturdefinierten Registern 5059 oder einem Direktfeld der Anweisung bereitgestellt, die gerade ausgeführt wird. Ergebnisse der Ausführung werden - falls sie gespeichert werden - entweder im Speicher 5025, in den Registern 5059 oder in anderer Maschinen-Hardware (z.B. Steuerregister, PSW-Register und dergleichen) gespeichert.
  • Virtuelle Adressen werden mithilfe einer dynamischen Adressumsetzung 5062 und optional unter Verwendung einer Zugriffsregisterumsetzung 5063 in reale Adressen umgewandelt.
  • Ein Prozessor 5026 weist für gewöhnlich eine oder mehrere Einheiten 5057, 5058, 5060 zum Ausführen der Funktion der Anweisung auf. Unter Bezugnahme auf 23A kann eine Ausführeinheit 5057 über eine Schnittstellenlogik 5071 mit konzipierten allgemeinen Registern 5059, einer Entschlüsselungs/Zuteilungs-Einheit 5056, einer Lade/Speicher-Einheit 5060 und anderen 5065 Prozessoreinheiten Daten austauschen. Eine Ausführeinheit 5057 kann mehrerer Registerschaltungen 5067, 5068, 5069 verwenden, um Daten aufzubewahren, mit denen die arithmetisch-logische Einheit (ALU, Arithmetic Logic Unit) 5066 arbeitet. Die ALU führt Rechenoperationen durch, z.B. Addieren, Subtrahieren, Multiplizieren und Dividieren, sowie eine logische Funktion wie UND, ODER und Exklusives ODER (XOR), Drehen und Verschieben. Vorzugsweise unterstützt die ALU spezielle Operationen, die vom jeweiligen Aufbau abhängig sind. Andere Schaltungen können andere architekturdefinierte Einrichtungen 5072 bereitstellen, die beispielsweise Bedingungscodes und eine Wiederherstellungsunterstützungslogik enthalten. Für gewöhnlich wird das Ergebnis einer ALU-Operation in einer Ausgaberegisterschaltung 5070 aufbewahrt, die das Ergebnis an eine Vielzahl von anderen Verarbeitungsfunktionen weiterleiten kann. Es gibt viele Anordnungen von Prozessoreinheiten, wobei die vorliegende Beschreibung lediglich ein repräsentatives Verständnis einer Ausführungsform bereitstellen soll.
  • Eine ADD-Anweisung beispielsweise wird in einer Ausführeinheit 5057 mit einer Rechen- und logischen Funktionalität ausgeführt, eine Gleitkommaanweisung beispielsweise wird hingegen in einer Gleitkommaausführung mit einer speziellen Gleitkommafunktion ausgeführt. Vorzugsweise führt eine Ausführeinheit Aktionen an Operanden durch, die von einer Anweisung gekennzeichnet werden, indem sie durch einen Operationscode definierte Funktion an den Operanden durchführt. Beispielsweise kann eine ADD-Anweisung von einer Ausführeinheit 5057 an Operanden ausgeführt werden, die in zwei Registern 5059 zu finden sind, die durch die Registerfelder der Anweisung gekennzeichnet werden.
  • Die Ausführeinheit 5057 führt die arithmetische Addition an zwei Operanden durch und speichert das Ergebnis in einem dritten Operanden, wobei der dritte Operand ein drittes Register oder eines der beiden Quellregister sein kann. Die Ausführeinheit verwendet vorzugsweis eine arithmetisch-logische Einheit (ALU) 5066, die in der Lage ist, eine Vielzahl von logischen Funktionen wie Verschieben, Drehen, UND, ODER und XOR sowie eine Vielzahl von algebraischen Funktionen, darunter Addieren, Subtrahieren, Multiplizieren und Dividieren, auszuführen. Einige ALUs 5066 sind für skalare Operationen und einige für Gleitkomma konzipiert. Die Daten können in Abhängigkeit von der Architektur entsprechend Big-Endian (wobei das niedrigstwertige Byte an der Adresse des höchstwertigsten Byte liegt) oder Little Endian (wobei das niedrigstwertige Byte an der Adresse des niedrigstwertigen Byte liegt) angeordnet sein. Die IBM z/Architecture ist Big Endian. Vorzeichenbehaftete Felder können je nach Architektur ein Vorzeichen und eine Größenordnung, ein Einerkomplement oder ein Zweierkomplement sein. Eine Zweikomplement-Zahl ist dahingehend vorteilhaft, dass die ALU keine Subtrahierfunktion entwickeln muss, da ein negativer Wert oder ein positiver Wert in einem Zweierkomplement nur eine Addition innerhalb der ALU erfordert. Zahlen werden für gewöhnlich in Kurzform beschrieben, wobei ein 12-Bit-Feld eine Adresse aus einem 4096-Byte-Block definiert und beispielsweise für gewöhnlich als ein 4-KByte-(Kilobyte-)Block beschrieben wird.
  • Unter Bezugnahme auf 23B werden Verzweigungsanweisungsinformationen zum Ausführen einer Verzweigungsanweisung für gewöhnlich an eine Verzweigungseinheit 5058 gesendet, die häufig einen Verzweigungsvorhersagealgorithmus wie z.B. eine Verzweigungsverlaufstabelle 5082 verwendet, um das Ergebnis einer Verzweigung vorherzusagen, bevor andere bedingte Operationen ausgeführt wurden. Das Ziel der aktuellen Verzweigungsanweisung wird abgerufen und spekulativ ausgeführt, bevor die bedingten Operationen ausgeführt wurden. Wenn die bedingten Operationen ausgeführt wurden, wurden die spekulativ ausgeführten Verzweigungsanweisungen entweder ausgeführt oder sie werden auf der Grundlage der Bedingungen der bedingten Operation und des spekulierten Ergebnisses verworfen. Eine typische Verzweigungsanweisung kann Bedingungscodes testen und zu einer Zieladresse verzweigen, wenn die Bedingungscodes die Verzweigungsanforderung der Verzweigungsanweisung erfüllen, eine Zieladresse kann auf der Grundlage mehrerer Zahlen berechnet werden, beispielsweise in den Registerfeldern oder einem Direktfeld zu findende Zahlen. Die Verzweigungseinheit 5058 kann eine ALU 5074 verwenden, die eine Vielzahl von Eingaberegisterschaltungen 5075, 5076, 5077 und einen Ausgaberegisterschaltung 5080 aufweist. Die Verzweigungseinheit 5058 kann Daten beispielsweise mit allgemeinen Registern 5059, einer Entschlüsselungszuteileinheit 5056 oder anderen Schaltungen 5073 austauschen 5081.
  • Unter Bezugnahme auf 23C greift ein Prozessor unter Verwendung einer Lade/Speicher-Einheit 5060 auf Speicher zu. Die Lade/Speicher-Einheit 5060 kann eine Ladeoperation durchführen, indem sie die Adresse des Zieloperanden im Speicher 5053 erhält und den Operanden in einen Register 5059 oder einen anderen Speicherort eines Speichers 5053 lädt, oder sie kann eine Speicheroperation durchführen, indem sie die Adresse des Zieloperanden im Speicher 5053 erhält und aus einem Register 5059 oder einem anderen Speicherort eines Speichers 5053 erhaltene Daten im Ziel-Operanden-Speicherort im Speicher 5053 speichert. Die Lade/Speicher-Einheit 5060 kann spekulativ sein und auf Speicher in einer Abfolge zugreifen, die in Bezug auf die Anweisungsabfolge nichtsequenziell ist, allerdings muss die Lade/Speicher-Einheit 5060 gegenüber anderen Programmen den Anschein wahren, dass Anweisungen gemäß der Abfolge ausgeführt werden. Eine Lade/Speicher-Einheit 5060 kann Daten mit allgemeinen Registern 5059, Entschlüsselungs/Zuteilungs-Einheit 5056, Cachespeicher/Arbeitsspeicher-Schnittstelle 5053 oder anderen Elementen 5083 austauschen 5084 und beinhaltet verschiedene Registerschaltungen 5086, 5087, 5088 und 5089, ALUs 5085 und eine Steuerlogik 5090, um Speicheradressen zu berechnen und eine Pipeline-Sequenzierung bereitstellen, um Operation sequenziell zu halten. Einige Operationen können nichtsequenziell sein, aber die Lade/Speicher-Einheit stellt eine Funktionalität bereit, mit der die nichtsequenziellen Operationen gegenüber dem Programm als sequenziell durchgeführt darzustellen, wie auf dem Gebiet der Technik hinlänglich bekannt.
  • Wenn es sich bei dem Prozessor um einen Prozessor eines Multiprozessorsystems handelt, hat jeder Prozessor die Aufgabe, gemeinsam genutzte Ressourcen wie E/A, Cachespeicher, TLBs und Speicher zu halten, die der Kohärenz wegen gesperrt sind. Für gewöhnlich werden „Snoop“-Technologien beim Aufrechterhalten der Cachespeicherkohärenz verwendet. Bei einer Snoop-Umgebung kann jede Cachespeicherzeile als in einem gemeinsam genutzten Status, einem exklusiven Status, einem veränderten Status, einem ungültigen Status und dergleichen befindlich gekennzeichnet werden, um die gemeinsame Nutzung zu erleichtern.
  • Die E/A-Einheiten 5054 (22) stellen für den Prozessor ein Mittel zum Anschließen an Peripherie-Einheiten wie z.B. Band, Platte, Drucker, Anzeigen und Netze bereit. E/A-Einheiten werden dem Computerprogramm häufig durch Software-Treiber präsentiert. Bei Mainframes wie dem System z von IBM® sind Kanaladapter und Adapter offener Systeme E/A-Einheiten des Mainframe, die den Datenaustausch zwischen dem Betriebssystem und Peripherie-Einheiten bereitstellen.
  • In 24 ist ein Beispiel für ein emuliertes Host-Computersystem 5092 bereitgestellt, das ein Host-Computersystem 5000' einer Host-Architektur emuliert. Im emulierten Host-Computersystem 5092 ist der Host-Prozessor (CPU) 5091 ein emulierter Host-Prozessor (oder ein virtueller Host-Prozessor) und weist einem Emulationsprozessor 5093 mit einer anderen nativen Anweisungssatzarchitektur als jene des Prozessors 5091 des Host-Computers 5000' auf. Das emulierte Host-Computersystem 5092 weist einen Speicher 5094 auf, der für den Emulationsprozessor 5093 zugänglich ist. Bei der beispielhaften Ausführungsform ist der Speicher 5094 in einen Abschnitt eines Host-Computerspeichers 5096 und einen Abschnitt von Emulationsroutinen 5097 partitioniert. Der Host-Computerspeicher 5096 ist für Programme des emulierten Host-Computers 5092 gemäß der Host-Computerarchitektur verfügbar. Der Emulationsprozessor 5093 führt native Anweisungen eines architekturdefinierten Anweisungssatzes einer Architektur aus, bei der es sich nicht um jener des emulierten Prozessors 5091 handelt, wobei die nativen Anweisungen aus einem Emulationsroutinenspeicher 5097 erhalten werden, und kann auf eine Host-Infrastruktur zur Ausführung aus einem Programm in einem Host-Computerspeicher 5096 durch Anwenden einer oder mehrerer Anweisungen zugreifen, die in einer Abfolge-und-Zugriff/Entschlüsselungsroutine erhalten werden, die die eine oder mehreren Host-Anweisungen entschlüsseln, auf die zugegriffen wird, um eine native Anweisungsausführungsroutine zum Emulieren der Funktion der Host-Anweisung zu ermitteln, auf die zugegriffen wird. Andere Einrichtungen, die für die Architektur des Host-Computersystems 5000' definiert sind, können durch architekturdefinierte Einrichtung-Routinen emuliert werden, darunter beispielsweise Einrichtungen wie Universalregister, Steuerregister, dynamische Adressumsetzung und E/A-Teilsystem-Unterstützung sowie Prozessorcachespeicher. Die Emulationsroutinen können auch Funktionen nutzen, die im Emulationsprozessor 5093 verfügbar sind (z.B. allgemeine Register und dynamische Umsetzung von virtuellen Adressen), um die Leistung der Emulationsroutinen zu verbessern. Spezielle Hardware und Auslagerungsmodule können auch bereitgestellt werden, um den Prozessor 5093 beim Emulieren der Funktion des Host-Computers 5000' zu unterstützen.

Claims (14)

  1. Verfahren zur transaktionalen Ausführung von Anweisungen einer ersten CPU, die zusammen mit weiteren CPUs auf dieselben Speicherorte eines Speichers zugreifen kann, - wobei die erste CPU durch eine bestimmte Anweisung in den Modus der spekulativen transaktionalen Ausführung (TX-Modus) eintritt, - wobei die erste CPU den TX-Modus verlässt durch a) eine bestimmte Anweisung, die den Modus der spekulativen transaktionalen Ausführung beendet, oder b) durch einen Abbruch der Transaktion; - wobei die Speicherzugriffe der ersten CPU im TX-Modus festgeschrieben werden, wenn die Transaktion ohne Abbruch endet, - wobei die Speicherzugriffe der ersten CPU im TX-Modus verworfen werden, wenn eine Transaktion abgebrochen wird; o und ein Abbruchzähler erhöht wird, wenn der Abbruch auf Grund eines Zugriffskonfliktes bei der spekulativen Transaktionsausführung erfolgte, und andernfalls der Abbruchzähler zurückgesetzt wird, - wobei das ausgeführte Programm im Fall eines Transaktionsabbruchs die Transaktion erneut ansteuert, wenn der Abbruchzähler unterhalb eines Schwellwertes liegt, und andernfalls das Programm auf eine alternative Ausführung zum spekulativen transaktionalen Pfad ausweicht, sodass die Transaktion letztendlich durchgeführt wird.
  2. Verfahren nach Anspruch 1, das ferner aufweist: - Ermitteln auf der Grundlage des Wiederholens der Transaktion für das eine oder die mehreren ausgewählten Male, ob die wiederholte Transaktion abgebrochen wurde; und - Durchführen einer weiteren Aktion, die das Verarbeiten des Prozessors oder des weiteren Prozessors weiter einschränkt, auf der Grundlage dessen, dass die wiederholte Transaktion nach dem Wiederholen für das eine oder die mehreren ausgewählten Male abgebrochen wurde; und - Wiederholen der Transaktion nach dem Durchführen der weiteren Aktion.
  3. Verfahren nach Anspruch 2, - das ferner ein Durchführen einer oder mehrerer anderer Aktionen für ein oder mehrere Male auf der Grundlage des wiederholten Abbruchs aufweist, bis die Transaktion erfolgreich ausgeführt wird, oder bis eine Unterbrechung für die Transaktion dargeboten wird.
  4. Verfahren nach Anspruch 1, das ferner aufweist: - Feststellen durch den Prozessor, dass die Transaktion eine Anzahl von Malen abgebrochen wurde und eine bestimmte Höhe erreicht; - dass der Prozessor auf Grundlage dessen, dass eine bestimmte Höhe erreicht wird, eine oder mehrere andere Prozessoren der Datenverarbeitungsumgebung anweist, die Operation zu beenden, wobei der eine oder die mehreren anderen Prozessoren zumindest den weiteren Prozessor aufweisen; und - erneutes Ausführen der Transaktion ein oder mehrere Male auf der Grundlage des Anweisens der einen oder mehreren anderen Prozessoren, um die Transaktion auszuführen.
  5. Verfahren nach Anspruch 4, - wobei das Anweisen ein Erwerben eines Semaphors und das Senden einer Unterbrechung an den einen oder die mehreren anderen Prozessoren aufweist.
  6. Verfahren nach Anspruch 5, das ferner aufweist: - Empfangen der Unterbrechung von dem einen oder den mehreren Prozessoren; - Beenden von Operationen und Überwachen des Semaphors auf der Grundlage des Empfangens der Unterbrechung; und - Fortsetzen von Operationen auf der Grundlage dessen, dass das Überwachen ein Zurücksetzen des Semaphors anzeigt.
  7. Verfahren nach Anspruch 4, - wobei ein Prozessor des einen oder der mehreren Prozessoren einen Abbruchkonflikt verursacht.
  8. Verfahren nach Anspruch 1, das ferner aufweist: - Feststellen, dass die Transaktion eine maximale Anzahl von Malen abgebrochen wurde; und - Darbieten einer Unterbrechung auf der Grundlage dessen, dass die Transaktion eine maximale Anzahl von Malen abgebrochen wurde.
  9. Verfahren nach Anspruch 1, - das ferner ein Zurücksetzen der Verarbeitung des Prozessors oder des weiteren Prozessors auf der Grundlage dessen aufweist, das die Transaktion erfolgreich ausgeführt wird oder eine Unterbrechung für die Transaktion dargeboten wird.
  10. Verfahren nach Anspruch 1, - wobei die Aktion ein Deaktivieren einer Sprungvorhersage oder ein Deaktivieren des spekulativen Abrufens von Anweisungen oder ein Deaktivieren der superskalaren Zuteilung oder ein Deaktivieren der nichtsequenziellen Ausführung oder ein ausschließliches Abrufen von Cachespeicherfehltreffern oder ein Ausführen einer einzelnen Anweisung durch eine Anweisungs-Pipeline oder ein Anwenden eines Semaphor aufweist, um einen oder mehrere Prozessoren zu sperren.
  11. Verfahren nach Anspruch 1, - das ferner ein Auswählen der durchzuführenden Aktion aufweist, wobei das Auswählen auf der Grundlage einer Abbruchbedingung beruht.
  12. Verfahren nach Anspruch 1, - wobei die Transaktion eine eingeschränkte Transaktion ist, die mit einer Vielzahl von Einschränkungen verbunden ist, und wobei die Anweisung Transaction begin eine Transaction-begin-constrained-Transaktion ist.
  13. Computersystem zum Erleichtern der Verarbeitung innerhalb einer Datenverarbeitungsumgebung, wobei das Computersystem aufweist: - einen Speicher; und - einen Prozessor in Verbindung mit dem Speicher, wobei das Computersystem konfiguriert ist zur transaktionalen Ausführung von Anweisungen einer ersten CPU, die zusammen mit weiteren CPUs auf dieselben Speicherorte eines Speichers zugreifen kann, - wobei die erste CPU durch eine bestimmte Anweisung in den Modus der spekulativen transaktionalen Ausführung (TX-Modus) eintritt, - wobei die erste CPU den TX-Modus verlässt durch a) eine bestimmte Anweisung, die den Modus der spekulativen transaktionalen Ausführung beendet, oder b) durch einen Abbruch der Transaktion; - wobei die Speicherzugriffe der ersten CPU im TX-Modus festgeschrieben werden, wenn die Transaktion ohne Abbruch endet, - wobei die Speicherzugriffe der ersten CPU im TX-Modus verworfen werden, wenn eine Transaktion abgebrochen wird; o und ein Abbruchzähler erhöht wird, wenn der Abbruch auf Grund eines Zugriffskonfliktes bei der spekulativen Transaktionsausführung erfolgte, und andernfalls der Abbruchzähler zurückgesetzt wird, - wobei das ausgeführte Programm im Fall eines Transaktionsabbruchs die Transaktion erneut ansteuert, wenn der Abbruchzähler unterhalb eines Schwellwertes liegt, und andernfalls das Programm auf eine alternative Ausführung zum spekulativen transaktionalen Pfad ausweicht, sodass die Transaktion letztendlich durchgeführt wird.
  14. Computerprogrammprodukt zum Erleichtern der Verarbeitung innerhalb einer Datenverarbeitungsumgebung, wobei das Computerprogrammprodukt aufweist: - ein computerlesbares Speichermedium, das von einer Verarbeitungsschaltung lesbar ist und Anweisungen zum Ausführen durch die Verarbeitungsschaltung für das Durchführen eines Verfahrens zur transaktionalen Ausführung von Anweisungen einer ersten CPU, die zusammen mit weiteren CPUs auf dieselben Speicherorte eines Speichers zugreifen kann, speichert, - wobei die erste CPU durch eine bestimmte Anweisung in den Modus der spekulativen transaktionalen Ausführung (TX-Modus) eintritt, - wobei die erste CPU den TX-Modus verlässt durch a) eine bestimmte Anweisung, die den Modus der spekulativen transaktionalen Ausführung beendet, oder b) durch einen Abbruch der Transaktion; - wobei die Speicherzugriffe der ersten CPU im TX-Modus festgeschrieben werden, wenn die Transaktion ohne Abbruch endet, - wobei die Speicherzugriffe der ersten CPU im TX-Modus verworfen werden, wenn eine Transaktion abgebrochen wird; o und ein Abbruchzähler erhöht wird, wenn der Abbruch auf Grund eines Zugriffskonfliktes bei der spekulativen Transaktionsausführung erfolgte, und andernfalls der Abbruchzähler zurückgesetzt wird, - wobei das ausgeführte Programm im Fall eines Transaktionsabbruchs die Transaktion erneut ansteuert, wenn der Abbruchzähler unterhalb eines Schwellwertes liegt, und andernfalls das Programm auf eine alternative Ausführung zum spekulativen transaktionalen Pfad ausweicht, sodass die Transaktion letztendlich durchgeführt wird.
DE102013210839.7A 2012-06-15 2013-06-11 Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion Active DE102013210839B4 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US13/524,833 US9442737B2 (en) 2012-06-15 2012-06-15 Restricting processing within a processor to facilitate transaction completion
US13/524,833 2012-06-15
US13/783,312 US9442738B2 (en) 2012-06-15 2013-03-03 Restricting processing within a processor to facilitate transaction completion
US13/783,312 2013-03-03

Publications (2)

Publication Number Publication Date
DE102013210839A1 DE102013210839A1 (de) 2013-12-19
DE102013210839B4 true DE102013210839B4 (de) 2023-06-07

Family

ID=49668206

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013210839.7A Active DE102013210839B4 (de) 2012-06-15 2013-06-11 Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion

Country Status (1)

Country Link
DE (1) DE102013210839B4 (de)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU6629894A (en) 1993-05-07 1994-12-12 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Tomic, S. et al.: EazyHTM: Eager-Lazy Hardware Transactional Memory. In: 2009 42nd Annual IEEE/ACM International Symposium on Microarchitecture (MICRO), New York, NY, USA, 2009.

Also Published As

Publication number Publication date
DE102013210839A1 (de) 2013-12-19

Similar Documents

Publication Publication Date Title
US11080087B2 (en) Transaction begin/end instructions
DE112013001941B4 (de) Eingeschränkte Anweisungen in Transaktionsgebundener Ausführung
US10353759B2 (en) Facilitating transaction completion subsequent to repeated aborts of the transaction
US9792125B2 (en) Saving/restoring selected registers in transactional processing
US9442738B2 (en) Restricting processing within a processor to facilitate transaction completion
US9483276B2 (en) Management of shared transactional resources
JP6176637B2 (ja) トランザクション環境内でのプログラム・イベント記録
US9336007B2 (en) Processor assist facility
US8880959B2 (en) Transaction diagnostic block
US9395998B2 (en) Selectively controlling instruction execution in transactional processing
DE112013002040T5 (de) Transaktionsabbruchverarbeitung
US10430199B2 (en) Program interruption filtering in transactional execution
DE102014003399A1 (de) Systeme und Verfahren zur Implementierung transaktionalen Speichers
DE112015000294T5 (de) Wiederherstellen von Hardware-Transaktionen
US9223687B2 (en) Determining the logical address of a transaction abort
DE112017000163T5 (de) Priorisierung von Transaktionen
DE112015000223T5 (de) Maschinenbefehl zum Beenden eines bedingten Befehls
DE102013210839B4 (de) Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion
DE102013210160A1 (de) Erleichtern der Ausführung einer Transaktion nach wiederholten Abbrüchen der Transaktion

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final