-
TECHNISCHES GEBIET
-
Hier beschriebene Ausführungsformen beziehen sich allgemein auf das Gebiet der Datenverarbeitung und insbesondere auf eine integritätsgeschützte Befehlspufferausführung.
-
HINTERGRUND
-
Grafikverarbeitungseinheiten (GPUs) werden weithin verwendet, um Rechenarbeitslasten zu beschleunigen. Vertrauenswürdige Ausführungsumgebungen (TEEs), die z. B. Intel® „Software Guard Extensions“ (SGX) enthalten, können verwendet werden, um die Vertraulichkeit und Integrität von Anwenderdaten zu schützen und Kernels auf einer Host-Berechnungsvorrichtung zu berechnen. Um Arbeitslasten sicher zu einer Beschleunigervorrichtung wie z. B. einer Grafikverarbeitungseinheit (GPU) oder einem ähnliche Beschleuniger zu entladen, ist es notwendig, die Integrität von Daten und Kernels zu schützen und die Integrität von Befehlspuffern, die verwendet werden, um die GPU anzuweisen, die Ausführungsumgebung des Rechenkernels aufzubauen und die Kernels zu starten, zu schützen. In einigen Beispielen enthalten die Befehlspuffer Befehle, die die Befehlsprozessoren in der GPU anweisen, die Ausführungsumgebung für die GPGPU-Kernels aufzubauen, so dass sie innerhalb der GPU ablaufen. Die Rechenkernels laufen auf den SIMD-Ausführungseinheiten ab. Diese Befehlspuffer können innerhalb einer Host-TEE durch eine Anwenderraum-Software konstruiert sein, jedoch werden die Befehlspuffer durch den Kernelmodustreiber, der außerhalb der TEE ist, zu der GPU übermittelt. Der Kernelmodustreiber führt Funktionen aus wie z. B. Prüfen von Befehlen und Modifikation virtueller Adressen in den Befehlen, bevor er sie an die GPU übermittelt. Deshalb können Befehlspuffer für unberechtigte Modifikation (d. h. Einfügen, Löschen oder Modifikation von Befehlen und ihrer Parameter) durch Schadsoftware anfällig sein.
-
GPU-Befehlspuffer sind komplexe Datenstrukturen, die im Speicher residieren und die typischerweise aus Batches von Befehlen bestehen, die durch Zeiger miteinander verkettet sind. Befehle können Inline-Daten beinhalten oder externe Daten über Zeiger referenzieren. Diese Befehle werden durch einen Befehlsprozessor (auch als ein Befehls-Streamer bezeichnet) in der GPU gelesen, analysiert und ausgeführt. Das Lesen und das Ausführen von Befehlen in dem Befehlspuffer ist verschachtelt, d. h. der Befehlspuffer wird nicht vollständig in den GPU-Speicher gelesen, sondern wird inkrementell gelesen und ausgeführt. Darüber hinaus könnte die Befehlsausführung für eine Arbeitslast durch eine Arbeitslast mit höherer Priorität zurückgestellt und später wieder aufgenommen werden. Das Vorstehende präsentiert Herausforderungen zum Schützen der Integrität des Befehlspuffers auf eine solche Weise, dass sichergestellt ist, dass nur auf Integrität verifizierte Befehle und Daten durch die GPU verbraucht werden.
-
Figurenliste
-
Hier beschriebene Ausführungsformen sind als Beispiel und nicht als Einschränkung in den Figuren der begleitenden Zeichnungen, in denen sich gleiche Bezugszeichen auf ähnliche Elemente beziehen, dargestellt.
- 1 ist ein Blockdiagramm, das eine Berechnungssystemarchitektur, die ein Host-System und einen zugeordneten Grafikprozessor enthält, gemäß einer Ausführungsform darstellt.
- 2 ist ein Blockdiagramm, das die Struktur von Befehlspuffern gemäß einer Ausführungsform darstellt.
- 3 ist ein Blockdiagramm, das ein konkretes Beispiel einer Befehlspufferstruktur gemäß einer Ausführungsform darstellt.
- 4 ist ein Blockdiagramm, das einen Identifizierungskennzeichendatensatz und Identifizierungskennzeichendatensatz-Array-Datenstrukturen gemäß einer Ausführungsform darstellt.
- 5 ist ein Ablaufplan, der Operationen auf hoher Ebene zum Aufbauen der Datenstrukturen, die notwendig sind, um integritätsgeschützte Befehlspufferausführung bereitzustellen, gemäß einer Ausführungsform darstellt.
- 6 ist ein Ablaufplan, der Operationen in einem Verfahren zum Bereitstellen von integritätsgeschützter Befehlspufferausführung gemäß einer Ausführungsform darstellt.
- 7 ist ein Blockdiagramm, das eine Berechnungsarchitektur, die ausgelegt sein kann, um Dienste für sichere Adressenübersetzung unter Verwendung von Nachrichtenauthentifizierungscodes und Ungültigmachungsverfolgung bereitzustellen, gemäß einer Ausführungsform darstellt.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Hier beschriebene Ausführungsformen sind auf das Bereitstellen integritätsgeschützter Befehlspufferausführung gerichtet. Obwohl Prinzipien und Techniken in dem Kontext einer Umgebung mit einer Grafikverarbeitungseinheit (GPU) beschrieben sind, ist zu verstehen, dass die Prinzipien und Techniken in gleicher Weise für andere Verarbeitungsumgebungen gelten, z. B. für Videoverarbeitungsumgebungen und/oder einen Prozess für künstliche Intelligenz (AI) wie z. B. Verarbeitung mit neuronalen Netzen.
-
Beispielhafte Berechnungsumgebung
-
1 ist ein Blockdiagramm, das eine Berechnungsumgebung 100, die ein Host-System 110 und einen zugeordneten Grafikprozessor 150 umfasst, darstellt. Die Berechnungsumgebung 100 kann als irgendein Typ einer Berechnungsvorrichtung, die zum Ausführen der hier beschriebenen Funktionen fähig ist, verwirklicht sein. Beispielsweise kann die Berechnungsumgebung 100, ohne Einschränkung, als ein Computer, ein Laptop-Computer, ein Tablet-Computer, ein Notebook-Computer, eine mobile Berechnungsvorrichtung, ein Smartphone, eine am Körper tragbare Berechnungsvorrichtung, ein Mehrprozessorsystem, ein Server, ein Arbeitsplatzrechner und/oder ein Gerät für Unterhaltungselektronik verwirklicht sein.
-
In einigen Beispielen kann das Host-System 110 eine oder mehrere zentrale Verarbeitungseinheiten (CPUs) 112 umfassen, die ein Betriebssystem 114 ausführen. Die eine oder die mehreren CPUs 112 können irgendeinen Typ eines Berechnungselements umfassen, wie z. B., ohne jedoch darauf beschränkt zu sein, einen Mikroprozessor, eine Mikrosteuereinheit, einen Mikroprozessor für Berechnung mit einem komplexen Befehlssatz (CISC), einen Mikroprozessor für einen reduzierten Befehlssatz (RISC), einen Mikroprozessor für sehr langes Befehlswort (VLIW) oder einen anderen Typ eines Prozessors oder einer Verarbeitungsschaltung. In einigen Ausführungsformen können die CPU(s) 112 ein oder mehrere Prozessoren in der Pentium®-Prozessorfamilie sein, die die Pentium® II-Prozessorfamilie, Pentium® III-Prozessoren, Pentium® IV, CORE2 Duo-Prozessoren oder Atom-Prozessoren, erhältlich von Intel® Corporation in Santa Clara, Kalifornien, enthalten. Alternativ können andere CPUs verwendet werden, wie z. B. die Itanium®-, XEON™- und Celeron®-Prozessoren von Intel. Außerdem können ein oder mehrere Prozessoren von anderen Herstellern benutzt werden. Darüber hinaus können die Prozessoren eine Einzelkern- oder Mehrkern-Konstruktion aufweisen.
-
Das Betriebssystem 114 kann aus ein UNIX- Betriebssystem oder eine Ableitung davon (z. B. Linux, Solaris usw.) oder ein Betriebssystem der Marke Windows® oder andere Betriebssysteme verwirklicht sein. Das Betriebssystem 114 kann einen Kernelmodustreiber (KMD) implementieren, um Vorrichtungen und/oder Anwendungen, die auf dem Host-System 110 ablaufen, zu unterstützen.
-
Das Host-System 110 umfasst ferner einen Host-Systemspeicher 120, der wiederum einen GPU-Berechnungskernel 122, einen oder mehrere Befehlspuffer 124, einen Speicherplatz für Eingaben 126 und Host-Seitentabellen 28 umfasst. In einigen Ausführungsformen kann das Host-System 110 eine oder mehrere OpenCL-Anwendungen 130A, 130B ausführen, die eine API aufrufen, wie z. B. die „Open Computing Language“- (OpenCL-) 132A, 132B, API von der Khronos-Gruppe. In einigen Ausführungsformen kann auch Unterstützung für die Direct3D-Bibliothek von Microsoft Corporation bereitgestellt sein. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken bereitgestellt sein. Es kann auch Unterstützung für die „Open Source Computer Vision Library“ (OpenCV) bereitgestellt sein.
-
In einigen Beispielen kann der gesamte oder ein Teil des Hosts 110 in einer vertrauenswürdigen Ausführungsumgebung (TEE), auch als eine sichere Enklave bezeichnet, implementiert sein, in der ablaufender Code gemessen, verifiziert und/oder auf andere Weise als authentisch bestimmt werden kann. Zusätzlich können Code und Daten, die in der sicheren Enklave enthalten sind, verschlüsselt sein oder auf andere Weise dagegen geschützt sein, dass durch Code, der außerhalb der sicheren Enklave abläuft, auf sie zugegriffen wird.
-
Beispielsweise können Code und Daten, die in der sicheren Enklave enthalten sind, durch Hardware-Schutzmechanismen der CPU(s) 112 geschützt sein, während sie ausgeführt werden oder während sie in einem speziellen geschützten Speicher des Hosts 110 gespeichert sind. Beispielsweise kann die vertrauenswürdige Ausführungsumgebung (TEE) als Intel® „Software Guard Extensions“- (SGX-) Technologie verwirklicht sein.
-
In einigen Beispielen umfasst der Grafikprozessor 150 einen Scheduler 152, einen Befehls-Streamer(s) 154, mehrere Einzelbefehl-Mehrfachdaten- (SIMD-) Ausführungseinheiten (EUs), L3-Cache 158 und eine Speichermanagementeinheit (MMU) 160, die einen Übersetzungspuffer (TLB) 162 managt. Der Grafikprozessor 150 umfasst ferner Speicher 180, der einen GPGPU-Kernel 182, einen oder mehrere Befehlspuffer 184, eine oder mehrere Eingaben 186, eine oder mehrere Grafikseitentabellen 188, eine oder mehrere Ausgaben 190 und einen Grafikzustandssicherungsbereich 192 verwaltet.
-
In einer Ausführungsform plant der Scheduler 152 die Anwenderarbeitslasten (die aus GPU-Berechnungskernel und Eingabedaten bestehen) auf verfügbaren Befehls-Streamern (154). Die Befehls-Streamer verteilen Instanzen des GPU-Berechnungskernels an die SIMD-Ausführungseinheiten zur Ausführung. In einer Ausführungsform ist der Scheduler 152 über Firmware-Logik, die auf einer Mikrosteuereinheit abläuft, implementiert. Der durch eine Mikrosteuereinheit implementierte Scheduler 152 ist konfigurierbar, um komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität auszuführen, was schnelles Zurückstellen und Kontextumschalten von Threads, die auf den Ausführungseinheiten 156 ablaufen, ermöglicht. In einer Ausführungsform kann Software, die auf dem Host 110 abläuft, Arbeitslasten zum Planen auf den Ausführungseinheiten 156 nachweisen. Die Arbeitslasten können dann durch den Befehls-Streamer 154 automatisch über die Ausführungseinheiten 156 verteilt werden.
-
Das Planen von Operationen, das durch den Scheduler 152 implementiert ist, enthält das Bestimmen, welche Arbeitslast auszuführen ist, und Übermitteln einer Arbeitslast zu einem Befehls-Streamer 154. In einigen Ausführungsformen ist der Befehls-Streamer 154 mit dem Host und dem Grafikspeicher kommunikationstechnisch gekoppelt. In einigen Ausführungsformen empfängt der Befehls-Streamer 154 Befehle aus dem Speicher, interpretiert sie und führt sie aus, um die Ausführungsumgebung für die GPU-Rechenkernels aufzubauen, so dass sie auf den SIMD-EUs ablaufen. In einigen Beispielen enthalten die Befehle Anweisungen, die aus einem Befehlspuffer 184, der Befehle speichert, geholt werden. In einer nachstehend beschriebenen Ausführungsform kann der Befehlspuffer 184 einen Ringpuffer und einen oder mehrere Batch-Befehlspuffer, die Batches aus mehreren Befehlen speichern, umfassen. Die Befehle können außerdem Referenzen auf Daten, die im Speicher gespeichert sind, enthalten, wie z. B., ohne jedoch darauf beschränkt zu sein, Vertex- und Geometrie-Daten für Grafikoperationen.
-
Der Grafikprozessor 150 kann eine Speichermanagementeinheit (MMU) 160 enthalten, die konfiguriert ist, virtuelle Grafikadressen in physikalische Adressen abzubilden. Die MMU 160 enthält eine Gruppe von Seitentabellen, die verwendet werden, um virtuelle Grafikadressen auf physikalische Adressen einer Kachel und optional einen Cache-Zeilenindex abzubilden. Die MMU 160 kann Adressenübersetzungspuffer (Adressen-TLB) 162 zum Zwischenspeichern von Übersetzungen virtueller Grafikadressen auf physikalische Adressen enthalten.
-
In einigen Beispielen können sich der Host 110 und der Grafikprozessor 150 auf separaten Funktionseinheiten befinden, die durch eine Kommunikationsschnittstelle, d. h. eine PCIe-Kommunikationszusammenschaltung, kommunikationstechnisch gekoppelt sein können. In anderen Beispielen können der Host 110 und der Grafikprozessor 150 auf eine einzige Verarbeitungsvorrichtung integriert sein.
-
Im Betrieb verwendet eine Anwendung 130A, 130B, die auf dem Host 110 abläuft, die API, die durch ein Framework wie z. B. OpenCL offengelegt ist, um den Rechenkernel und seine Eingaben und wie der Kernel auf dem Grafikprozessor gestartet werden sollte, zu spezifizieren. Der Anwendermodustreiber (UMD) 132A, 132B übersetzt diese Spezifikation in Befehle, die für den GPU-Befehls-Streamer 154 verständlich sind. Die Befehlspuffer 124, die die Befehle beinhalten, werden in dem Host-Speicher erzeugt und an den Kernelmodustreiber (KMD) 116 übergeben. Der KMD 116 kann diese Befehle prüfen, bevor er eine Meldung an den GPU-Scheduler 152 sendet, dass die Befehle zur Ausführung bereit sind. Der Scheduler 152 wählt einen Befehls-Streamer 154 zum Ausführen der Befehle aus. Der ausgewählte Befehls-Streamer 154 liest jeden Befehl seriell aus dem Speicher, analysiert ihn und führt den Befehl aus. Die Ausführung eines Befehls könnte das Kopieren von Daten aus Speicherbereichen, auf die der Befehl zeigt, in den lokalen Speicher der GPU durch eine DMA-Engine in der GPU beinhalten. Die meisten Befehle in dem Puffer werden verwendet, um die Umgebung für das Ablaufen des Rechenkernels aufzubauen. Spezielle „Kernelstart“-Befehle werden verwendet, um den Kernel schließlich zu den SIMD-Ausführungseinheiten zu verteilen und die Berechnung auszuführen.
-
Befehlspuffer
-
2 ist ein Blockdiagramm, das Beispiele für Befehlspuffer 200 gemäß einer Ausführungsform darstellt. Wie vorstehend erwähnt kann in einigen Beispielen ein Befehlspuffer 200 einen Ringpuffer 210, der einen Befehl speichert, und einen oder mehrere Batch-Puffer 220, 230, 240, 250, die Batches aus mehreren Befehlen, die sich auf den Befehl in dem Ringpuffer 210 beziehen, speichern können, enthalten. Die Befehle in dem Befehlspuffer sind durch Zeiger verknüpft, so dass sie auf eine sequenzielle Weise ausgeführt werden können.
-
Bezug nehmend auf 2 kann ein Befehl in einem Ringpuffer 210 einen Batch-Puffer-Startzeiger (BBS:A), der auf den Startort in einem Batch-Puffer 220 erster Ebene für einen Befehl zeigt. Ähnlich kann der Befehl in dem Batch-Puffer 220 erster Ebene einen Batch-Puffer-Startzeiger (BBS:NXT:B) umfassen, der auf den Startort in einem Batch-Puffer 230 zweiter Ebene zeigt. Der Befehl in dem Batch-Puffer 230 zweiter Ebene kann einen Batch-Puffer-Startzeiger (BBS:NXT:C) umfassen, der auf den Startort in einem Batch-Puffer 240 dritter Ebene zeigt. Der Befehl in dem Batch-Puffer 240 dritter Ebene kann einen Batch-Puffer-Startzeiger (BBS:NXT:D) umfassen, der auf den Startort in einem Batch-Puffer 250 vierter Ebene zeigt.
-
Der Befehl in dem Batch-Puffer 250 vierter Ebene enthält eine Batch-Puffer-Ende- (BBE-) Kennzeichen. Wenn der letzte Befehl in dem Batch-Puffer i fertiggestellt ist, wird die Steuerung an den Befehl in dem vorhergehenden Batch-Puffer (i-1), der dem Befehl folgt, der den Batch-Puffer i gestartet hat, übergeben. Ähnlich enthält ein Befehl in dem Batch-Puffer 240 dritter Ebene ein Batch-Puffer-Ende zeiger- (BBE-) Kennzeichen, ein Befehl in dem Batch-Puffer 230 zweiter Ebene enthält ein Batch-Puffer-Endezeiger- (BBE-) Kennzeichen, und ein Befehl in dem Batch-Puffer 220 erster Ebene enthält ein Batch-Puffer-Endezeiger- (BBE-) Kennzeichen.
-
In einigen Beispielen besitzt der Ringpuffer 210 zwei Zeiger: einen „Tail“-Zeiger und einen „Head“-Zeiger. Software auf der CPU schreibt Befehle an der Adresse, auf die der „Tail“-Zeiger zeigt. Der GPU-Befehls-Streamer verbraucht Befehle aus der Adresse, auf die der „Head“-Zeiger zeigt. Wenn „Head“- und „Tail“-Zeiger-Adressen gleich sind, sind alle Befehle durch die GPU verarbeitet worden.
-
Im Betrieb schreibt der Kernelmodustreiber (KMD) 116 Befehle in den Ringpuffer 210 an dem Ort, auf den der „Tail“-Zeiger zeigt. Der Grafikprozessor 150 verbraucht Befehle an der Position, auf die der „Head“-Zeiger zeigt, und folgt dann den Zeigern durch die verschiedenen Ebenen des Befehlspuffers 200. Die Befehlsausführung beginnt und endet schließlich in dem Ringpuffer der obersten Ebene. In einigen Beispielen kann eine Arbeitslast am Ende eines Batch-Puffers zurückgestellt werden (z. B. durch eine Arbeitslast mit höherer Priorität), bevor die nächste Gruppe von Befehlen ausgeführt wird. In diesem Fall wird der Zustand der Befehlsausführung durch den Grafikprozessor 150 in dem Zustandssicherungsbereich (192) gesichert, so dass er dann, wenn die Arbeitslast wiederaufgenommen wird, die Ausführung des Batch-Puffers fort fortsetzen kann, wo sie unterbrochen wurde.
-
3 ist ein Blockdiagramm, das ein einfaches konkretes Beispiel einer Befehlspufferstruktur gemäß einer Ausführungsform darstellt. Insbesondere stellt 3 einen kleinen Batch-Puffer 300 und sein Layout im Speicher dar. Wie in 3 dargestellt ist, sind einige Befehle (z. B. Vorspannbefehle wie z. B. der PIPE_CONTROL-, PIPELINE_SELECT- und STATE_BASE_ADDRESS-Befehl) in sich geschlossen (d. h. sie beinhalten alle Parameter inline). Diese Befehle können unabhängig ausgeführt werden.
-
Im Gegensatz dazu zeigen andere Befehle (z. B. Kernelbefehle und Verteilungsbefehle) auf Bereiche im Speicher, die Datenpuffer, Deskriptoren usw. enthalten, die gelesen werden müssen, wenn die entsprechenden Befehle ausgeführt werden. Beispielsweise enthält der STATE_SIP-Befehl einen Kernelstartzeiger, der auf die Startadresse des Rechenkernels zeigt. Ähnlich zeigt der MEDIA_INTERFACE_DESCRIPTOR_LOAD-Befehl auf eine Datenstruktur, die als INTERFACE_DESCRIPTOR bezeichnet ist, die Informationen über den Kernel, der zu starten ist, wie z. B. die Kernelstartadresse beinhaltet. In einigen Beispielen kann der Schnittstellendeskriptor außerdem Zeiger auf eine BINDING_STATE_TABLE enthalten. Wenn der Befehls-Streamer 152 den MEDIA_INTERFACE_DESCRIPTOR_LOAD-Befehl liest, folgt er der Zeigeradresse in dem Befehl, um auch den Schnittstellendeskriptor zu lesen und seinen Inhalt aufzuzeichnen.
-
Somit beinhaltet das Schützen der Integrität von Befehlspuffern sowohl das Verifizieren der Integrität eines Befehls als auch das Verifizieren der Integrität von Daten, die im Speicher gespeichert sind und durch den Befehl referenziert werden (z. B. den Schnittstellendeskriptor für den MEDIA_INTERFACE_DESCRIPTOR_LOAD-Befehl).
-
Identifizierungskennzeichendatensatz-Arrays
-
In einer Ausführungsform kann eine Datenstruktur, die hier als ein Identifizierungskennzeichendatensatz-Array (TRA) bezeichnet ist, implementiert sein, um das Bereitstellen der integritätsgeschützten Befehlspufferausführung zu unterstützen. 4 ist ein Blockdiagramm, das eine Identifizierungskennzeichendatensatz-Array-Datenstruktur 400 gemäß einer Ausführungsform darstellt. Bezug nehmend auf 4 kann jeder Befehl 412 in dem Befehlspuffer 410 mit einem Eintrag in einem Identifizierungskennzeichendatensatz-Array 400 logisch verknüpft sein. In einigen Beispielen können die Identifizierungskennzeichendatensatz-Array-Einträge 402 für Befehle in der Reihenfolge, in der die Befehle durch den Befehlsprozessor (d. h. den Grafikprozessor 150) ausgeführt werden sollen, berechnet werden. In dem Fall mehrerer verketteter Befehlspuffer entsprechen die Identifizierungskennzeichendatensätze 402, die in dem Identifizierungskennzeichendatensatz-Array 400 gespeichert sind, der Reihenfolge, in der Befehle über alle verketteten Puffer ausgeführt werden.
-
In einigen Beispielen kann das Identifizierungskennzeichendatensatz-Array 400 in dem Host-Speicher durch den Produzenten des Befehlspuffers gespeichert werden, z. B. in einem vereinheitlichten Speicher, der sowohl für den Host 110 als auch die GPU 150 zugänglich ist. Da das Identifizierungskennzeichendatensatz-Array 400 mehrere nicht zusammenhängende Seiten im Speicher überspannen kann, startet jede Seite, die ein Identifizierungskennzeichendatensatz-Array-Element enthält, mit einem Zeiger auf die nächste Seite, die Identifizierungskennzeichendatensatz-Array-Elemente enthält. Falls dieser Zeigerwert NULL ist, bedeutet das, dass die Seite das letzte Element des Identifizierungskennzeichendatensatz-Array enthält.
-
In einigen Beispielen kann ein Identifizierungskennzeichendatensatz 402 Folgendes umfassen: (1) ein Datensatz-Startfeld, das eine Folge von Bytes enthält, die den Start eines Identifizierungskennzeichendatensatzes angeben; (2) eine Feld für die Anzahl von Einträgen, das eine Anzahl von <Adresse, Länge>-Einträgen enthält, denen in den folgenden Feldern zu folgen ist; (3) eine Anzahl von Adressen- und Längeneinträgen (A1, Len1,... Ak, Lenk), wobei das Adressenfeld der Startadresse eines Speicherbereichs entspricht (d. h. einem Befehl oder Daten, die durch den Befehl referenziert werden), die in der Identifizierungskennzeichenberechnung aufgenommen werden muss, und die Länge der Länge des Speicherbereichs entspricht; (4) ein Integritätsidentifizierungskennzeichenfeld, das ein Integritätsidentifizierungskennzeichen enthält, das über alle im Abschnitt (3) spezifizierten Speicherbereiche berechnet ist; und (5) ein Datensatzende-Feld, das eine Folge von Bytes enthält, die das Ende des Identifizierungskennzeichendatensatzes angibt.
-
Beispielsweise umfasst der in 4 dargestellte Befehl 412 einen Operationscode (OpCode) und eine Folge von Parametern (p1, ... pk, ... pm). Einige der Parameter können Inline-Werte umfassen, die in dem Befehl selbst enthalten sind, während andere Parameter (z. B. pk) auf Werte zeigen, die nicht in dem Befehl enthalten sind. Der Wert des Parameters k ist eine Speicheradresse, die der Start eines Speicherpuffers 414 ist, der durch den Befehl referenziert ist (z. B. der Schnittstellendeskriptor des MEDIA_INTERFACE_DESCRIPTOR_LOAD-Befehls, wie vorstehend beschrieben).
-
In einigen Beispielen kann ein einzelnes Integritätsidentifizierungskennzeichen für den Befehl 412 über die folgende Folge von Bytes berechnet werden:
- (1) <A2, A2 + len1 - 1>: Die Bytes in dem Befehl A2 sind die Adresse des Befehls.
- (2) <Ak, Ak + len2 - 1>: Die Bytes in dem Speicherbereich, der indirekt durch den k-ten Parameter des Befehls referenziert ist (Adresse = Ak). Ak ist die Startadresse des durch den k-ten Parameter referenzierten Speicherbereichs.
-
In einigen Beispielen wird ein Anti-Wiederholungszähler mit dem Ende der Folge von Bytes, die in dem Identifizierungskennzeichendatensatz vor dem Datensatzende-Feld spezifiziert ist, verkettet. In einer Ausführungsform ist der Wert des Anti-Wiederholungszählers ein monoton ansteigender Zähler, die unabhängig von sowohl dem Produzenten des Befehlspuffers (d. h. der Anwenderraum-Software, die in der TEE des Hosts abläuft) als auch seinem Verbraucher geführt wird. Der Zähler startet mit einem bekannten Initialwert (z. B. null), und der Zähler wird für jedes neue Identifizierungskennzeichen, das durch den Produzenten berechnet wird, inkrementiert und wird außerdem für jedes Identifizierungskennzeichen, das durch den Verbraucher auf seiner Seite verifiziert wird, inkrementiert. Das verhindert, dass ein Gegenspieler alte Identifizierungskennzeichen wiederholt oder Befehle innerhalb des Befehlspuffers fallenlässt.
-
Jedoch kann der Gegenspieler selbst mit dem Anti-Wiederholungszähler die letzten n Befehle aus dem Befehlspuffer ohne Detektion fallenlassen, falls das vorstehende Schema zum Berechnen der Identifizierungskennzeichen verwendet wird, da die Identifizierungskennzeichen unabhängig für jeden Befehl berechnet werden und die Gesamtzahl von Befehlen in dem Befehlspuffer nicht erfassen. Um diese Bedrohung zu verringern, wird in einigen Beispielen das Identifizierungskennzeichen des letzten Befehls unterschiedlich berechnet: ein zusätzlicher Wert (d. h. eine Befehlsfolgenummer) wird der Folge von Bytes, die ansonsten verwendet wird, um das Identifizierungskennzeichen zu berechnen vorangestellt. Somit werden, beispielsweise falls ein Befehlspuffer n Befehle aufweist, die Daten, die verwendet werden, um das letzte Identifizierungskennzeichen zu berechnen, mit n, der Folgenummer des letzten Befehls, starten, gefolgt von der Folge von Bytes, die in dem Identifizierungskennzeichendatensatz spezifiziert ist, und dem Wert des Anti-Wiederholungszählers. Das stellt sicher, dass das Fallenlassen von Befehlen am Ende des Befehlspuffers durch den Verifizierer (d. h. den Befehlsprozessor) detektiert wird.
-
Algorithmus für integritätsgeschützte Befehlspufferausführung
-
Nachdem verschiedene Aspekte einer Berechnungsumgebung, die zur integritätsgeschützten Befehlspufferausführung anpassbar ist, beschrieben worden sind, werden verschiedene Operationen, die implementiert werden können, um integritätsgeschützte Befehlspufferausführung bereitzustellen, mit Bezug auf die 5-6 beschrieben. In einigen Beispielen können die in den 5-6 abgebildeten Operationen durch eine Verarbeitungsvorrichtung in einer Berechnungsumgebung 100 implementiert sein.
-
5 ist ein Ablaufplan, der Operationen auf hoher Ebene zum Aufbauen der Datenstrukturen, die notwendig sind, um integritätsgeschützte Befehlspufferausführung bereitzustellen, gemäß einer Ausführungsform darstellt. In einigen Beispielen können die in 5 abgebildeten Operationen durch einen Prozessor im Host 110, z. B. einem Prozessor in einer vertrauenswürdigen Ausführungsumgebung des Hosts 110, implementiert sein. Bezug nehmend auf 5 wird bei Operation 510 ein Befehlspuffer für eine Grafikoperation, die durch eine Grafikverarbeitungseinheit wie z. B. den Grafikprozessor 150 implementiert werden soll, erzeugt. In einigen Beispielen umfasst der Befehlspuffer einen Ringpuffer, der einen Basisbefehl und wenigstens einen Batch-Puffer erster Ebene, der mit dem Ringpuffer durch einen Zeiger verknüpft ist und einen oder mehrere Befehle, die in Zuordnung zu dem Basisbefehl ablaufen, umfasst.
-
Bei Operation 515 wird ein Identifizierungskennzeichendatensatz (TRA) 400 für den Befehlspuffer unter Verwendung eines kryptographischen Schlüssels, der mit dem Grafikprozessor gemeinsam verwendet wird, erzeugt. In einigen Beispielen kann der kryptographische Schlüssel ein symmetrischer Schlüssel sein, der zur Berechnung von Integritätsidentifizierungskennzeichen verwendet wird. In einigen Beispielen umfassen die Identifizierungskennzeichendatensätze in dem Array ein oder mehrere Adressenfelder, die eine Startadresse für einen Befehl in einem Puffer und eine Länge des Befehls, der sich an der Startadresse befindet, identifizieren, und ein Integritätsidentifizierungskennzeichen, das unter Verwendung des mit der Grafikverarbeitungseinheit gemeinsam verwendeten kryptographischen Schlüssels erzeugt wird, den Befehl, Daten in den Adressenfeldern, die durch den Befehl referenziert werden, und den Anti-Wiederholungszähler. Somit ist der Wert des Integritätsschlüssels ein Hash, der über den Befehl, die Befehlsdaten und den Anti-Wiederholungszähler berechnet wird.
-
Bei Operation 520 werden der Befehlspuffer und das Identifizierungskennzeichendatensatz-Array in dem Host-Speicher gespeichert, und bei Operation 525 wird der Anti-Wiederholungszähler initialisiert.
-
6 ist ein Ablaufplan, der Operationen in einem Verfahren zum Bereitstellen von integritätsgeschützter Befehlspufferausführung gemäß einer Ausführungsform darstellt. In einigen Beispielen können die in 6 abgebildeten Operationen durch einen oder mehrere Befehlsprozessoren in dem Grafikprozessor 150 implementiert sein. Bezug nehmend auf 6 werden bei Operation 605 die Befehlsadresse und das Identifizierungskennzeichendatensatz-Array initialisiert. Bei Operation 601 wird der Anti-Wiederholungszähler initialisiert, z. B. auf null. Bei Operation 615 wird ein Befehl aus dem Befehlspuffer gelesen, und der zugeordnete Identifizierungskennzeichendatensatz 402 wird aus dem Identifizierungskennzeichendatensatz-Array 400 gelesen.
-
Falls bei Operation 620 der in Operation 615 gelesene Befehl der letzte Befehl in dem Befehlspuffer ist, dann geht die Steuerung zu Operation 625 über, und ein Integritätsidentifizierungskennzeichen wird unter Verwendung des mit der Grafikverarbeitungseinheit gemeinsam verwendeten kryptographischen Schlüssels, des Befehls, Daten in den Adressenfeldern, die durch den Befehl referenziert sind, und der Identifizierungskennzeichenfolgenummer, die dem letzten Befehl in dem Befehlspuffer vorangestellt ist, wie vorstehend mit Bezug auf 4 beschrieben berechnet. Somit ist der Wert des in Operation 625 berechneten Integritätsschlüssels ein Hash, der über den Befehl, die Befehlsdaten, den Anti-Wiederholungszähler und den vorangestellten Wert berechnet ist.
-
Im Gegensatz dazu geht, falls bei Operation 620 der in Operation 615 gelesene Befehl nicht der letzte Befehl in dem Befehlspuffer ist, dann die Steuerung zu Operation 630 über und ein Integritätsidentifizierungskennzeichen wird unter Verwendung des mit der Grafikverarbeitungseinheit gemeinsam verwendeten kryptographischen Schlüssels, des Befehls, Daten in den Adressenfeldern, die durch den Befehl referenziert sind, und der Identifizierungskennzeichenfolgenummer, die dem letzten Befehl in dem Befehlspuffer vorangestellt ist, wie vorstehend mit Bezug auf 4 beschrieben berechnet. Somit ist der Wert des in Operation 630 berechneten Integritätsschlüssels ein Hash, der über den Befehl, die Befehlsdaten und den Anti-Wiederholungszähler berechnet wird.
-
Bei Operation 635 wird bestimmt, ob das durch den Grafikprozessor 150 in Operation 615 berechnete Integritätsidentifizierungskennzeichen mit dem durch den Host 110 in Operation 515 berechneten Integritätsidentifizierungskennzeichen übereinstimmt. In einigen Beispielen kann der Grafikprozessor 150 die Integritätsidentifizierungskennzeichen vergleichen, um diese Bestimmung vorzunehmen. Falls bei Operation 635 die Integritätsidentifizierungskennzeichen nicht übereinstimmen, dann kann abgeleitet werden, dass der Befehlspuffer beschädigt worden ist, möglicherweise als ein Ergebnis eines Angriffs durch einen böswilligen Akteur. In diesem Fall geht die Steuerung zu Operation 640 über, und die Ausführung des Befehls wird abgebrochen. In einigen Beispielen kann der Grafikprozessor ein Signal erzeugen, um den Host 110 zu informieren, dass der Befehl abgebrochen wurde. Im Gegensatz dazu kann, falls bei Operation 635 eine Übereinstimmung ist, abgeleitet werden, dass der Befehlspuffer nicht beschädigt worden ist. In diesem Fall geht die Steuerung zu Operation 645 über, und der Grafikprozessor 150 führt den Befehl in Übereinstimmung mit normalen Verarbeitungsprozeduren aus.
-
Bei Operation 650 wird bestimmt, ob der in Operation 645 ausgeführte Befehl der letzte Befehl in dem Befehlspuffer war. Falls bei Operation 650 bestimmt wird, dass der Befehl der letzte Befehl war, dann geht die Steuerung zu Operation 655 über, und die Befehlspufferausführung ist fertiggestellt. Im Gegensatz dazu geht, falls bei Operation 650 bestimmt wird, dass der Befehl nicht der letzte Befehl war, die Steuerung zu Operation 660 über, und die Speicheradressen für den nächsten Befehl in dem Befehlspuffer 200 und der nächste Identifizierungskennzeichendatensatz in dem Identifizierungskennzeichendatensatz-Array 400 werden aktualisiert. Bei Operation 665 wird der Anti-Wiederholungszähler inkrementiert, und die Steuerung geht zurück zu Operation 605, um die Operationen in 6 zu wiederholen.
-
Beispielhafte Berechnungsarchitektur
-
7 ist ein Blockdiagramm, das eine Berechnungsarchitektur, die dafür ausgelegt sein kann, einen Dienst zur sicheren Adressenübersetzung unter Verwendung einer Genehmigungstabelle (z. B. HPT 135 oder HPT 260) und basierend auf einem Kontext einer anfordernden Vorrichtung zu implementieren, in Übereinstimmung mit einigen Beispielen darstellt. Die Ausführungsformen können eine Berechnungsarchitektur enthalten, die eines oder mehrere aus (i) Verifizierung von Zugangsberechtigungen für eine übersetzte Anforderung vor dem Erlauben, dass eine Speicheroperation fortfährt; (ii) Vorabholen von Seitengenehmigungseinträgen einer HPT in Reaktion auf eine Übersetzungsanforderung; und (iii) Unterstützen des dynamischen Aufbaus der HPT-Seitengenehmigungen durch System-Software wie vorstehend beschrieben.
-
In verschiedenen Ausführungsformen kann die Berechnungsarchitektur 700 einen Teil einer elektronischen Vorrichtung umfassen oder als ein Teil davon implementiert sein. In einigen Ausführungsformen kann die Berechnungsarchitektur 700 beispielsweise für ein Computersystem, das eine oder mehrere Komponenten der vorstehend beschriebenen Betriebsumgebungen implementiert, repräsentativ sein. In einigen Ausführungsformen kann die Berechnungsarchitektur 700 für einen oder mehrere Abschnitte oder Komponenten zur Unterstützung eines Dienstes zur sicheren Adressenübersetzung, die eine oder mehrere der hier beschriebenen Techniken implementiert, repräsentativ sein.
-
Wie sie in dieser Anmeldung verwendet sind, sollen sich die Begriffe „System“ und „Komponente“ und „Modul“ auf eine computerbezogene Entität beziehen, entweder Hardware, eine Kombination aus Hardware und Software, Software, oder ablaufende Software, wofür Beispiele durch die beispielhafte Berechnungsarchitektur 700 bereitgestellt sind. Beispielsweise kann eine Komponente, ohne jedoch darauf beschränkt zu sein, ein Prozess, der auf einem Prozessor abläuft, ein Prozessor, ein Festkörperlaufwerk oder Festkörperlaufwerk (SSD), mehrere Speicherlaufwerke (für optische und/oder magnetische Speichermedien), ein Objekt, eine ausführbare Datei, ein Ausführungs-Thread, ein Programm und/oder ein Computer sein. Zur Erläuterung kann sowohl eine Anwendung, die auf einem Server abläuft, als auch der Server eine Komponente sein. Eine oder mehrere Komponenten können innerhalb eines Prozesses und/oder Ausführungs-Threads resident sein, und eine Komponente kann sich auf einem Computer befinden und/oder zwischen zwei oder mehr Computern verteilt sein. Ferner können Komponenten durch verschiedene Typen von Kommunikationsmedien kommunikationstechnisch miteinander gekoppelt sein, um Operationen zu koordinieren. Die Koordination kann den unidirektionalen oder bidirektionalen Austausch von Informationen beinhalten. Beispielsweise können die Komponenten Informationen in Form von Signalen, die über die Kommunikationsmedien kommuniziert werden, kommunizieren. Die Informationen können als Signale, die verschiedenen Signalleitungen zugewiesen sind, implementiert sein. In solchen Zuweisungen ist jede Nachricht ein Signal. Weitere Ausführungsformen können jedoch alternativ Datennachrichten einsetzen. Solche Datennachrichten können über verschiedene Verbindungen gesendet werden. Beispielhafte Verbindungen enthalten parallele Schnittstellen, serielle Schnittstellen und Busschnittstellen.
-
Die Berechnungsarchitektur 700 enthält verschiedene übliche Berechnungselemente, wie z. B. einen oder mehrere Prozessoren, Mehrkernprozessoren, Coprozessoren, Speichereinheiten, Chipsätze, Steuereinheiten, Peripheriegeräte, Schnittstellen, Oszillatoren, Zeitgebervorrichtungen, Videokarten, Audiokarten, Multimedia-Eingabe/Ausgabe- (I/O-) Komponenten, Stromversorgungen und so weiter. Die Ausführungsformen sind jedoch nicht auf die Implementierung durch die Berechnungsarchitektur 700 beschränkt.
-
Wie in 7 gezeigt ist, enthält die Berechnungsarchitektur 700 einen oder mehrere Prozessoren 702 und einen oder mehrere Grafikprozessoren 708 und kann ein Einzelprozessor-Desktop-System, ein Mehrprozessor-Arbeitsplatzrechnersystem oder ein Serversystem, das eine große Anzahl von Prozessoren 702 oder Prozessorkernen 707 aufweist, sein. In einer Ausführungsform ist das System 700 eine Verarbeitungsplattform, die in einer integrierten Schaltung eines Ein-Chip-Systems (SoC oder SOC) zum Gebrauch in mobilen, tragbaren oder eingebetteten Vorrichtungen integriert ist.
-
Eine Ausführungsform des Systems 700 kann eine serverbasierte Spiele-Plattform, eine Spielekonsole, die eine Spiele- und Medienkonsole, eine mobile Spielekonsole, eine tragbare Spielekonsole oder eine Online-Spielekonsole enthält, enthalten oder darin integriert sein. In einigen Ausführungsformen ist das System 700 ein Mobiltelefon, ein Smartphone, eine Tablet-Berechnungsvorrichtung oder eine Vorrichtung für mobiles Internet. Das Datenverarbeitungssystem 700 kann außerdem eine am Körper tragbare Vorrichtung wie z. B. eine tragbare Vorrichtung mit Smartwatch, eine intelligente Brillenvorrichtung, eine Vorrichtung für erweiterte Realität oder eine Vorrichtung für virtuelle Realität enthalten, damit gekoppelt sein oder darin integriert sein. In einigen Ausführungsformen ist das Datenverarbeitungssystem 700 ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung, das/die einen oder mehrere Prozessoren 702 und eine Grafikschnittstelle, die durch einen oder mehrere Grafikprozessoren 708 erzeugt wird, aufweist.
-
In einigen Ausführungsformen enthalten der eine oder die mehreren Prozessoren 702 jeweils einen oder mehrere Prozessorkerne 707 zum Verarbeiten von Befehlen, die dann, wenn sie ausgeführt werden, Operationen für System- und Anwender-Software ausführen. In einigen Ausführungsformen ist jeder aus dem einen oder den mehreren Prozessorkernen 707 konfiguriert, einen spezifischen Befehlssatz 714 zu verarbeiten. In einigen Ausführungsformen kann der Befehlssatz 709 Berechnung mit einem komplexen Befehlssatz (CISC), Berechnung mit einem reduzierten Befehlssatz (RISC), oder Berechnung über ein sehr langes Befehlswort (VLIW) unterstützen. Mehrere Prozessorkerne 707 können jeweils einen anderen Befehlssatz 709 unterstützen, der Befehle enthalten kann, um die Emulation anderer Befehlssätze zu ermöglichen. Der Prozessorkern 707 kann außerdem andere Verarbeitungsvorrichtungen wie z. B. einen digitalen Signalprozessor (DSP) enthalten.
-
In einigen Ausführungsformen enthält der Prozessor 702 einen Cache-Speicher 704. Abhängig von der Architektur kann der Prozessor 702 einen einzigen internen Cache oder mehrere Ebenen von internem Cache aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 702 gemeinsam verwendet. In einigen Ausführungsformen verwendet der Prozessor 702 außerdem einen externen Cache (z. B. einen Ebene-3- (L3-) Cache oder einen Cache letzter Ebenen (LLC)) (nicht gezeigt), der von den Prozessorkernen 707 unter Verwendung bekannter Cache-Kohärenztechniken gemeinsam verwendet werden kann. Eine Registerdatei 706 ist zusätzlich in dem Prozessor 702 enthalten und kann unterschiedliche Typen von Registern zum Speichern unterschiedlicher Typen von Daten enthalten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und Befehlszeigerregister). Einige Register können Allzweckregister sein, während andere Register für das Design des Prozessors 702 spezifisch sein können.
-
In einigen Ausführungsformen ist/sind ein oder mehrere Prozessor(en) 702 mit einem oder mehreren Schnittstellenbus(sen) 710 gekoppelt, um Kommunikationssignale wie z. B. Adressen, Daten oder Steuersignale zwischen dem Prozessor 702 und anderen Komponenten in dem System zu übertragen. Der Schnittstellenbus 710 kann in einer Ausführungsform ein Prozessorbus sein, wie z. B. eine Version des „Direct Media Interface“- (DMI-) Busses. Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere „Peripheral Component Interconnect“-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Typen von Schnittstellenbussen enthalten. In einer Ausführungsform enthält/enthalten der/die Prozessor(en)(702) eine integrierte Speichersteuereinheit 716 und einen Plattformsteuereinheit-Hub 730. Die Speichersteuereinheit 716 unterstützt die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 700, während der Plattformsteuereinheit-Hub (PCH) 730 Verbindungen zu I/O-Vorrichtungen über einen lokalen I/O-Bus bereitstellt.
-
Die Speichervorrichtung 720 kann eine Vorrichtung mit dynamischem Direktzugriffsspeicher (DRAM), eine Vorrichtung mit statischem Direktzugriffsspeicher (SRAM), eine Flash-Speichervorrichtung, eine Phasenwechselspeichervorrichtung oder eine andere Speichervorrichtung, die eine geeignete Leistungsfähigkeit aufweist, um als Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung 720 als Systemspeicher für das System 700 arbeiten, um Daten 722 und Befehle 721 zum Gebrauch, wenn der eine oder die mehreren Prozessoren 702 eine Anwendung oder einen Prozess ausführen, zu speichern. Der Speichersteuereinheit-Hub 716 ist außerdem mit einem optionalen externen Grafikprozessor 712 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 708 in den Prozessoren 702 kommunizieren kann, um Grafik- und Medienoperationen auszuführen. In einigen Ausführungsformen kann eine Anzeigevorrichtung 711 mit dem/den Prozessor(en) 702 verbunden sein. Die Anzeigevorrichtung 711 kann eine oder mehrere aus einer internen Anzeigevorrichtung wie z. B. in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung oder einer externen Vorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 711 eine am Kopf getragene Anzeigevorrichtung (HMD) sein, wie z. B. eine stereoskopische Anzeigevorrichtung zum Gebrauch für Anwendungen für virtuelle Realität (VR) oder Anwendungen für erweiterte Realität (AR).
-
In einigen Ausführungsformen ermöglicht der Plattformsteuereinheit-Hub 730, dass sich Peripheriegeräte mit der Speichervorrichtung 720 und dem Prozessor 702 über einen Hochgeschwindigkeits-I/O-Bus verbinden. Die I/O-Peripheriegeräte enthalten, ohne jedoch darauf beschränkt zu sein, eine Audio-Steuereinheit 746, eine Netzsteuereinheit 734, eine Firmware-Schnittstelle 728, einen Drahtlos-Sender/Empfänger 726, Berührungssensoren 725, eine Datenspeichervorrichtung 724 (z. B. ein Festplattenlaufwerk, einen Flash-Speicher usw.). Die Datenspeichervorrichtung 724 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripherie-Bus wie z. B. einen „Peripheral Component Interconnect“-Bus (z. B. PCI, PCI Express) verbunden sein. Die Berührungssensoren 725 können Sensoren eines berührungssensitiven Bildschirms, Drucksensoren oder Fingerabdrucksensoren enthalten. Der Drahtlos-Sender/Empfänger 726 kann ein Wi-Fi-Sender/Empfänger, ein Bluetooth-Sender/Empfänger oder ein Sender/Empfänger eines Mobilfunknetzes sein, wie z. B. ein 3G-, 4G-, Langzeitentwicklungs- (LTE-) oder 5G-Sender/Empfänger. Die Firmware-Schnittstelle 728 ermöglicht Kommunikation mit der System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Die Netzsteuereinheit 734 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen ist eine Hochleistungs-Netzsteuereinheit (nicht gezeigt) mit dem Schnittstellenbus 710 gekoppelt. Die Audio-Steuereinheit 746 ist in einer Ausführungsform eine hochauflösende Mehrkanal-Audio-Steuereinheit. In einer Ausführungsform enthält das System 700 eine optionale alte I/0-Steuereinheit 740 zum Koppeln alter (z. B. Personalsystem 2- (PS/2-)) Vorrichtungen mit dem System. Der Plattformsteuereinheit-Hub 730 kann außerdem mit einer oder mehreren Steuereinheiten 742 für den universellen seriellen Bus (USB) verbinden, die Eingabevorrichtungen, wie z. B. Tastatur- und Maus-Kombinationen 743, eine Kamera 744 oder andere USB-Eingabevorrichtungen verbinden.
-
Die folgenden Abschnitte und/oder Beispiele gehören zu weiteren Ausführungsformen oder Beispielen. Spezifika in den Beispielen können an jeder Stelle in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der unterschiedlichen Ausführungsformen oder Beispiele können auf verschiedene Weise kombiniert sein, wobei einige Merkmale enthalten und andere ausgeschlossen sind, um für eine Vielzahl unterschiedlicher Anwendungen geeignet zu sein. Beispiele können einen Gegenstand wie z. B. ein Verfahren, Mittel zum Ausführen von Aktionen des Verfahrens, wenigstens ein maschinenlesbares Medium, das Anweisungen enthält, die dann, wenn sie durch eine Maschine ausgeführt werden, die Maschine veranlassen, Aktionen des Verfahrens oder einer Einrichtung oder eines Systems zum Unterstützen hybrider Kommunikation gemäß Ausführungsformen und Beispielen, die hier beschrieben sind, auszuführe, enthalten.
-
Einige Ausführungsformen gehören zu Beispiel 1, das eine Einrichtung enthält, die einen computerlesbaren Speicher, der einen oder mehrere Befehlspuffer umfasst, und eine Verarbeitungsvorrichtung, die mit dem computerlesbaren Speicher kommunikationstechnisch gekoppelt ist, umfasst zum Lesen aus dem Befehlspuffer des computerlesbaren Speichers eines ersten Befehls, der von einer Host-Vorrichtung empfangen wird, wobei der erste Befehl durch ein oder mehrere Verarbeitungselemente auf der Verarbeitungsvorrichtung ausführbar ist, wobei der erste Befehl eine Anweisung und zugeordnete Parameterdaten umfasst; Berechnen eines ersten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung eines kryptographischen Schlüssels, der der Host-Vorrichtung zugeordnet ist, der Anweisung und wenigstens eines Abschnitts der Parameterdaten; und Authentifizieren des ersten Befehls durch Vergleichen des ersten Authentifizierungsidentifizierungs-Kennzeichens mit einem zweiten Authentifizierungsidentifizierungs-Kennzeichen, das durch die Host-Vorrichtung berechnet ist und dem Befehl zugeordnet ist.
-
Beispiel 2 enthält den Gegenstand von Beispiel 1, wobei die Verarbeitungsvorrichtung zum Initialisieren eines Anti-Wiederholungszählers vor dem Lesen des ersten Befehls aus dem Befehlspuffer dient.
-
Beispiel 3 enthält den Gegenstand der Beispiele 1-2, wobei die Verarbeitungsvorrichtung zum Berechnen des ersten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung wenigstens eines Abschnitts des Anti-Wiederholungszählers dient.
-
Beispiel 4 enthält den Gegenstand der Beispiele 1-3, wobei die Verarbeitungsvorrichtung zum Ausführen des ersten Befehls, wenn das erste Authentifizierungsidentifizierungs-Kennzeichen mit dem zweiten Authentifizierungsidentifizierungs-Kennzeichen übereinstimmt, dient.
-
Beispiel 5 enthält den Gegenstand der Beispiele 1-4, wobei die Verarbeitungsvorrichtung zum Inkrementieren des Anti-Wiederholungszählers, nachdem der erste Befehl ausgeführt wird, dient.
-
Beispiel 6 enthält den Gegenstand der Beispiele 1-4, wobei die Verarbeitungsvorrichtung zum Abbrechen der Ausführung des ersten Befehls dient, wenn das erste Authentifizierungsidentifizierungs-Kennzeichen nicht mit dem zweiten Authentifizierungsidentifizierungs-Kennzeichen übereinstimmt.
-
Beispiel 7 enthält den Gegenstand von Beispiel 6, wobei die Verarbeitungsvorrichtung zum Lesen eines zweiten Befehls, der von der Host-Vorrichtung empfangen wird, aus dem Befehlspuffer des computerlesbaren Speichers, wobei der zweite Befehl durch ein oder mehrere Verarbeitungselemente auf der Verarbeitungsvorrichtung ausführbar ist, wobei der zweite Befehl eine Anweisung und zugeordnete Parameterdaten umfasst; Berechnen eines zweiten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung eines kryptographischen Schlüssels, der der Host-Vorrichtung zugeordnet ist, der Anweisung der wenigstens eines Abschnitts der Parameterdaten; und Authentifizieren des zweiten Befehls durch Vergleichen des ersten Authentifizierungsidentifizierungs-Kennzeichens mit einem zweiten Authentifizierungsidentifizierungs-Kennzeichen, das durch die Host-Vorrichtung berechnet ist und dem Befehl zugeordnet ist, dient.
-
Beispiel 8 enthält ein computerimplementiertes Verfahren, das Lesen eines ersten Befehls, der von einer Host-Vorrichtung empfangen wird, aus einem Befehlspuffer eines computerlesbaren Speichers, wobei der erste Befehl durch ein oder mehrere Verarbeitungselemente auf der Verarbeitungsvorrichtung ausführbar ist, wobei der erste Befehl eine Anweisung und zugeordnete Parameterdaten umfasst; Berechnen eines ersten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung eines kryptographischen Schlüssels, der der Host-Vorrichtung zugeordnet ist, der Anweisung und wenigstens eines Abschnitts der Parameterdaten; und Authentifizieren des ersten Befehls durch Vergleichen des ersten Authentifizierungsidentifizierungs-Kennzeichens mit einem zweiten Authentifizierungsidentifizierungs-Kennzeichen, das durch die Host-Vorrichtung berechnet ist und dem Befehl zugeordnet ist, umfasst.
-
Beispiel 9 enthält den Gegenstand von Beispiel 8, der ferner das Initialisieren eines Anti-Wiederholungszählers vor dem Lesen des ersten Befehls aus dem Befehlspuffer umfasst.
-
Beispiel 10 enthält den Gegenstand der Beispiele 8-9, der ferner das Berechnen des ersten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung wenigstens eines Abschnitts des Anti-Wiederholungszählers umfasst.
-
Beispiel 11 enthält den Gegenstand der Beispiele 8-10, der ferner das Ausführen des ersten Befehls, wenn das erste Authentifizierungsidentifizierungs-Kennzeichen mit dem zweiten Authentifizierungsidentifizierungs-Kennzeichen übereinstimmt, umfasst.
-
Beispiel 12 enthält den Gegenstand der Beispiele 8-11, der ferner das Inkrementieren des Anti-Wiederholungszählers, nachdem der erste Befehl ausgeführt wird, umfasst.
-
Beispiel 13 enthält den Gegenstand der Beispiele 8-12, der ferner das Abbrechen der Ausführung des ersten Befehls, wenn das erste Authentifizierungsidentifizierungs-Kennzeichen nicht mit dem zweiten Authentifizierungsidentifizierungs-Kennzeichen übereinstimmt, umfasst.
-
Beispiel 14 enthält den Gegenstand der Beispiele 8-13, der ferner das Lesen eines zweiten Befehls, der von der Host-Vorrichtung empfangen wird, aus dem Befehlspuffer des computerlesbaren Speichers, wobei der zweite Befehl durch ein oder mehrere Verarbeitungselemente auf der Verarbeitungsvorrichtung ausführbar ist, wobei der zweite Befehl eine Anweisung und zugeordnete Parameterdaten umfasst; Berechnen eines zweiten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung eines kryptographischen Schlüssels, der der Host-Vorrichtung zugeordnet ist, der Anweisung der wenigstens eines Abschnitts der Parameterdaten; und Authentifizieren des zweiten Befehls durch Vergleichen des ersten Authentifizierungsidentifizierungs-Kennzeichens mit einem zweiten Authentifizierungsidentifizierungs-Kennzeichen, das durch die Host-Vorrichtung berechnet ist und dem Befehl zugeordnet ist, umfasst.
-
Beispiel 15 enthält ein oder mehrere nicht-transitorische computerlesbare Speichermedien, die darauf gespeichert ausführbare Computerprogrammanweisungen aufweisen, die dann wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen zum Lesen eines ersten Befehls, der von einer Host-Vorrichtung empfangen wird, aus einem Befehlspuffer eines computerlesbaren Speichers, wobei der erste Befehl durch ein oder mehrere Verarbeitungselemente auf der Verarbeitungsvorrichtung ausführbar ist, wobei der erste Befehl eine Anweisung und zugeordnete Parameterdaten umfasst; Berechnen eines ersten Authentifizierungsidentifizierungs-Kennzeichens unter Verwendung eines kryptographischen Schlüssels, der der Host-Vorrichtung zugeordnet ist, der Anweisung und wenigstens eines Abschnitts der Parameterdaten; und Authentifizieren des ersten Befehls durch Vergleichen des ersten Authentifizierungsidentifizierungs-Kennzeichens mit einem zweiten Authentifizierungsidentifizierungs-Kennzeichen, das durch die Host-Vorrichtung berechnet ist und dem Befehl zugeordnet ist.
-
Beispiel 16 enthält den Gegenstand von Beispiel 15, der ferner Anweisungen umfasst, die dann, wenn sie durch den Prozessor ausgeführt werden, den Prozessor konfigurieren, den Anti-Wiederholungszähler vor dem Lesen des ersten Befehls aus dem Befehlspuffer zu initialisieren.
-
Beispiel 17 enthält den Gegenstand der Beispiele 15-16, der ferner Anweisungen umfasst, die dann, wenn sie durch den Prozessor ausgeführt werden, den Prozessor konfigurieren, das erste Authentifizierungsidentifizierungs-Kennzeichen unter Verwendung wenigstens eines Abschnitts des Anti-Wiederholungszählers zu berechnen.
-
Beispiel 18 enthält den Gegenstand der Beispiele 15-18, der ferner Anweisungen umfasst, die dann, wenn sie durch den Prozessor ausgeführt werden, den Prozessor konfigurieren, den ersten Befehl auszuführen, wenn das erste Authentifizierungsidentifizierungs-Kennzeichen mit dem zweiten Authentifizierungsidentifizierungs-Kennzeichen übereinstimmt.
-
Beispiel 19 enthält den Gegenstand der Beispiele 15-17, der ferner Anweisungen umfasst, die dann, wenn sie durch den Prozessor ausgeführt werden, den Prozessor konfigurieren, den Anti-Wiederholungszähler zu inkrementieren, nachdem der erste Befehl ausgeführt wird.
-
Beispiel 20 enthält den Gegenstand der Beispiele 15-19, der ferner Anweisungen umfasst, die dann, wenn sie durch den Prozessor ausgeführt werden, den Prozessor konfigurieren, die Ausführung des ersten Befehls abzubrechen, wenn das erste Authentifizierungsidentifizierungs-Kennzeichen nicht mit dem zweiten Authentifizierungsidentifizierungs-Kennzeichen übereinstimmt.
-
Beispiel 21 enthält den Gegenstand der Beispiele 15-19, der ferner Anweisungen umfasst, die dann, wenn sie durch den Prozessor ausgeführt werden, den Prozessor konfigurieren, einen zweiten Befehl, der von der Host-Vorrichtung empfangen wird, aus dem Befehlspuffer des computerlesbaren Speichers zu lesen, wobei der zweite Befehl durch ein oder mehrere Verarbeitungselemente auf der Verarbeitungsvorrichtung ausführbar ist, wobei der zweite Befehl eine Anweisung und zugeordnete Parameterdaten umfasst; ein zweites Authentifizierungsidentifizierungs-Kennzeichen unter Verwendung eines kryptographischen Schlüssels, der der Host-Vorrichtung zugeordnet ist, der Anweisung und wenigstens eines Abschnitts der Parameterdaten zu berechnen; und den zweiten Befehl durch Vergleichen des ersten Authentifizierungsidentifizierungs-Kennzeichens mit einem zweiten Authentifizierungsidentifizierungs-Kennzeichen, das durch die Host-Vorrichtung berechnet ist und dem Befehl zugeordnet ist, zu authentifizieren.
-
Beispiel 22 enthält ein computerimplementiertes Verfahren, das Erzeugen in einer Verarbeitungsvorrichtung eines Befehlspuffers für eine Grafikoperation, die durch eine mit der Einrichtung kommunikationstechnische gekoppelte Grafikverarbeitungseinheit ausgeführt werden soll; Erzeugen in der Verarbeitungsvorrichtung eines Identifizierungskennzeichendatensatz-Array für den Befehlspuffer unter Verwendung eines kryptographischen Schlüssels, der mit der Grafikverarbeitungseinheit gemeinsam verwendet wird; und Speichern des Befehlspuffers und des Identifizierungskennzeichendatensatz-Array in einem mit der Einrichtung kommunikationstechnisch gekoppelten Speicher umfasst.
-
Beispiel 23 enthält den Gegenstand von Beispiel 22, wobei der Befehlspuffer einen Ringpuffer, der einen Basisbefehl umfasst; und wenigstens einen ersten Batch-Puffer, der mit dem Ringpuffer durch einen ersten Zeiger verknüpft ist und einen oder mehrere Befehle umfasst, die in Zuordnung mit dem Basisbefehl ablaufen, umfasst.
-
Beispiel 24 enthält den Gegenstand der Beispiele 21-23, wobei das Identifizierungskennzeichendatensatz-Array ein oder mehrere Adressenfelder, die eine Startadresse für einen Befehl in einem Puffer und eine Länge des Befehls, der sich an der Startadresse befindet, identifizieren; und ein Authentifizierungsidentifizierungs-Kennzeichen, das unter Verwendung des kryptographischen Schlüssels, der mit der Grafikverarbeitungseinheit gemeinsam verwendet wird, und von Daten in dem einen oder den mehreren Adressenfelder erzeugt wird, umfasst.
-
Beispiel 25 enthält ein computerimplementiertes Verfahren, das Erzeugen in einer Verarbeitungsvorrichtung eines Befehlspuffers für eine Grafikoperation, die durch eine mit der Einrichtung kommunikationstechnische gekoppelte Grafikverarbeitungseinheit ausgeführt werden soll; Erzeugen in der Verarbeitungsvorrichtung eines Identifizierungskennzeichendatensatz-Array für den Befehlspuffer unter Verwendung eines kryptographischen Schlüssels, der mit der Grafikverarbeitungseinheit gemeinsam verwendet wird; und Speichern des Befehlspuffers und des Identifizierungskennzeichendatensatz-Array in einem mit der Einrichtung kommunikationstechnisch gekoppelten Speicher umfasst.
-
Beispiel 26 enthält den Gegenstand von Beispiel 25, wobei der Befehlspuffer einen Ringpuffer, der einen Basisbefehl umfasst; und wenigstens einen ersten Batch-Puffer, der mit dem Ringpuffer durch einen ersten Zeiger verknüpft ist und einen oder mehrere Befehle umfasst, die in Zuordnung mit dem Basisbefehl ablaufen, umfasst.
-
Beispiel 27 enthält den Gegenstand der Beispiele 25-26, wobei das Identifizierungskennzeichendatensatz-Array ein oder mehrere Adressenfelder, die eine Startadresse für einen Befehl in einem Puffer und eine Länge des Befehls, der sich an der Startadresse befindet, identifizieren; und ein Authentifizierungsidentifizierungs-Kennzeichen, das unter Verwendung des kryptographischen Schlüssels, der mit der Grafikverarbeitungseinheit gemeinsam verwendet wird, und von Daten in dem einen oder den mehreren Adressenfelder erzeugt wird, umfasst.
-
Beispiel 28 enthält ein nicht-transitorisches computerlesbares Medium, das Anweisungen umfasst, die dann, wenn sie durch einen Prozessor ausgeführt werden, den Prozessor konfigurieren zum Erzeugen in einer Verarbeitungsvorrichtung eines Befehlspuffers für eine Grafikoperation, die durch eine mit der Einrichtung kommunikationstechnisch gekoppelte Grafikverarbeitungseinheit ausgeführt werden soll; Erzeugen in der Verarbeitungsvorrichtung eines Identifizierungskennzeichendatensatz-Array für den Befehlspuffer unter Verwendung eines kryptographischen Schlüssels, der mit der Grafikverarbeitungseinheit gemeinsam verwendet wird; und Speichern des Befehlspuffers und des Identifizierungskennzeichendatensatz-Array in einem mit der Einrichtung kommunikationstechnisch gekoppelten Speicher.
-
Beispiel 29 enthält den Gegenstand von Beispiel 28, wobei der Befehlspuffer einen Ringpuffer, der einen Basisbefehl umfasst; und wenigstens einen ersten Batch-Puffer, der mit dem Ringpuffer durch einen ersten Zeiger verknüpft ist und einen oder mehrere Befehle umfasst, die in Zuordnung mit dem Basisbefehl ablaufen, umfasst.
-
Beispiel 30 enthält den Gegenstand der Beispiele 28-29, wobei das Identifizierungskennzeichendatensatz-Array ein oder mehrere Adressenfelder, die eine Startadresse für einen Befehl in einem Puffer und eine Länge des Befehls, der sich an der Startadresse befindet, identifizieren; und ein Authentifizierungsidentifizierungs-Kennzeichen, das unter Verwendung des kryptographischen Schlüssels, der mit der Grafikverarbeitungseinheit gemeinsam verwendet wird, und von Daten in dem einen oder den mehreren Adressenfelder erzeugt wird, umfasst.
-
In der vorstehenden Beschreibung sind zum Zweck der Erläuterung zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der beschriebenen Ausführungsformen zu ermöglichen. Es wird jedoch für einen Fachmann offensichtlich sein, dass Ausführungsformen ohne einige dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind bekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt. Zwischen dargestellten Komponenten können dazwischen liegende Strukturen vorhanden sein. Die hier beschriebenen oder dargestellten Komponenten können zusätzliche Eingaben oder Ausgaben aufweisen, die nicht dargestellt oder beschrieben sind.
-
Verschiedene Ausführungsformen können verschiedene Prozesse enthalten. Diese Prozesse können durch Hardware-Komponenten ausgeführt werden oder können in einem Computerprogramm oder durch eine Maschine ausführbare Anweisungen, die verwendet werden können, um einen Allzweck- oder Spezialprozessor oder Logikschaltungen, die mit den Anweisungen programmiert sind, zu veranlassen, die Prozesse auszuführen, verwirklicht sein. Alternativ können die Prozesse durch eine Kombination aus Hardware und Software ausgeführt werden.
-
Abschnitte verschiedener Ausführungsformen können als ein Computerprogrammprodukt bereitgestellt sein, das ein computerlesbares Medium enthalten kann, das darauf gespeichert Computerprogrammanweisungen aufweist, die verwendet werden können, um einen Computer (oder andere elektronische Vorrichtungen) zur Ausführung durch einen oder mehrere Prozessoren zu programmieren, um einen Prozess gemäß speziellen Ausführungsformen auszuführen. Das computerlesbare Medium kann, ohne jedoch darauf beschränkt zu sein, Magnetplatten, optische Platten, Festwertspeicher (ROM), Direktzugriffsspeicher (RAM), löschbaren programmierbaren Festwertspeicher (EPROM), elektrisch löschbaren programmierbaren Festwertspeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder einen anderen Typ eines computerlesbaren Mediums, der zum Speichern elektronischer Anweisungen geeignet ist, enthalten. Außerdem können Ausführungsformen auch als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer zu einem anfordernden Computer übertragen werden kann.
-
Viele der Verfahren sind in ihrer grundlegendsten Form beschrieben worden, es können jedoch Prozesse zu irgendeinem der Verfahren hinzugefügt oder aus ihm gelöscht werden, und Informationen können zu irgendeiner der beschriebenen Nachrichten hinzugefügt oder von ihr weggenommen werden, ohne von dem grundlegenden Schutzbereich der vorliegenden Ausführungsformen abzuweichen. Es wird für Fachleute offensichtlich sein, dass viele weitere Modifikationen und Anpassungen vorgenommen werden können. Die speziellen Ausführungsformen sind nicht dafür vorgesehen, das Konzept einzuschränken, sondern dafür, es zu erläutern. Der Schutzbereich der Ausführungsformen ist nicht durch die spezifischen vorstehend bereitgestellten Beispiele zu bestimmen, sondern nur durch die nachstehenden Ansprüche.
-
Falls gesagt ist, dass ein Element „A“ an das oder mit dem Element „B“ gekoppelt ist, kann das Element A direkt mit dem Element B gekoppelt sein oder kann indirekt, beispielsweise über ein Element C, gekoppelt sein. Wenn die Spezifikation oder die Ansprüche feststellen, dass eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder eine Eigenschaft A eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder eine Eigenschaft B „veranlassen“, bedeutet das, dass „A“ wenigstens teilweise eine Veranlassung für „B“ ist, es kann jedoch außerdem wenigstens ein/e andere/s/r Komponente, Merkmal, Struktur, Prozess oder Eigenschaft vorhanden sein, die das Veranlassen von „B“ unterstützen. Falls die Spezifikation angibt, dass eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder eine Eigenschaft enthalten sein „kann“ oder „könnte“, ist es nicht erforderlich, dass die/das/der spezielle Komponente, Merkmal, Struktur, Prozess oder Eigenschaft enthalten ist. Falls die sich Spezifikation oder der Anspruch auf „ein“ Element bezieht, bedeutet das nicht, dass nur eines der beschriebenen Elemente vorhanden ist.
-
Eine Ausführungsform ist eine Implementierung oder ein Beispiel. Bezugnahme in der Spezifikation auf „eine Ausführungsformen“, „einige Ausführungsformen“ oder „andere Ausführungsformen“ bedeutet, dass ein/e spezielle/s Merkmal, Struktur oder Eigenschaft, das/die in Verbindung mit der Ausführungsformen beschrieben ist, in wenigstens einigen Ausführungsformen, jedoch nicht notwendigerweise in allen Ausführungsformen, enthalten ist. Das verschiedene Auftreten von „einer Ausführungsform“ oder „einigen Ausführungsformen“ bezieht sich nicht notwendigerweise immer auf dieselben Ausführungsformen. Es ist zu verstehen, dass in der vorstehenden Beschreibung beispielhafter Ausführungsformen verschiedene Merkmale manchmal in einer einzigen Ausführungsform, Figur oder Beschreibung davon zusammen gruppiert sind, um die Offenbarung zu straffen und das Verständnis eines oder mehrerer der verschiedenen neuartigen Aspekte zu unterstützen. Dieses Verfahren der Offenbarung ist jedoch nicht so zu interpretieren, dass es eine Absicht widerspiegelt, dass die beanspruchten Ausführungsformen mehr Merkmale als die in jedem Anspruch ausdrücklich vorgetragenen erfordert. Vielmehr liegen, wie die folgenden Ansprüche widerspiegeln, neuartige Aspekte in weniger als allen Merkmalen einer einzigen vorstehend offenbarten Ausführungsform. Somit sind die Ansprüche hiermit ausdrücklich in diese Beschreibung aufgenommen, wobei jeder Anspruch als eine separate Ausführungsform eigenständig ist.