-
Technisches Gebiet
-
Die vorliegende Offenbarung betrifft Computersysteme, insbesondere den Schutz von Daten, die in dem Speicher eines Computersystems gespeichert sind.
-
Hintergrund
-
Computersysteme, wie z. B. Hardwaresysteme und Softwaresysteme, die auf Computern laufen, haben oft unentdeckte Schwachstellen, die von Hardware- oder Software-Angriffen ausgenutzt werden können. Zum Beispiel kann ein Seitenkanalangriff eine Schwäche in einem Computer-Hardware-System ausnutzen, um wertvolle Daten zu stehlen. Ein Angreifer, der einen Seitenkanalangriff implementiert, kann durch physischen Zugriff auf ein Rechensystem Informationen erlangen. Andere Angriffe können schädliche Computerprogramme aufweisen, die über das Internet oder andere Kommunikationsnetzwerke empfangen werden. Die Angriffe können Trojaner, Viren, Würmer, Spyware und andere Schadsoftware umfassen.
-
Figurenliste
-
- 1 ist ein übergeordnetes Blockdiagramm eines System-on-a-Chip mit einer skalierbaren Gesamtspeicherverschlüsselungs-Engine mit mehrfachen Schlüsseln (MK-TME) gemäß einer Implementierung.
- 2 ist ein Blockdiagramm einer Schlüsselkennungsauswahlschaltung gemäß einer Implementierung.
- 3 ist ein Blockdiagramm eines System-on-a-Chip mit einer skalierbaren Verschlüsselungs-Engine mit mehrfachen Schlüsseln gemäß einer Implementierung.
- 4 ist ein Flussdiagramm eines veranschaulichenden Verfahrens zur Implementierung einer skalierbaren Gesamtspeicherverschlüsselungs-Engine mit mehrfachen Schlüsseln.
- 5A ist ein Blockdiagramm, das eine In-Order-Pipeline und eine Registerumbenennungsphase und eine Out-of-Order-Ausgabe-/Ausführungspipeline gemäß einer Implementierung zeigt.
- 5B ist ein Blockdiagramm, das eine Mikroarchitektur für einen Prozessor oder eine integrierte Schaltung veranschaulicht, die eine Hardware-Unterstützung für eine kryptografische Engine mit mehrfachen Schlüsseln gemäß einer Implementierung der Offenbarung implementieren kann.
- 6 veranschaulicht ein Blockdiagramm der Mikroarchitektur für einen Prozessor oder eine integrierte Schaltung, die eine Hardware-Unterstützung für eine kryptografische Engine mit mehrfachen Schlüsseln gemäß einer Implementierung der Offenbarung implementiert.
- 7 ist ein Blockdiagramm eines Computersystems gemäß einer Implementierung.
- 8 ist ein Blockdiagramm eines Computersystems gemäß einer weiteren Implementierung.
- 9 ist ein Blockdiagramm eines System-on-a-Chip gemäß einer Implementierung.
- 10 veranschaulicht eine weitere Implementierung eines Blockdiagramms für ein Rechensystem.
- 11 veranschaulicht eine weitere Implementierung eines Blockdiagramms für ein Rechensystem.
-
Detaillierte Beschreibung
-
Eine Verschlüsselungs-Engine kann von einem System verwendet werden, um Daten zu verschlüsseln, wenn sie von einem Prozessor in den Speicher übertragen werden. In einigen Verschlüsselungs-Engines kann ein einziger kurzlebiger Schlüssel zum Verschlüsseln aller Daten, die zu verschlüsseln sind, verwendet werden. In einigen Verschlüsselungs-Engines können mehrere Schlüssel verwendet werden, um verschiedene Abschnitte des Speichers unterschiedlich zu verschlüsseln. Die Verwendung mehrerer Schlüssel in einer Verschlüsselungs-Engine kann für eine Verschlüsselungsgranularität auf Seitenebene sorgen; was heißt, dass für jede zu verschlüsselnde Speicherseite ein Schlüssel ausgewählt werden kann. Eine Speicherseite kann ein zusammenhängender Speicherblock mit einer festen Länge sein. Auf diese Weise kann der von einer Anwendung verwendete Speicher nur für diese Anwendung zugänglich sein, basierend auf dem Verschlüsselungsschlüssel oder den Schlüsseln, die zur Verschlüsselung des für die Anwendung zugänglichen Speichers verwendet werden.
-
In einigen Fällen kann eine Schlüsselkennung (KeyID) von der Verschlüsselungs-Engine verwendet werden, um den Verschlüsselungsschlüssel auszuwählen, der von der Verschlüsselungs-Engine zur Verschlüsselung einer Speicherseite verwendet wird. Um den Verschlüsselungsschlüssel zu identifizieren, der zum Verschlüsseln oder Entschlüsseln des Speichers einer bestimmten Transaktion verwendet werden soll, kann die KeyID in die höherwertigen Bits der physischen Adresse der Speicherseite eingebettet werden. Um zum Beispiel 64 Schlüssel zu unterstützen, müssen sechs höherwertige Bits der physischen Adresse zur eindeutigen Identifizierung der unterschiedlichen Schlüssel verwendet werden, sieben Bits könnten zur Unterstützung von 128 Schlüsseln verwendet werden, usw. Das Hinzufügen weiterer Schlüssel kann jedoch den adressierbaren physischen Speicher einer Plattform verringern, da weniger Bits zur Adressierung des Speichers verwendet werden können. Daher ist die Einbettung der KeyID in die höherwertigen Bits nicht effizient skalierbar, ohne den Speicher der Plattform zu verkleinern. Wenn es des Weiteren mehrere Arten gibt, eine einzelne physische Adresse zu adressieren (z. B. 64 unterschiedliche höherwertige Schlüsselbitkombinationen für dieselbe physische Adresse), wird Aliasing zum Problem, wenn der Speicher auf dem Prozessor gecacht wird. Ein Aliasing-Problem kann auftreten, wenn eine gegebene physische Adresse in einer kohärenten Domäne mit zwei oder mehr unterschiedlichen KeyIDs gecacht wird. Eine Speicherseite kann durch eine erste KeyID zugänglich sein, wird dann aber durch eine zweite KeyID zugänglich gemacht. Wenn die durch die erste KeyID zugänglichen gecachten Speicherblöcke der Seite Änderungen enthalten, werden diese möglicherweise geräumt und beschädigen die durch die zweite KeyID zugänglichen gecachten Speicherblöcke der Seite. Um die mit dem Aliasing verbundenen Cache-Kohärenzprobleme zu vermeiden, muss das System dann auf rechenintensive Operationen wie das Invalidieren und Leeren des gesamten Caches zurückgreifen. Diese Vorgänge sind nicht nur rechenintensiv, sondern belasten auch die Leistung nicht damit zusammenhängender Arbeitslasten, da deren Cache-Zeilen ebenfalls invalidiert und geleert werden. Das Leeren verbraucht ebenfalls Speicherbandbreite und kann zu einer weiteren Leistungsverschlechterung führen.
-
Die hierin beschriebenen Ausführungsformen können die oben genannten Mängel beheben. Einer Anwendung, wie etwa einer virtuellen Maschine, kann eine Teilmenge der Schlüssel zugewiesen werden, die von einer Plattform unterstützt werden, auf der sie ausgeführt wird. Eine Plattform kann ein einzelnes System-on-a-Chip (SOC), ein Einzelprozessorsystem oder ein Multiprozessorsystem oder dergleichen umfassen. Ein SoC kann einen Prozessor oder mehrere Prozessoren aufweisen. Eine Anwendung kann auf einem oder mehreren logischen Prozessoren in dem SOC vorgesehen sein. KeyIDs für jeden der Schlüssel der Teilmenge können in einem auf einen logischen Prozessor bezogenen Register in dem SoC gespeichert werden. Wenn eine Speicherzugriffsanforderung von der Anwendung, die auf einem logischen Prozessor ausgeführt wird, erfolgt, kann eine der KeyIDs aus dem auf einen logischen Prozessor bezogenen Register ausgewählt werden, um der physischen Adresse, auf die zugegriffen werden soll, zugeordnet zu werden. Der Speicherblock, auf den zugegriffen wird, kann auf den SoC gecacht werden. Die KeyID kann ebenfalls auf den SoC als Attribut des gecachten Speicherblocks gecacht werden. Sowohl der Speicherblock als auch die KeyID können durch eine Markierung indiziert werden, wie z. B. die physische Adresse des Speicherblocks.
-
In einer Ausführungsform kann eine KeyID aus einer Teilmenge aller von einem SoC unterstützten KeyIDs ausgewählt werden, wenn eine Speicherzugriffsanforderung erfolgt. Für jede Speicherzugriffsanforderung kann ein Satz Bits, welcher Schlüsselkennungsselektor (Key Identifier Selector, KSEL) genannt wird, verwendet werden, um eine KeyID aus einem Schlüsselattributtabellenregister (Key Attribute Table Register, KAT-Register) auszuwählen. Jedem logischen Prozessor kann ein KAT-Register zugeordnet sein, wobei das KAT-Register dazu konfiguriert ist, die KeyIDs der Anwendung zu enthalten, die für die Ausführung auf dem zugeordneten logischen Prozessor vorgesehen ist. Ein Multiplexer kann die KeyID aus dem KAT-Register basieren auf dem KSEL auswählen. Der KSEL kann einer physischen Speicherseite zugeordnet sein und kann als Teil eines Page-Walks bestimmt werden. Ein Page-Walk kann ein mehrstufiger Page-Walk sein. Beispielsweise kann eine Seitentabelle der ersten Stufe eine lineare Gastadresse in eine physische Gastadresse übersetzen (als Seitentabelle der ersten Stufe bezeichnet) und eine Seitentabelle der zweiten Stufe kann eine physische Gastadresse in eine physische Hostadresse übersetzen (als Seitentabelle der zweiten Stufe bezeichnet). Der KSEL kann von der Seitentabelle der ersten oder zweiten Stufe erhalten werden. In einigen Ausführungsformen kann die Seitentabellenstufe, die den KSEL bereitstellt, konfigurierbar sein. In einer weiteren Ausführungsform kann eine Seitentabelle vorhanden sein, die unter Verwendung der physischen Hostadresse indiziert wird und zur Bereitstellung des KSEL verwendet wird.
-
Sobald der KSEL für die Seite bestimmt ist, kann er in einem Translation Lookaside Buffer (TLB) gespeichert und allen Speicherzugriffsanforderungen für diese Speicherseite zugeordnet werden. Wenn ein Speicherblock, auf den zugegriffen wird, nach dem Zugriff in dem SoC gecacht wird, kann die ausgewählte KeyID in einem KeyID-Cache (KIC) des SoC als ein Attribut des Speicherblocks gespeichert werden. Ein Speicherblock kann auch als Cache-Zeile bezeichnet werden.
-
In einer weiteren Ausführungsform kann der KSEL in eine von der Anwendung verwendete lineare Adresse eingebettet sein. Eine lineare Adresse kann eine logische Adresse sein, die von einer Anwendung für die Zwecke der von der Anwendung ausgeführten Prozesse verwendet wird. Eine lineare Adresse kann auf eine physische Adresse im Hauptspeicher indiziert werden. Hauptspeicher kann sich auf irgendeine chipexterne Speichereinrichtung beziehen. Der KSEL kann von der linearen Adresse abgelöst und an den Multiplexer gesendet werden, der zur Auswahl der KeyID verwendet wird. Da KeyIDs nicht in physische Adressen eingebettet sind, ist die Anzahl der von dem System unterstützten KeyIDs und Verschlüsselungsschlüssel skalierbar. Die Einbettung des KSEL in die lineare Adresse kann auch die Auswahl einer eindeutigen KeyID für jeden Speicherblock bzw. jede Cache-Zeile innerhalb einer Speicherseite erlauben.
-
Des Weiteren können die hierin beschriebenen Ausführungsformen das Problem des Aliasing, das mit aktuellen Methoden einhergeht, beheben. Wenn auf einen Speicherblock zugegriffen werden soll und der Block in dem SoC mit einer KeyID gecacht ist, die nicht dieselbe KeyID ist, die wie oben aus dem KAT-Register ausgewählt wurde, dann kann der Speicherblock oder die Cache-Zeile aus dem Cache geräumt und jegliche Änderungen können in den Hauptspeicher zurückgeschrieben werden. Dann kann der Speicherblock aus dem Hauptspeicher abgerufen und in dem SoC als der ausgewählten KeyID zugeordnet gecacht werden. Daher kann zu jedem Zeitpunkt nur ein Speicherblock, der durch eine einzige physische Adresse indiziert ist, in derselben kohärenten Domäne auf dem SoC gecacht werden. Eine kohärente Domäne kann eine Domäne des Speichers sein, die konsistente Daten über alle Caches und Speichervorrichtungen innerhalb dieser Domäne enthält.
-
1 ist ein Blockdiagramm, das ein SoC 100 zeigt, das ein KAT-Register 110, eine Auswahlschaltung 120 und einen Cache 130 umfasst. Die Auswahlschaltung 120 wählt eine KeyID aus dem KAT-Register 110 aus, die in dem Cache 130 als Attribut eines Speicherblocks gecacht werden soll, auf den durch eine Speicherausführungseinheit 160 eines logischen Prozessors 150 zugegriffen werden soll. Die ausgewählte KeyID kann mitsamt der Speicheranforderung zu dem Cache 130 und dem Speichercontroller 140 transportiert werden. Die aus dem KAT-Register 110 ausgewählte KeyID kann dann von dem Speichercontroller 140 verwendet werden, um einen Verschlüsselungsschlüssel zum Verschlüsseln des Speicherblocks auszuwählen, wenn dieser von dem SoC 100 zum Hauptspeicher 170 übertragen wird. Die KeyID kann auch verwendet werden, um den Verschlüsselungsschlüssel zum Entschlüsseln des Speicherblocks auszuwählen, wenn dieser aus dem Hauptspeicher 170 abgerufen und in dem SoC 100 gespeichert wird. Der Hauptspeicher 170 kann irgendeine chipexterne Speichereinrichtung, wie etwa ein Direktzugriffsspeicher (RAM), ein dynamischer RAM (DRAM) und ein nichtflüchtiger RAM, sein.
-
Das KAT-Register 110 kann eine Vielzahl von KeyIDs speichern, die einer auf dem logischen Prozessor 150 ausgeführten Anwendung zugeordnet sind. Die Anwendung kann irgendeine Art von Anwendung sein, wie etwa eine Web-Anwendung, eine Desktop-Anwendung, eine Browser-Anwendung, eine virtuelle Maschine usw. Die der Anwendung zugeordneten KeyIDs können es der Anwendung erlauben, die von der Anwendung verwendeten Seiten und Blöcke des Speichers zu verschlüsseln und exklusiv darauf zuzugreifen. Jede KeyID kann einen Verschlüsselungsschlüssel identifizieren, der von dem Speichercontroller 140 zum Verschlüsseln und Entschlüsseln von Speicherblöcken, die der jeweiligen KeyID zugeordnet sind, verwendet wird. Die Vielzahl von KeyIDs kann bei Aktivierung der Anwendung auf dem logischen Prozessor 150 in das KAT-Register 110 geladen werden.
-
Die Auswahlschaltung 120 kann ein Multiplexer sein, der eine der KeyIDs aus dem KAT-Register 110 basierend auf einem Satz Bits, der als Schlüsselkennungsselektor (KSEL) bezeichnet wird, auswählt. Der KSEL kann ein Satz Bits sein, der in die höherwertigen Bits einer linearen Adresse eingebettet ist, die von einer Anwendung verwendet wird. Die lineare Adresse kann auf eine physische Adresse des Speicherblocks abgebildet werden. Die physische Adresse kann den physischen Ort eines Speicherblocks im Hauptspeicher 170 identifizieren. Der KSEL kann von der linearen Adresse abgelöst und von der Speicherausführungseinheit 160 des logischen Prozessors 150 an die Auswahlschaltung 120 gesendet werden. Der KSEL kann von den Lade-/Speicher-/Code-Fetches mitgeführt werden, die von der Speicherausführungseinheit 160 gesendet werden. Die KeyID kann dann aus dem KAT-Register 110 basierend auf dem KSEL ausgewählt werden. Die KeyID kann dann in dem Cache 130 als Attribut des Speicherblocks gespeichert werden, auf den der Lade-/Speicher-/Code-Fetch, den der KSEL bereitgestellt hat, zugreift.
-
In einer alternativen Ausführungsform kann der KSEL in einer Seitentabelle gespeichert werden. Es kann mehrere Seitentabellen geben, wie etwa verschachtelte Seitentabellen oder eine dedizierte Tabelle, die durch die physische Adresse indiziert ist, um den KSEL bereitzustellen. Welche Stufe der Seitentabelle den KSEL bereitstellt kann konfigurierbar sein. Der KSEL kann in einer Seitentabelle als Attribut der physischen Adresse der Seite, auf welche die lineare Adresse abgebildet wird, gespeichert werden. Die Bestimmung der physischen Adresse aus der linearen Adresse kann das Konsultieren der Seitentabelle umfassen, um die Abbildung der linearen Adresse auf die physische Adresse zu identifizieren. Das Konsultieren einer Seitentabelle, um eine physische Adresse aus einer linearen Adresse zu bestimmen, kann als Page-Walk bezeichnet werden. Der KSEL kann dann als Teil des Page-Walks bestimmt und mitsamt der physischen Adresse abgerufen werden. Der aus dem Page-Walk bestimmte KSEL kann in einem TLB gecacht werden. Der KSEL kann wiederum durch den Lade-/Speicher-/Code-Fetch, der für den Zugriff auf den Speicherblock an der physischen Adresse verwendet wird, mitgeführt werden.
-
Der Cache 130 kann Speicherblöcke speichern, auf die der logische Prozessor 150 zugegriffen hat. Gecachte Speicherblöcke, auf die innerhalb einer gewissen Zeitspanne nicht zugegriffen wurde oder auf die selten zugegriffen wurde, können jedoch aus dem Cache 130 geräumt werden. Das Räumen eines Speicherblocks aus dem Cache kann das Entfernen des Speicherblocks aus dem Cache 130 umfassen. In einigen Fällen kann der Speicherblock in den Hauptspeicher 170 zurückgeschrieben werden, mit jeglichen Änderungen, die an dem Speicherblock vorgenommen wurden, während er in dem Cache 130 gespeichert war. Des Weiteren kann der Cache 130 eine KeyID mitsamt jedem in dem Cache 130 gespeicherten Speicherblock speichern. Daher kann jedem in dem Cache 130 gespeicherten Speicherblock eine KeyID zugeordnet sein, die von dem Speichercontroller 140 verwendet werden kann, um einen Verschlüsselungsschlüssel zum Verschlüsseln des Speicherblocks auszuwählen, wenn er aus dem Cache 130 geräumt und in den Hauptspeicher 170 geschrieben wird.
-
Der Speichercontroller 140 kann Speicherzugriffe auf den Hauptspeicher 170 steuern. Der Speichercontroller 140 kann auch eine Gesamtspeicherverschlüsselungs-Engine (Total Memory Encryption(TME)-Engine) umfassen oder mit dieser gekoppelt sein, um den Speicher zu verschlüsseln, wenn er von dem SoC 100 zum Hauptspeicher 170 übertragen wird. Der Speichercontroller 140 kann eine Anzahl von Verschlüsselungsschlüsseln speichern, die zur Verschlüsselung von Speicherblöcken verwendet werden, oder auf diese Zugriff haben. Der Speichercontroller 140 kann auch eine Abbildung von KeyIDs auf zugehörige Verschlüsselungsschlüssel speichern, sodass ein Verschlüsselungsschlüssel anhand seiner zugeordneten KeyID identifiziert werden kann. Der logische Prozessor 150 und die Speicherausführungseinheit 160 können Speicherzugriffsanfragen steuern, Page-Walks durchführen, um physische Adressen zu bestimmen, und den KSEL an die Auswahlschaltung 120 übertragen, um eine KeyID auszuwählen.
-
Der Speichercontroller 140 kann mit einem Verschlüsselungsschlüssel-Cache 145 gekoppelt sein. Der Verschlüsselungsschlüssel-Cache 145 kann auch ein Teil des Speicher-Controllers 140 sein. Der Verschlüsselungsschlüssel-Cache 145 kann Verschlüsselungsschlüssel speichern, die aktiv von dem Speichercontroller 140 verwendet werden. Inaktive Schlüssel können in einem für die Speicherung von Verschlüsselungsschlüsseln reservierten Bereich des Hauptspeichers 170 gespeichert werden. Aktive Schlüssel, die inaktiv werden, können aus dem Verschlüsselungsschlüssel-Cache 145 in den reservierten Bereich des Systemspeichers 170 ausgelagert werden. Der reservierte Bereich des Systemspeichers 170, der zum Auslagern von Verschlüsselungsschlüsseln aus dem Verschlüsselungsschlüssel-Cache 145 verwendet wird, kann unter Verwendung eines in die TME-Engine programmierten Verschlüsselungsschlüssels verschlüsselt werden.
-
In einer Ausführungsform wird der Verschlüsselungsschlüssel-Cache 145 durch Hardware verwaltet. Der Speichercontroller 140 kann eine Speicherzugriffsanforderung mit einer KeyID empfangen. Als Reaktion wird der Verschlüsselungsschlüssel im Verschlüsselungsschlüssel-Cache 145 anhand der KeyID nachgeschlagen. Wenn das Nachschlagen des Verschlüsselungsschlüssels fehlschlägt (d. h., der Schlüssel wird nicht gefunden), kann der Speichercontroller 140 ein Opfer des Verschlüsselungsschlüssel-Caches 145 zum Räumen auswählen und den geräumten Verschlüsselungsschlüssel durch den durch die KeyID der Speicherzugriffsanforderung identifizierten Verschlüsselungsschlüssel ersetzen.
-
In einer Ausführungsform kann der Verschlüsselungsschlüssel-Cache 145 durch Software verwaltet werden. Die Software kann identifizieren, welche Schlüssel in Gebrauch sind und welche Schlüssel ruhend oder inaktiv sind. Die Software kann einen Befehl an den Speichercontroller 140 oder die Verschlüsselungs-Engine senden, um Schlüssel, die in Gebrauch sind, in den Verschlüsselungsschlüssel-Cache 145 zu laden und Schlüssel, die inaktiv sind, auszulagern. Die Software kann Schlüssel basierend auf einem durch die Software definierten Nutzungsmodell laden und auslagern.
-
2 ist ein Blockdiagramm, das eine KeyID-Auswahlschaltung 200 zum Auswählen einer KeyID, die einem Speicherblock zuzuordnen ist, auf den ein logischer Prozessor zugreift, veranschaulicht. Das KAT-Register 210 kann eine Anzahl von KeyIDs speichern, die Verschlüsselungsschlüssel identifizieren, auf die eine auf dem logischen Prozessor ausgeführte Anwendung zugreifen kann. Das KAT-Register 210 kann dem logischen Prozessor zugeordnet sein. Der logische Prozessor kann auf einem Prozessorkern ausgeführt werden. Das KAT-Register 210 kann eine Teilmenge aller Verschlüsselungsschlüssel, die von dem SoC, auf dem es sich befindet, unterstützt werden, speichern. Die Teilmenge der in dem KAT-Register 210 gespeicherten KeyIDs kann basierend auf der Anwendung, die auf dem logischen Prozessor ausgeführt wird, bestimmt werden. Der Mikrocode kann bei Aktivierung der Anwendung auf dem logischen Prozessor, die auf dem Prozessorkern ausgeführt wird, die Teilmenge der KeyIDs in das KAT-Register 210 laden.
-
Der KeyID-Auswahlmultiplexer 220 kann eine mit dem KAT-Register 210 gekoppelte Hardwareschaltung sein, um die KeyID 215 für einen Speicherblock auszuwählen, auf den der logische Prozessor Zugriff anfordert. Der KeyID-Auswahlmultiplexer 220 kann einen KeyID-Selektor (KSEL) 225 als Eingang empfangen, um die KeyID 215 auszuwählen. Der KSEL 225 kann ein Satz Bits sein, der aus der linearen Adresse, die der Speicherzugriffsanforderung zugeordnet ist, abgelöst wurde.
-
Alternativ kann der KSEL als Teil eines Page-Walks bestimmt werden, wonach der KSEL in einem Translation Lookaside Buffer (TLB) gecacht werden kann. Ein TLB kann ein Cache auf dem SoC sein, der verwendet wird, um Abbildungen von linearen Adressen auf physische Adressen aus einem Page-Walk zu speichern, damit sie schnell abgerufen werden können, ohne dass ein weiterer Page-Walk erforderlich ist. Die Anzahl der Bits, die der KSEL 225 umfasst, sowie jede KeyID, kann log2(N) sein, wobei N die Anzahl der in dem KAT-Register 210 gespeicherten KeyIDs ist. Alternativ kann das KAT-Register 210 irgendeine Anzahl von Einträgen enthalten und die KeyID 215 und der KSEL 225 können irgendeine Anzahl von Bits umfassen.
-
Der Modusauswahlmultiplexer 230 kann ein Multiplexer sein, der bestimmt, ob der Prozessor den skalierbaren MK-TME-Modus verwenden oder in einem Legacy-Modus arbeiten soll. Die skalierbare MK-TME-Zulassung 260 kann der Eingang für den Modusauswahlmultiplexer 230 sein, um auszuwählen, ob der skalierbare MK-TME-Modus aktiviert wird oder ob der Legacy-Modus aktiviert wird. Im Legacy-Modus können die KeyIDs in die physische Adresse 240 eingebettet sein. Ein Legacy-Modus kann erforderlich sein, um Legacy-Software zu unterstützen, die für den Betrieb im Legacy-Modus aktiviert wurde. Eine Modusauswahl kann die Abwärtskompatibilität mit älterer Software (Legacy-Software) erlauben, während neuere Software im skalierbaren MK-TME-Modus arbeiten kann. Die skalierbare MK-TME-Aktivierung 260 kann beim Hochfahren vom BIOS eingestellt werden. Alternativ kann die skalierbare MK-TME-Aktivierung 260 durch das Betriebssystem oder einen Virtual Machine Manager ausgewählt werden.
-
3 ist ein Blockdiagramm, das ein SoC 300 veranschaulicht, das eine oder mehrere KeyID-Auswahlschaltungen 200A-C, die jeweils einem bzw. mehreren logischen Prozessoren 310A-C zugeordnet sind, und einen oder mehrere KeyID-Caches (KIC) 350A-C zum Speichern von KeyIDs, die mit Speicherblöcken verbunden sind, die in einer kohärenten Domäne des SoC 300 gespeichert sind, benützt. Der eine oder die mehreren logischen Prozessoren 310A-C können auf einem oder mehreren Prozessorkernen ausgeführt werden. Jeder logische Prozessor 310A-C kann mit einer KeyID-Auswahlschaltung 200A-C gekoppelt sein, in 2 detailliert dargestellt. Jeder logische Prozessor kann eine oder mehrere Anwendungen ausführen. Die von einem logischen Prozessor ausgeführte Anwendung kann eine virtuelle Maschine oder irgendeine andere Art von Softwareanwendung sein.
-
Das SoC 300 kann ein „Mesh“ (zu Deutsch etwa Geflecht) von zusammengeschalteten Speichervorrichtungen aufweisen, die miteinander kommunizieren und sich koordinieren können, um Speicherblöcke und Metadaten auf dem SoC 300 kohärent zu cachen. Die Speichervorrichtungen können einen Caching- und Home-Agent 320A-C, einen Snoop-Filter 330A-C, einen Last-Level-Cache 340A-C und einen KeyID-Cache (KIC) 350A-C aufweisen. Caching- und Home-Agent 320A-C des Mesh können die Kommunikation zwischen Speichervorrichtungen steuern, um kohärentes Caching unter den Speichervorrichtungen des Geflechts zu koordinieren. In einem Beispiel können die Speichervorrichtungen des Mesh eine kohärente Domäne sein.
-
Beispielsweise kann der Caching- und Home-Agent 320A Logik enthalten, um den Snoop-Filter 330A, den Last-Level-Cache (LLC) 340A und den KIC 350A zu steuern sowie mit dem Caching- und Home-Agent 320B-C zu kommunizieren, um zu bestimmen, was in den von den Caching- und Home-Agenten 320B-C gesteuerten Speichervorrichtungen gecacht wird. Der Snoop-Filter 330A-C kann ein datenloser Cache sein, der den Ort eines Speicherblocks, der in prozessorkernseitigen Caches gespeichert ist, speichert. Der LLC 340A-C kann Speicherblöcke speichern, auf die durch einen von den logischen Prozessoren zugegriffen wurde. Der LLC 340A-C kann der letzte Cache innerhalb des SoC 300 sein, in dem Speicherblöcke gespeichert werden können, bevor ein Zugriff auf den Hauptspeicher 390 erforderlich ist.
-
In einem Beispiel kann der KIC 350A-C die KeyID jedes Speicherblocks, die innerhalb einer kohärenten Domäne des SoC 300 gespeichert ist, speichern. Die in dem KIC 350A-C gespeicherten KeyIDs können basierend auf der physischen Adresse des Speicherblocks, dem die KeyID zugeordnet ist, indiziert und somit bestimmt werden. Auf diese Weise kann jeder innerhalb des SoC 300 gecachte Speicherblock mit einer KeyID, die durch die physische Adresse des Blocks identifiziert ist, markiert sein. Der KIC 350A-C kann ein physisch separater Cache sein oder er kann in den Snoop-Filter 330A-C oder den LLC 350A-C integriert sein.
-
Wenn der logische Prozessor Zugriff auf einen Speicherblock anfordert, kann eine KeyID aus einem KAT-Register in der KeyID-Auswahlschaltung 200A-C ausgewählt werden. Der Caching- und Home-Agent 320A-C kann bestimmen, ob der Speicherblock auf dem SoC 300 gecacht ist, indem er die physische Adresse des Blocks als Kennung verwendet. Der Caching- und Home-Agent 320A-C kann die physische Adresse verwenden, um den Snoop-Filter, den Last-Level-Cache oder beide abzufragen, um zu bestimmen, ob der Speicherblock auf dem SoC 300 gecacht ist. Wenn die physische Adresse des Speicherblocks als in dem SoC 300 gecacht identifiziert wird, kann der Caching- und Home-Agent 320A-C bestimmen, ob die in dem KIC 350A-C gespeicherte KeyID dieselbe KeyID ist, die von der KeyID-Auswahlschaltung 200A-C ausgewählt wurde. Wenn die gespeicherte KeyID nicht mit der ausgewählten KeyID übereinstimmt, kann der Speicherblock aus dem Cache entfernt und mit allen Änderungen, die vorgenommen wurden, während er auf dem SoC 300 gecacht war, zurück in den Hauptspeicher 390 geschrieben werden. Beim Bewegen von dem SoC 300 in den Hauptspeicher 390 kann der Speicherblock mit einem Verschlüsselungsschlüssel, der durch die KeyID identifiziert wird, die in dem KIC 350A-C gespeichert war, verschlüsselt werden. Der Speicherblock kann dann wieder abgerufen und mit der neuen ausgewählten KeyID als Markierung oder Attribut gecacht werden. Die KeyID kann in dem KIC 350A-C gespeichert und durch die physische Adresse des Speicherblocks indiziert werden. Auf diese Weise kann jeweils nur ein Speicherblock für eine physische Adresse innerhalb des SoC 300 gecacht werden.
-
Die Speichercontroller- und Gesamtspeicherverschlüsselungs-Engine (MC/TME) 370A-B kann Speicherblöcke verschlüsseln, wenn sie aus dem SoC 300 entfernt werden, und Blöcke entschlüsseln, wenn sie aus dem Hauptspeicher 390 abgerufen werden. Die MC/TME 370A-B kann einen Speicherblock unter Verwendung eines Verschlüsselungsschlüssels, der durch die dem Speicherblock zugeordnete KeyID identifiziert ist, verschlüsseln oder entschlüsseln. Jeder Speicherblock kann mit der KeyID, die zu seiner Verschlüsselung verwendet wurde, gespeichert werden. Wie oben beschrieben, kann die KeyID in dem KIC 350A-C gespeichert sein. Bei einer Speicheranforderung, bei der ein Speicherblock aus dem Hauptspeicher 390 abgerufen wird, kann die MC/TME 370A-B den Block basierend auf der mit dem Speicherblock gespeicherten KeyID entschlüsseln. Mesh-zu-Speicher 360A-B kann eine Schnittstelle zwischen dem Mesh und der MC/TME 370A-B sein. Mesh-zu-E/A-SF 380 kann eine Schnittstelle zwischen dem Geflecht und den Eingabe-/Ausgabevorrichtungen sein.
-
Ein Vorteil des Cachens jedes Speicherblocks mit einer KeyID in den KIC 350A-C kann die Implementierung einer neuen Befehlssatzarchitektur (Instruction Set Architecture, ISA) sein. Eine ISA kann definiert werden, um die gecachten Speicherblöcke, die mit einer vorgegebenen KeyID gespeichert sind, zu leeren. Auf diese Weise kann das Betriebssystem den KeyID-Raum mit minimalen Auswirkungen auf andere Anwendungen auf der Plattform überzeichnen. Zum Beispiel kann eine KeyID durch Software als Parameter für einen Befehl vorgegeben werden. Der Befehl kann einen Mikrocode veranlassen, Speicherblöcke zu identifizieren, die der vorgegebenen KeyID zugeordnet sind. Eine Leerungsanweisung kann jeden durch den Mikrocode identifizierten Speicherblock in den Hauptspeicher 390 leeren.
-
4 ist ein Flussdiagramm, das ein beispielhaftes Verfahren 400 zur Verwendung eines SoC mit einer skalierbaren Verschlüsselungs-Engine mit mehrfachen Schlüsseln zeigt. In Block 402 kann eine Liste von KeyIDs, die einer Anwendung oder virtuellen Maschine zugeordnet sind, in ein KAT-Register geladen werden, wenn die Anwendung oder virtuelle Maschine auf einem logischen Prozessor eines Prozessorkerns aktiviert oder initialisiert wird. Zum Beispiel können einer virtuellen Maschine vier Schlüssel zugewiesen sein, obwohl das SoC eine viel größere Anzahl von Schlüssel unterstützen kann. Die vier Schlüssel können durch vier KeyIDs identifiziert sein, die in das KAT-Register geladen werden, wenn die virtuelle Maschine aktiviert wird.
-
In Block 404 kann eine Speicherzugriffsanforderung von dem Prozessorkern an eine KeyID-Auswahlschaltung übertragen werden, die einen Multiplexer umfasst, um eine KeyID aus dem KAT-Register auszuwählen. Die Speicherzugriffsanforderung kann einen KeyID-Selektor (KSEL) aufweisen. Der KSEL kann von der Speicherzugriffsanforderung abgelöst und in den Multiplexer eingegeben werden. Der KSEL kann einen Satz Bits umfassen. Der KSEL kann durch einen Page-Walk bestimmt werden oder in eine lineare Adresse eingebettet sein.
-
In Block 406 kann basierend auf dem von der Speicheranforderung empfangenen KSEL eine KeyID aus dem KAT-Register ausgewählt werden. Der Entwickler der Anwendung kann den KSEL so programmieren, dass er geeignete Verschlüsselungsschlüssel für die Verschlüsselung des Anwendungsspeichers auswählt. Die Anwendung kann Zugriff auf N Schlüssel haben, die in dem KAT-Register gespeichert sind, und die Programmierung des KSEL bestimmt, welcher dieser N Schlüssel verwendet wird. Da der KSEL der Auswahleingang des Multiplexers ist, der aus N Schlüsseln auswählt, können sowohl die KeyIDs als auch der KSEL log2(N) Bits umfassen. Alternativ kann das KAT-Register 210 irgendeine Anzahl von Einträgen enthalten und die KeyID 215 und der KSEL 225 können irgendeine Anzahl von Bits umfassen. Darüber hinaus kann sich ein Fehler ergeben, wenn der KSEL 225 mit einem Wert programmiert ist, der einen Index auswählt, der nicht in dem KAT-Register 210 implementiert ist.
-
In Block 408 können die KeyID und die Speicherzugriffsanforderung an einen Systemagenten einer Speichervorrichtung gesendet werden. Die Speichervorrichtung kann eine aus einer Anzahl von zusammengeschalteten Speichervorrichtungen sein. Der Systemagent kann das Cachen von Speicherblöcken innerhalb des SoC steuern. Die Speicherzugriffsanforderung kann einen Lade-/Speicher-/Code-Fetch einschließlich KSEL und der physischen Adresse des Speicherblocks, auf den zugegriffen werden soll, umfassen.
-
In Block 410 kann bestimmt werden, ob der Speicherblock, welcher der physischen Adresse der Speicherzugriffsanforderung entspricht, innerhalb des SoC gespeichert ist. Der Systemagent kann unter Verwendung der physischen Adresse der Speicherzugriffsanforderung bestimmen, ob der Speicherblock innerhalb des SoC gecacht ist. Die physische Adresse kann eine Markierung oder Metadaten sein, die in Verbindung mit einem Speicherblock gespeichert sind. Der Systemagent kann einen Snoop-Filter durchsuchen, der den Ort von Speicherblöcken, die in kernseitigen Caches gespeichert sind, enthält. Der Systemagent kann auch einen Cache durchsuchen, um zu bestimmen, ob ein Speicherblock mit der durch den Systemagenten empfangenen physischen Adresse in dem Cache gespeichert ist.
-
In Block 412 kann die Speicheranforderung, wenn in Block 410 bestimmt wird, dass die physische Adresse nicht gefunden wird, was bedeutet, dass der Speicherblock nicht in dem SoC gecacht ist, dann einen in dem Cache gespeicherten Speicherblock gemäß einer Räumungsprozedur räumen. Ein Speicherblock kann geräumt werden, wenn eine Räumung erforderlich ist, um in dem Cache Platz für den neuen Speicherblock zu schaffen, der angefordert wird. Wenn ungültige Einträge in dem Cache vorhanden sind, ist eine Räumung möglicherweise nicht erforderlich. Der angeforderte Speicherblock kann dann aus dem Hauptspeicher abgerufen und mitsamt der in Block 406 ausgewählten KeyID gecacht werden. Die KeyID kann in dem KIC als ein Attribut oder eine Markierung gespeichert werden, das oder die dem abgerufenen Speicherblock zugeordnet ist.
-
In Block 414 kann, wenn in Block 412 bestimmt wird, dass die physische Adresse in dem SoC gecacht ist, auch bestimmt werden, ob die in Block 406 ausgewählte KeyID dieselbe KeyID ist wie die KeyID, die als der physischen Adresse zugeordnet gespeichert ist. Die KeyID kann ein Attribut oder eine Markierung sein, das oder die dem Speicherblock zugeordnet ist, und kann durch die physische Adresse des Speicherblocks oder irgendeine andere dem Speicherblock zugeordnete Markierung identifiziert werden.
-
In Block 416 kann, wenn in Block 414 bestimmt wird, dass die mit der physischen Adresse gespeicherte KeyID nicht dieselbe KeyID ist wie die mit der Speicherzugriffsanforderung ausgewählte KeyID, der Speicherblock geräumt werden. In Block 418 kann der Speicherblock, nachdem der Speicherblock in Block 416 geräumt wurde, aus dem Hauptspeicher abgerufen und dann in dem SoC mit der in Block 406 ausgewählten KeyID als Attribut gecacht werden. In Block 420 kann, wenn in Block 414 bestimmt wird, dass die dem Speicherblock zugeordnete KeyID dieselbe KeyID ist, die in Block 406 ausgewählt wurde, die Speicheranforderung den Speicherblock aus dem Cache abrufen und an den Prozessorkern zurückgeben.
-
5A ist ein Blockdiagramm, das eine Mikroarchitektur für einen Prozessor 500 veranschaulicht, der eine Hardwareunterstützung für die Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software gemäß einer Implementierung implementiert. Insbesondere stellt der Prozessor 500 einen In-Order-Architekturkern und eine Registerumbenennungslogik sowie eine Out-of-Order-Ausgabe-/Ausführungslogik dar, die in einem Prozessor gemäß mindestens einer Implementierung der Offenbarung enthalten sein sollen.
-
Der Prozessor 500 weist eine Frontend-Einheit 530 auf, die mit einer Ausführungs-Engine-Einheit 550 gekoppelt ist, und beide sind mit einer Speichereinheit 570 gekoppelt. Der Prozessor 500 kann einen RISC-Kern (Reduced Instruction Set Computing), einen CISC-Kern (Complex Instruction Set Computing), einen VLIW-Kern (Very Long Instruction Word) oder einen hybriden oder alternativen Kerntyp aufweisen. Als noch eine weitere Option kann der Prozessor 500 einen Spezialzweckkern aufweisen, wie zum Beispiel einen Netzwerk- oder Kommunikationskern, eine Komprimierungs-Engine, einen Grafikkern oder dergleichen. In einer Implementierung kann der Prozessor 500 ein Mehrkernprozessor sein oder Teil eines Mehrprozessorsystems sein.
-
Die Frontend-Einheit 530 weist eine Sprungvorhersageeinheit 532 auf, die mit einer Befehls-Cache-Einheit 534 gekoppelt ist, die mit einem Befehls-Translation-Lookaside-Puffer (Befehls-TLB) 536 gekoppelt ist, der mit einer Befehls-Fetch-Einheit 538 gekoppelt ist, die mit einer Decodiereinheit 540 gekoppelt ist. Die Decodiereinheit 540 (auch als Decodierer bezeichnet) kann Befehle decodieren und als Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungspunkte, Mikroanweisungen, andere Befehle oder andere Steuersignale erzeugen, die von den ursprünglichen Befehlen decodiert werden oder die auf andere Weise die ursprünglichen Befehle widerspiegeln oder davon abgeleitet sind. Der Decodierer 540 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen sind, ohne darauf beschränkt zu sein, Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logikarrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) usw. Die Befehls-Cache-Einheit 534 ist ferner mit der Speichereinheit 570 gekoppelt. Die Decodiereinheit 540 ist mit einer Umbenennungs-/Zuweisereinheit 552 in der Ausführungs-Engine-Einheit 550 gekoppelt.
-
Die Ausführungs-Engine-Einheit 550 weist die Umbenennungs-/Zuweisereinheit 552 auf, die mit einer Rückordnungseinheit 554 und einem Satz von einer oder mehreren Scheduler-Einheit(en) 556 gekoppelt ist. Die Scheduler-Einheit(en) 556 repräsentiert irgendeine Anzahl unterschiedlicher Scheduler-Schaltungen, einschließlich Reservierungsstationen (RS), eines zentralen Befehlsfensters usw. Die Scheduler-Einheit(en) 556 ist (sind) mit der (den) physischen Registersatz-Einheit(en) bzw. Registersätze-Einheit(en) 558 gekoppelt. Jede der physischen Registersatz(-sätze)-Einheiten 558 repräsentiert eine oder mehrere physische Registersätze, von denen verschiedene einen oder mehrere unterschiedliche Datentypen, wie etwa skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma usw., Status (z. B. einen Befehlszeiger, d. h. die Adresse des nächsten auszuführenden Befehls) usw. speichern. Die physische(n) Registersatz(-sätze)-Einheit(en) 558 wird/werden von der Rückordnungseinheit 554 überlagert, um verschiedene Möglichkeiten zu veranschaulichen, wie die Registerumbenennung und die Out-of-Order-Ausführung implementiert werden können (z. B. unter Verwendung eines oder mehrerer Re-Order-Puffer und eines oder mehrerer Rückordnungsregistersätze, unter Verwendung einer oder mehrerer Future-Dateien, eines oder mehrerer Historienpuffer und eines oder mehrerer Rückordnungsregistersätze; unter Verwendung einer Registerabbildung und eines Pools von Registern; usw.).
-
Im Allgemeinen sind die Architekturregister von der Außenseite des Prozessors oder aus der Sicht eines Programmierers sichtbar. Die Register sind nicht auf irgendeinen bekannten Schaltungstyp beschränkt. Verschiedene unterschiedliche Arten von Registern sind geeignet, solange sie in der Lage sind, Daten wie hierin beschrieben zu speichern und bereitzustellen. Beispiele für geeignete Register sind, ohne darauf beschränkt zu sein, dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. Die Rückordnungseinheit 554 und die physische(n) Registersatz(-sätze)-Einheit(en) 558 sind mit dem/den Ausführungscluster(n) 560 gekoppelt. Der/die Ausführungscluster 560 weist/weisen einen Satz von einer oder mehreren Ausführungseinheiten 562 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 564 auf. Die Ausführungseinheiten 562 können verschiedene Operationen durchführen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und mit verschiedenen Datentypen arbeiten (z. B. skalare Gleitkommazahl, gepackte Ganzzahl, gepackte Gleitkommazahl, VektorGanzzahl, Vektor-Gleitkommazahl).
-
Während einige Implementierungen eine Reihe von Ausführungseinheiten enthalten können, die bestimmten Funktionen oder Funktionssätzen gewidmet sind, können andere Implementierungen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle alle Funktionen ausführen. Die Scheduler-Einheit(en) 556, physische(n) Registersatz(sätze)-Einheit(en) 558 und Ausführungscluster 560 sind so gezeigt, dass sie auch mehrfach vorhanden sein können, da gewisse Implementierungen separate Pipelines für gewisse Datentypen/Operationstypen erstellen (z. B. eine skalare Ganzzahl-Pipeline, eine skalare Pipeline mit Gleitkomma/gepackter Ganzzahl/gepacktem Gleitkomma/Vektor-Ganzzahl/Vektor-Gleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physische(n) Registersatz(-sätze)-Einheit und/oder Ausführungscluster aufweist; und im Fall einer separaten Speicherzugriffs-Pipeline sind gewisse Implementierungen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 564 aufweist). Es sollte sich auch verstehen, dass, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines eine Out-of-Order-Ausgabe/Ausführung sein können und der Rest in Order.
-
Der Satz Speicherzugriffseinheiten 564 ist mit der Speichereinheit 570 gekoppelt, die einen Daten-Prefetcher 580, eine Daten-TLB-Einheit 572, eine Daten-Cache-Einheit (DCU) 574 und eine Stufe-2-(L2)-Cache-Einheit 576 umfassen kann, um einige Beispiele zu nennen. In einigen Implementierungen wird die DCU 574 auch als Datencache der ersten Stufe (Ll-Cache) bezeichnet. Die DCU 574 kann mehrere ausstehende Cache-Fehlschläge verarbeiten und weiterhin eingehende Speicher- und Ladevorgänge bedienen. Sie unterstützt auch die Aufrechterhaltung der Cache-Kohärenz. Die Daten-TLB-Einheit 572 ist ein Cache, der verwendet wird, die Geschwindigkeit der virtuellen Adressenübersetzung zu verbessern, indem virtuelle und physische Adressräume abgebildet werden. Die Daten-TLB-Einheit 572 kann, wie oben beschrieben, erweitert werden, um KSEL zu cachen. In einer beispielhaften Implementierung können die Speicherzugriffseinheiten 564 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit aufweisen, die jeweils mit der Daten-TLB-Einheit 572 in der Speichereinheit 570 gekoppelt sind. Die L2-Cache-Einheit 576 kann mit einer oder mehreren anderen Cache-Stufen und am Ende mit einem Hauptspeicher verbunden sein.
-
In einer Implementierung lädt/holt der Daten-Prefetcher 580 Daten spekulativ vorab in die DCU 574, indem er automatisch vorhersagt, welche Daten ein Programm in Kürze brauchen wird. Prefetching kann sich beziehen auf das Übertragen von Daten, die an einem Speicherort (z. B. einer Position) einer Speicherhierarchie (z. B. Caches oder Speicher einer niedrigeren Stufe) gespeichert sind, an einen Speicherplatz höherer Stufe übertragen werden, der näher an dem Prozessor liegt (z. B. eine geringere Zugriffslatenz aufweist), bevor die Daten tatsächlich von dem Prozessor angefordert werden. Genauer gesagt kann sich das Prefetching auf das frühzeitige Abrufen von Daten aus einem der Caches/Speicher einer niedrigeren Stufe in einen Daten-Cache und/oder Prefetch-Puffer, bevor der Prozessor eine Anforderung ausgibt, dass die spezifischen Daten zurückgegeben werden, beziehen. Das Prefetching kann unter Verwendung eines KSEL einer ursprünglichen Anforderung, die den Daten-Prefetcher 580 trainiert hat, erfolgen.
-
Der Prozessor 500 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von Imagination Technologies aus Kings Langley, Hertfordshire, UK; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, CA).
-
Es sollte sich verstehen, dass der Kern Multithreading (die Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf eine Vielzahl von Arten tun kann, einschließlich zeitlich gesplittetes Multithreading, gleichzeitiges Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für den der physische Kern ein gleichzeitiges Multithreading durchführt) oder eine Kombination davon (z. B. zeitlich gesplittetes Fetching und Decodieren und gleichzeitiges Multithreading danach, wie bei der Hyperthreading-Technologie von Intel®).
-
Obwohl Registerumbenennung im Zusammenhang mit der Out-of-Order-Ausführung beschrieben ist, sollte es sich verstehen, dass Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Implementierung des Prozessors auch separate Befehls- und Daten-Cache-Einheiten und eine gemeinsam genutzte L2-Cache-Einheit aufweist, können alternative Implementierungen einen einzelnen internen Cache sowohl für Anweisungen als auch Daten, wie zum Beispiel einen internen Level-1(L1)-Cache oder mehrere interne Cache-Level, aufweisen. In einigen Implementierungen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, aufweisen. Alternativ kann sich der gesamte Cache auch außerhalb des Kerns und/oder des Prozessors befinden.
-
5B ist ein Blockdiagramm, das eine In-Order-Pipeline und eine Registerumbenennungsphase, eine Out-of-Order-Ausgabe-/Ausführungspipeline zeigt, die von dem Prozessor 500 der 5A gemäß einigen Implementierungen der Offenbarung implementiert wird. Die Kästchen mit durchgezogenen Linien in 5B veranschaulichen eine In-Order-Pipeline 501, während die Kästchen mit gestrichelten Linien eine Registerumbenennungs- und Out-of-Order-Ausgabe-/Ausführungspipeline 503 veranschaulichen. In 5B weisen die Pipelines 501 und 503 eine Fetch-Phase 502, eine Längen-Decodierphase 504, eine Decodierphase 506, eine Zuweisungsphase 508, eine Umbenennungsphase 510, eine Scheduling-Phase 512 (auch als Dispatch- oder Issue-Phase bekannt), eine Registerlese-/Speicherlesephase 514, eine Ausführungsphase 516, eine Rückschreib-/Speicherschreibphase 518, eine Ausnahmenbearbeitungsphase 522 und eine Commit-Phase 524 auf. In einigen Implementierungen kann die Reihenfolge der Phasen 502-524 anders als veranschaulicht sein und ist nicht auf die in 5B gezeigte spezifische Reihenfolge beschränkt.
-
6 veranschaulicht ein Blockdiagramm der Mikroarchitektur für einen Prozessor 600, die Logikschaltungen eines Prozessors oder einer integrierten Schaltung aufweist, die eine Hardwareunterstützung zur Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software gemäß einer Implementierung der Offenbarung implementiert. In einigen Implementierungen kann ein Befehl gemäß einer Implementierung implementiert werden, um auf Datenelementen der Größen Byte, Wort, Doppelwort, Quadwort usw., sowie Datentypen, wie etwa Ganzzahl-Datentypen mit einfacher und doppelter Genauigkeit und Gleitkommazahl-Datentypen mit einfacher und doppelter Genauigkeit zu arbeiten. In einer Implementierung ist das In-Order-Frontend 601 der Teil des Prozessors 600, der auszuführende Befehle holt (engl. fetch) und sie für die spätere Verwendung in der Prozessor-Pipeline vorbereitet. Die Implementierungen der Seitenergänzungen und des Kopierens von Inhalten können in dem Prozessor 600 implementiert sein.
-
Das Frontend 601 kann mehrere Einheiten aufweisen. In einer Implementierung holt der Befehls-Prefetcher 616 Befehle aus dem Speicher und führt sie einem Befehlsdecodierer 618 zu, der sie wiederum decodiert oder interpretiert. Das Prefetching kann unter Verwendung des KSEL einer ursprünglichen Bedarfsanforderung, die den Befehls-Prefetcher 616 trainiert hat, erfolgen. Zum Beispiel decodiert in einer Implementierung der Decodierer einen empfangenen Befehl in eine oder mehrere Operationen, die als „Mikrobefehle“ oder „Mikrooperationen“ (auch Mikro-op oder uops genannt) bezeichnet werden, welche die Maschine ausführen kann. In anderen Implementierungen parst der Decodierer den Befehl in einen Opcode und entsprechende Daten- und Steuerfelder, die von der Mikroarchitektur verwendet werden, um gemäß einer Implementierung Operationen durchzuführen. In einer Implementierung nimmt der Spuren-Cache 630 decodierte uops auf und stellt sie in nach Programm geordneten Sequenzen oder Spuren in der uop-Warteschlange 634 zur Ausführung zusammen. Wenn der Spuren-Cache 630 auf einen komplexen Befehl stößt, stellt das Mikrocode-ROM (oder -RAM) 632 die für die Erledigung der Operation erforderlichen uops bereit.
-
Einige Befehle werden in eine einzige Mikro-op umgewandelt, während andere mehrere Mikro-ops benötigen, um die vollständige Operation zu erledigen. In einer Implementierung, wenn mehr als vier Mikro-ops zur Erledigung eines Befehls benötigt werden, greift der Decodierer 618 auf das Mikrocode-ROM 632 zu. Bei einer Implementierung kann ein Befehl in eine kleine Anzahl von Mikro-ops für die Verarbeitung im Befehlsdecodierer 618 decodiert werden. In einer weiteren Implementierung kann ein Befehl in dem Mikrocode-ROM 632 gespeichert werden, falls eine Anzahl von Mikro-ops benötigt wird, um die Operation fertigzustellen. Der Spuren-Cache 630 bezieht sich auf ein programmierbares Logik-Array (PLA) als Einstiegspunkt, um einen korrekten Mikrobefehlszeiger zum Lesen der Mikrocode-Sequenzen zu bestimmen, um einen oder mehrere Befehle gemäß einer Implementierung aus dem Mikrocode-ROM 632 zu erledigen. Nachdem das Mikrocode-ROM 632 die Sequenzierung von Mikro-ops für einen Befehl beendet hat, nimmt das Frontend 601 der Maschine das Fetching von Mikro-ops aus dem Spuren-Cache 630 wieder auf.
-
In der Out-of-Order-Ausführungs-Engine 603 werden die Befehle für die Ausführung vorbereitet. Die Out-of-Order-Ausführungslogik verfügt über eine Anzahl von Puffern, um den Fluss der Befehle zu glätten und neu zu ordnen, um die Leistung zu optimieren, während diese die Pipeline durchlaufen und für die Ausführung geplant werden. Die Zuweiserlogik weist die Maschinenpuffer und Ressourcen zu, die jede uop zur Ausführung benötigt. Die Registerumbenennungslogik benennt Logikregister auf Einträge in einem Registersatz um. Der Zuweiser weist auch jeder uop in einer der beiden uop-Warteschlangen, eine für Speicheroperationen und eine für Nicht-Speicheroperationen, einen Eintrag zu, und zwar vor den Befehls-Schedulern: Speicher-Scheduler, schneller Scheduler 602, langsamer/allgemeiner Gleitkomma-Scheduler 604 und einfacher Gleitkomma-Scheduler 606. Die uop-Scheduler 602, 604, 606 bestimmen basierend auf der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, welche die uops zum Erledigen ihrer Operation benötigen, wann ein uop zur Ausführung bereit ist. Der schnelle Scheduler 602 einer Implementierung kann auf jeder Hälfte des Haupttaktzyklus planen, während die anderen Scheduler nur einmal pro Hauptprozessortaktzyklus planen können. Die Scheduler vermitteln für die Dispatch-Ports, um uops zur Ausführung einzuplanen.
-
Registersätze 608, 610, sitzen zwischen den Schedulern 602, 604, 606 und den Ausführungseinheiten 612, 614, 616, 618, 620, 622, 624 in dem Ausführungsblock 611. Für Ganzzahl- bzw. Gleitkommaoperationen gibt es jeweils einen separaten Registersatz 608, 610. Jeder Registersatz 608, 610 einer Implementierung weist auch ein Bypass-Netzwerk auf, das gerade erledigte Ergebnisse, die noch nicht in den Registersatz geschrieben wurden, umleiten oder an neue abhängige uops weiterleiten kann. Der Ganzzahlregistersatz 608 und der Gleitkommaregistersatz 610 sind auch in der Lage, Daten miteinander zu kommunizieren. Bei einer Implementierung wird der Ganzzahlregistersatz 608 in zwei separate Registersätze aufgeteilt, einen Registersatz für die 32-Bits Daten niedriger Ordnung und eine zweite Registerdatei für die 32-Bits Daten hoher Ordnung. Der Gleitkommaregistersatz 610 einer Implementierung weist 128-Bit breite Einträge auf, da Gleitkommabefehle typischerweise Operanden von einer Breite von 64 bis 128 Bits aufweisen.
-
Der Ausführungsblock 611 enthält die Ausführungseinheiten 612, 614, 616, 618, 620, 622, 624, in denen die Befehle tatsächlich ausgeführt werden. Dieser Abschnitt weist die Registersätze 608, 610 auf, welche die Ganzzahl- und Gleitkommadaten-Operandenwerte speichern, welche die Mikrobefehle zur Ausführung benötigen. Der Prozessor 600 einer Implementierung umfasst eine Anzahl von Ausführungseinheiten: Adressgenerierungseinheit (AGU) 612, AGU 614, schnelle ALU 616, schnelle ALU 618, langsame ALU 620, Gleitkomma-ALU 612, Gleitkommabewegungseinheit 614. Bei einer Implementierung führen die Gleitkomma-Ausführungsblöcke 612, 614 Gleitkomma-, MMX-, SIMD- und SSE- oder andere Operationen aus. Die Gleitkomma-ALU 612 einer Implementierung weist einen 64-Bit-mal-64-Bit-Gleitkomma-Teiler zur Ausführung von Divisions-, Quadratwurzel- und Rest-Mikro-ops auf. Für Implementierungen der Offenbarung können Befehle, die einen Gleitkommawert beinhalten, mit der Gleitkommahardware abgearbeitet werden.
-
In einer Implementierung laufen die ALU-Operationen zu den Hochgeschwindigkeits-ALU-Ausführungseinheiten 616, 618. Die schnellen ALUs 616, 618, einer Implementierung können schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. Bei einer Implementierung gehen die meisten komplexen Ganzzahl-Operationen an die langsame ALU 620, da die langsame ALU 620 Ganzzahl-Ausführungshardware für Operationen mit langer Latenzzeit aufweist, wie etwa einen Multiplikator, Verschiebungen, Flag-Logik und Sprungverarbeitung. Lade-/Speicher-Operationen des Speichers werden von den AGUs 622, 624 ausgeführt. Für eine Implementierung werden die Ganzzahl-ALUs 616, 618, 620 im Zusammenhang mit der Durchführung von Ganzzahl-Operationen auf 64-Bit-Daten-Operanden beschrieben. In alternativen Implementierungen können die ALUs 616, 618, 620 implementiert werden, um eine Vielzahl von Datenbits zu unterstützen, einschließlich 16, 32, 128, 256 usw. In ähnlicher Weise können die Gleitkommaeinheiten 622, 624 implementiert werden, um eine Reihe von Operanden mit Bits verschiedener Breite zu unterstützen. Bei einer Implementierung können die Gleitkommaeinheiten 622, 624 mit 128 Bit breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Befehlen arbeiten.
-
In einer Implementierung leiten die uops-Scheduler 602, 604, 606 abhängige Operationen ein, bevor die Ausführung der übergeordneten Last beendet ist. Da uops in dem Prozessor 600 spekulativ geplant und ausgeführt werden, weist der Prozessor 600 auch Logik zum Abarbeiten von Speicherfehlschlägen auf. Wenn eine Datenladung in dem Daten-Cache fehlschlägt, können abhängige Operationen in der Pipeline am Laufen sein, die den Scheduler mit vorübergehend unkorrekten Daten verlassen haben. Ein Wiederholungsmechanismus verfolgt Befehle, die unkorrekte Daten verwenden, und führt sie erneut aus. Nur die abhängigen Operationen müssen wiederholt werden und die unabhängigen können erledigt werden. Die Scheduler und der Replay-Mechanismus einer Implementierung eines Prozessors sind auch dazu ausgelegt, Befehlssequenzen für Text-String-Vergleichsoperationen abzufangen.
-
Der Begriff „Register“ kann sich auf interne Prozessorspeicherorte beziehen, die als Teil der Befehle zum Identifizieren von Operanden verwendet werden. Mit anderen Worten, Register können jene sein, die von außerhalb des Prozessors (aus der Perspektive des Programmierers gesehen) verwendbar sind. Die Register einer Implementierung sollten jedoch nicht auf einen bestimmten Schaltungstyp beschränkt sein. Vielmehr ist ein Register einer Implementierung in der Lage, Daten zu speichern und bereitzustellen und die hierin beschriebenen Funktionen durchzuführen. Die hierin beschriebenen Register können durch Beschaltung innerhalb eines Prozessors unter Verwendung irgendeiner Anzahl unterschiedlicher Techniken implementiert werden, wie etwa dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. In einer Implementierung speichern Ganzzahl-Register 32-Bit-Ganzzahl-Daten. Ein Registersatz einer Implementierung enthält auch acht Multimedia-SIMD-Register für gepackte Daten.
-
Für die Erörterung hierin werden die Register als Datenregister verstanden, die für die Aufnahme gepackter Daten ausgelegt sind, wie etwa 64 Bit breite MMX™-Register (in einigen Fällen auch als „mm“-Register bezeichnet) in Mikroprozessoren, die mit der MMX-Technologie der Intel Corporation aus Santa Clara, Kalifornien, ausgestattet sind. Diese MMX-Register, die sowohl in Ganzzahl- als auch in Gleitkommaform verfügbar sind, können mit gepackten Datenelementen arbeiten, die SIMD- und SSE-Befehle begleiten. In ähnlicher Weise können auch 128 Bit breite XMM-Register, die sich auf die SSE2-, SSE3-, SSE4- oder darüber hinausgehende (allgemein als „SSEx“ bezeichnet) Technologien beziehen, zur Aufnahme solcher gepackten Datenoperanden verwendet werden. In einer Implementierung müssen die Register beim Speichern von gepackten Daten und Ganzzahl-Daten nicht zwischen den beiden Datentypen unterscheiden. In einer Implementierung sind Ganzzahl und Gleitkomma entweder im gleichen Registersatz oder in unterschiedlichen Registersätzen enthalten. Darüber hinaus können in einer Implementierung Gleitkomma- und Ganzzahldaten in unterschiedlichen Registern oder in denselben Registern gespeichert werden.
-
Implementierungen können in vielen verschiedenen Systemtypen implementiert werden. Mit Bezug auf 7 ist ein Blockdiagramm eines Multiprozessorsystems 700 gezeigt, das eine Hardwareunterstützung zur Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software gemäß einer Implementierung implementieren kann. Wie in 7 gezeigt, ist das Multiprozessorsystem 700 ein Punkt-zu-Punkt-Verschaltungssystem und umfasst einen ersten Prozessor 770 und einen zweiten Prozessor 780, die über eine Punktzu-Punkt-Verschaltung 750 gekoppelt sind. Wie in 7 gezeigt, kann jeder der Prozessoren 770 und 780 ein Mehrkernprozessor sein, der einen ersten und einen zweiten Prozessorkern enthält (d. h. die Prozessorkerne 774a und 774b und die Prozessorkerne 784a und 784b), obwohl möglicherweise noch viel mehr Kerne in den Prozessoren vorhanden sein können. Obwohl mit zwei Prozessoren 770, 780 gezeigt, versteht es sich, dass der Schutzbereich der Offenbarung nicht darauf beschränkt ist. In anderen Implementierungen können ein oder mehrere zusätzliche Prozessoren in einem gegebenen Prozessor vorhanden sein.
-
Die Prozessoren 770 und 780 sind mit integrierten den Speichercontroller-Einheiten 772 bzw. 782 gezeigt. Der Prozessor 770 weist als Teil seiner Bus-Controller-Einheiten auch die Punkt-zu-Punkt(P-P)Schnittstellen 776 und 788 auf; in ähnlicher Weise weist der zweite Prozessor 780 die P-P-Schnittstellen 786 und 788 auf. Die Prozessoren 770, 780 können Informationen über eine Punkt-zu-Punkt(P-P)-Schnittstelle 750 unter Verwendung der P-P-Schnittstellenschaltungen 778, 788 austauschen. Wie in 7 dargestellt, koppeln die IMCs 772 und 782 die Prozessoren mit den jeweiligen Speichern, nämlich einem Speicher 732 und einem Speicher 734, welche Abschnitte des Hauptspeichers sein können, die lokal an den jeweiligen Prozessoren angebracht sind.
-
Die Prozessoren 770, 780 können über einzelne P-P-Schnittstellen 752, 754 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 776, 794, 786, 798 Informationen mit einem Chipsatz 790 austauschen. Der Chipsatz 790 kann auch Informationen mit einer Hochleistungsgrafikschaltung 738 über eine Hochleistungsgrafikschnittstelle 739 austauschen.
-
Der Chipsatz 790 kann über eine Schnittstelle 796 mit einem ersten Bus 716 gekoppelt sein. In einer Implementierung kann der erste Bus 716 ein PCI-Bus (Peripheral Component Interconnect) oder ein Bus wie etwa ein PCI-Express-Bus oder Verschaltungsbus sein, obwohl der Schutzbereich der Offenbarung nicht darauf beschränkt ist.
-
Mit Bezug auf 10 ist ein Blockdiagramm eines dritten Systems 1000 gezeigt, das eine Hardwareunterstützung zur Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software gemäß einer Implementierung der Offenbarung implementieren kann. Gleiche Elemente in den 7 und 10 tragen gleiche Bezugszeichen, und gewisse Aspekte der 10 wurden in 7 weggelassen, um andere Aspekte der 7 nicht zu verschleiern.
-
8 veranschaulicht, dass die Prozessoren 870, 880 integrierten Speicher und E/A-Steuerlogik („CL“) 872 bzw. 892 aufweisen können. Bei mindestens einer Implementierung kann die CL 872, 882 integrierte Speichercontroller-Einheiten wie hierin beschrieben aufweisen. Des Weiteren kann die CL 872, 892 auch E/A-Steuerlogik aufweisen. 8 veranschaulicht, dass die Speicher 832, 834 mit der CL 872, 892 gekoppelt sind, und dass die E/A-Vorrichtungen 814 ebenfalls mit der Steuerlogik 872, 892 gekoppelt sind. Legacy-E/A-Vorrichtungen 815 sind mit dem Chipsatz 890 gekoppelt.
-
9 ist ein beispielhaftes System-on-a-Chip (SoC) 900, das einen oder mehrere der Kerne 902A ... 902N aufweisen kann, die Hardwareunterstützung für die Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software implementieren können. Andere bekannte Systemausgestaltungen und -konfigurationen für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienplayer, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielfalt an Systemen oder elektronischen Vorrichtungen zum Einbringen eines Prozessors und/oder einer anderen Ausführungslogik, wie hierin offenbart, allgemein geeignet.
-
Innerhalb des beispielhaften SoC 900 der 9 sind gestrichelte Kästchen Merkmale auf moderneren SoCs. Eine oder mehrere Verschaltungseinheit(en) 902 können gekoppelt werden mit: einem Anwendungsprozessor 917, der einen Satz von einem oder mehreren Kernen 902A-N und gemeinsame Cache-Einheit(en) 906 aufweist; einer Systemagenteneinheit 910; einer oder mehreren Bus-Controller-Einheit(en) 916; einer oder mehreren integrierten Speichercontroller-Einheit(en) 914; einem Satz von einem oder mehreren Medienprozessoren 920, die eine integrierte Grafiklogik 908, einen Bildprozessor 924 zum Bereitstellen von Standbild- und/oder Videokamerafunktionalität, einen Audioprozessor 926 zum Bereitstellen von Hardware-Audiobeschleunigung und einen Videoprozessor 928 zum Bereitstellen von Videocodier- /Decodierbeschleunigung aufweisen können; einer statischen Direktzugriffsspeicher-(SRAM)-Einheit 930; einer DMA(Direct Memory Access)-Einheit 932; und einer Anzeigeeinheit 940 zum Koppeln mit einem oder mehreren externen Anzeigen.
-
Unter Bezugnahme auf 10 ist eine Implementierung einer System-on-Chip (SoC)-Ausgestaltung dargestellt, die Hardwareunterstützung für die Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software gemäß Implementierungen der Offenbarung implementieren kann. Als veranschaulichendes Beispiel ist das SoC 1000 in einem Benutzer-Equipment (UE) enthalten. In einer Implementierung bezieht sich UE auf irgendeine Vorrichtung, die von einem Endbenutzer zur Kommunikation verwendet wird, wie etwa ein Handtelefon, Smartphone, Tablet, ultradünnes Notebook, Notebook mit Breitbandadapter oder irgendeine andere ähnliche Kommunikationsvorrichtung. Ein UE kann sich mit einer Basisstation oder einem Knoten verbinden, der in seiner Art einer Mobilstation (MS) in einem GSM-Netz entsprechen kann. Die Implementierungen der Seitenergänzungen und des Kopierens von Inhalten können in dem SoC 1000 implementiert sein.
-
Dabei umfasst das SoC 1000 2 Kerne, 1006 und 1007. Ähnlich wie bei der obigen Erörterung können die Kerne 1006 und 1007 einer Befehlssatzarchitektur entsprechen, wie etwa einem Prozessor mit dem Intel® Architecture Core™, einem Prozessor von Advanced Micro Devices, Inc.
(AMD), einem MIPS-basierten Prozessor, einer ARMbasierten Prozessorausgestaltung oder einem Kunden davon, sowie deren Lizenznehmer oder Anwender. Die Kerne 1006 und 1007 sind mit der Cache-Steuerung 1008 gekoppelt, die der Bus-Schnittstelleneinheit 1009 und dem L2-Cache 1010 zugeordnet ist, um mit anderen Teilen des Systems 1000 zu kommunizieren. Die Verschaltung 1011 (Interconnect) weist eine chipinterne Verschaltung auf, wie etwa ein IOSF, AMBA oder andere oben erörterte Verschaltungen, die einen oder mehrere Aspekte der beschriebenen Offenbarung implementieren können.
-
In einer Implementierung kann der SDRAM-Controller 1040 über den Cache 1010 mit der Verschaltung 1011 verbunden sein. Die Verschaltung 1011 stellt Kommunikationskanäle zu den anderen Komponenten bereit, wie etwa einem Subscriber Identity Module (SIM) 1030 als Schnittstelle zu einer SIM-Karte, einem Boot-ROM 1035 zur Aufnahme des Boot-Codes für die Ausführung durch die Kerne 1006 und 1007 zum Initialisieren und Booten des SoC 1000, einem SDRAM-Controller 1040 als Schnittstelle zu einem externen Speicher (z. B. DRAM 1060), einem Flash-Controller 1045 als Schnittstelle zu einem nichtflüchtigen Speicher (z. B. Flash 1065), einer Peripheriesteuerung 1050 (z. B. Serial Peripheral Interface) als Schnittstelle zu Peripheriegeräten, Videocodecs 1020 und einer Videoschnittstelle 1025 zum Anzeigen und Empfangen von Eingaben (z. B. berührungsaktivierten Eingaben), einer GPU 1015 zur Durchführung von grafikbezogenen Berechnungen usw. Jede dieser Schnittstellen kann Aspekte der hierin beschriebenen Implementierungen einbringen.
-
Darüber hinaus veranschaulicht das System Peripheriegeräte für die Kommunikation, wie etwa ein Bluetooth®-Modul 1070, ein 3G-Modem 1075, GPS 1080 und Wi-Fi® 1085. Wie oben erwähnt, weist ein UE ein Funkgerät zur Kommunikation auf. Infolgedessen kann es sein, dass diese peripheren Kommunikationsmodule nicht alle enthalten sind. In einem UE sollte jedoch irgendeine Form von Funkgerät für die externe Kommunikation enthalten sein.
-
11 zeigt eine schematische Darstellung einer Maschine in der beispielhaften Form eines Rechensystems 1100, in dem ein Satz von Befehlen, welche die Maschine veranlassen, Hardwareunterstützung für die Einschränkung der Verwendung von Verschlüsselungsschlüsseln durch nicht vertrauenswürdige Software gemäß einer oder mehrerer der hierin diskutierten Methoden zu implementieren. In alternativen Implementierungen kann die Maschine mit anderen Maschinen in einem LAN, einem Intranet, einem Extranet oder dem Internet verbunden (z. B. vernetzt) sein. Die Maschine kann in der Funktion eines Servers oder einer Client-Vorrichtung in einer Client-Server-Netzwerkumgebung oder als Peer-Maschine in einer Peer-to-Peer-Netzwerkumgebung (oder verteilten Netzwerkumgebung) arbeiten. Die Maschine kann ein Personal-Computer (PC), ein Tablet-PC, eine Set-Top-Box (STB), ein Persönlicher Digitaler Assistent (PDA), ein Mobiltelefon, ein Webgerät, ein Server, ein Netzwerkrouter, Schalter oder eine Brücke oder irgendeine Maschine sein, die dazu in der Lage ist, einen Befehlssatz auszuführen (sequenziell oder in anderer Weise), der Aktionen spezifiziert, die durch diese Maschine vorzunehmen sind. Ferner wird zwar nur eine einzelne Maschine veranschaulicht, der Begriff „Maschine“ soll jedoch auch so verstanden werden, dass er irgendeine Sammlung von Maschinen, die einzeln oder gemeinsam einen Satz (oder eine Vielzahl von Sätzen) von Befehlen zur Durchführung irgendeiner oder mehrerer der hierin erörterten Methoden ausführen, umfasst. Die Implementierungen der Seitenergänzungen und des Kopierens von Inhalten können in dem Rechensystem 1100 implementiert sein.
-
Das Rechensystem 1100 weist eine Verarbeitungsvorrichtung 1102, einen Hauptspeicher 1104 (z. B. Flash-Speicher, dynamischen Direktzugriffsspeicher (DRAM) (wie etwa einen synchronen DRAM (SDRAM) oder DRAM (RDRAM) usw.), einen statischen Speicher 1106 (z. B. Flash-Speicher, statischen Direktzugriffsspeicher (SRAM) usw.) und eine Datenspeicherungsvorrichtung 1116, die über einen Bus 1108 miteinander kommunizieren, auf.
-
Die Verarbeitungsvorrichtung 1102 stellt eine oder mehrere Allzweck-Verarbeitungsvorrichtungen, wie etwa einen Mikroprozessor, eine Zentraleinheit oder dergleichen dar. Insbesondere kann die Verarbeitungsvorrichtung ein CISC(Complex Instruction Set Computing)-Mikroprozessor, ein RISC(Reduced Instruction Set Computer)-Mikroprozessor, ein VLIW(Very Long Instruction Word)-Mikroprozessor oder ein Prozessor, der andere Befehlssätze implementiert, oder Prozessoren, die eine Kombination von Befehlssätzen implementieren, sein. Die Verarbeitungsvorrichtung 1102 kann auch eine oder mehrere Spezialzweck-Verarbeitungsvorrichtungen, wie etwa eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares Gate-Array (FPGA), ein digitaler Signalprozessor (DSP), ein Netzwerkprozessor oder dergleichen, sein. In einer Implementierung kann die Verarbeitungsvorrichtung 1102 einen oder mehrere Prozessorkerne aufweisen. Die Verarbeitungsvorrichtung 1102 ist dazu konfiguriert, die Verarbeitungslogik 1126 zum Durchführen der hierin erörterten Operationen auszuführen.
-
In einer Implementierung kann die Verarbeitungsvorrichtung 1102 Teil eines Prozessors oder einer integrierten Schaltung sein, welche(r) die offenbarte LLC-Caching-Architektur aufweist. Alternativ kann das Rechensystem 1100 andere Komponenten als hierin beschrieben aufweisen. Es sollte sich verstehen, dass der Kern Multithreading (die Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf eine Vielzahl von Arten tun kann, einschließlich zeitlich gesplittetes Multithreading, gleichzeitiges Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für den der physische Kern ein gleichzeitiges Multithreading durchführt) oder eine Kombination davon (z. B. zeitlich gesplittetes Fetching und Decodieren und gleichzeitiges Multithreading danach, wie bei der Hyperthreading-Technologie von Intel®).
-
Das Rechensystem 1100 kann ferner eine Netzwerkschnittstellenvorrichtung 1118 aufweisen, die kommunikativ mit einem Netzwerk 1119 gekoppelt ist. Das Rechensystem 1100 kann auch eine Videoanzeigevorrichtung 1110 (z. B. eine Flüssigkristallanzeige (LCD) oder eine Kathodenstrahlröhre (CRT)), eine alphanumerische Eingabevorrichtung 1112 (z. B. eine Tastatur), eine Cursorsteuervorrichtung 1114 (z. B. eine Maus), eine Signalerzeugungsvorrichtung 1120 (z. B. einen Lautsprecher) oder andere Peripherievorrichtungen aufweisen. Darüber hinaus kann das Rechensystem 1100 eine Grafikverarbeitungseinheit 1122, eine Videoverarbeitungseinheit 1128 und eine Audioverarbeitungseinheit 1132 aufweisen. In einer weiteren Implementierung kann das Rechensystem 1100 einen Chipsatz (nicht veranschaulicht) aufweisen, der sich auf eine Gruppe von integrierten Schaltungen oder Chips bezieht, die ausgestaltet sind, um mit der Verarbeitungsvorrichtung 1102 zu arbeiten, und die Kommunikationen zwischen der Verarbeitungsvorrichtung 1102 und externen Vorrichtungen steuert. Zum Beispiel kann der Chipsatz ein Satz von Chips auf einer Hauptplatine sein, der die Verarbeitungsvorrichtung 1102 mit sehr schnellen Vorrichtungen, wie etwa den Hauptspeicher 1104 und Grafikcontroller, sowie die Verarbeitungsvorrichtung 1102 mit langsameren Peripheriebussen von Peripheriegeräten, wie USB-, PCI- oder ISA-Bussen verknüpft.
-
Die Datenspeicherungsvorrichtung 1116 kann ein computerlesbares Speicherungsmedium 1124 aufweisen, auf dem Software 1126 gespeichert ist, die eine oder mehrere der hier beschriebenen Methoden verkörpert. Die Software 1126 kann auch ganz oder zumindest teilweise innerhalb des Hauptspeichers 1104 als Befehle 1126 und/oder innerhalb der Verarbeitungsvorrichtung 1102 als Verarbeitungslogik während ihrer Ausführung durch das Rechensystem 1100 liegen; der Hauptspeicher 1104 und die Verarbeitungsvorrichtung 1102 bilden ebenfalls computerlesbare Speicherungsmedien.
-
Das computerlesbare Speicherungsmedium 1124 kann auch verwendet werden, um Befehle 1126 unter Nutzung der Verarbeitungsvorrichtung 1102 und/oder einer Software-Bibliothek, die Verfahren enthält, welche die obigen Anwendungen aufrufen, zu speichern. Zwar wird das computerlesbare Speicherungsmedium 1124 in einer beispielhaften Implementierung als ein einzelnes Medium gezeigt, aber der Begriff „computerlesbares Speicherungsmedium“ sollte so verstanden werden, dass er ein einzelnes Medium oder mehrere Medien (z. B. eine zentralisierte oder verteilte Datenbank, und/oder zugehörige Caches und Server) umfasst, die den einen oder die mehreren Sätze von Befehlen speichern. Unter dem Begriff „computerlesbares Speicherungsmedium“ ist auch zu verstehen, dass er jegliches Medium umfasst, das in der Lage ist, einen Satz von Befehlen zur Ausführung durch die Maschine zu speichern, zu codieren oder zu führen, welche die Maschine veranlassen, irgendeine oder mehrere der Methoden der offenbarten Implementierungen durchzuführen. Der Begriff „computerlesbares Speicherungsmedium“ soll dementsprechend so verstanden werden, jedoch nicht darauf beschränkt sein, dass er Festkörperspeicher und optische und magnetische Medien umfasst.
-
Die folgenden Beispiele betreffen weitere Implementierungen.
-
Beispiel 1: Ein Prozessor umfassend einen Prozessorkern zum Ausführen einer Anwendung; ein Schlüsselattributtabellen(KAT)-Register zum Speichern einer Vielzahl von Schlüsselkennungen (KeyIDs), die der Anwendung zugeordnet sind, wobei eine KeyID der Vielzahl von KeyIDs einen Verschlüsselungsschlüssel identifiziert; eine Auswahlschaltung, die mit dem KAT-Register gekoppelt ist, wobei die Auswahlschaltung die KeyID aus dem KAT-Register basierend auf einem KeyID-Selektor (KSEL) auswählt, wobei der KSEL einem Speicherblock zugeordnet ist, auf den ein Zugriff durchgeführt wird; einen Cache, der mit dem Prozessorkern gekoppelt ist, wobei der Cache eine physische Adresse, Daten und die KeyID des Speicherblocks, auf den ein Zugriff durchgeführt wurde, speichert, wobei die KeyID ein Attribut ist, das dem Speicherblock zugeordnet ist; und einen Speichercontroller, der mit dem Cache gekoppelt ist, um die Daten des in dem Cache gespeicherten Speicherblocks basierend auf dem durch die KeyID identifizierten Verschlüsselungsschlüssel zu verschlüsseln, wenn sie aus dem Cache in den Hauptspeicher geräumt werden.
-
Beispiel 2: Der Gegenstand von Beispiel 1, wobei der Prozessorkern einen oder mehrere logische Prozessoren ausführt, die jeweils einem von einem oder mehreren KAT-Registern zugeordnet sind, und wobei ein logischer Prozessor des einen oder der mehreren logischen Prozessoren bei Aktivierung der virtuellen Maschine auf einem dem KAT-Register zugeordneten logischen Prozessor die Vielzahl von KeyIDs in das KAT-Register lädt.
-
Beispiel 3: Der Gegenstand nach einem der Beispiele 1-2 ferner umfassend einen mit dem Speichercontroller gekoppelten Verschlüsselungsschlüssel-Cache, wobei der Verschlüsselungsschlüssel-Cache Verschlüsselungsschlüssel speichert, die aktiven Key-IDs zugeordnet sind, wobei der Prozessorkern Verschlüsselungsschlüssel, die inaktiven Key-IDs zugeordnet sind, aus dem Verschlüsselungsschlüssel-Cache in einen reservierten Bereich des Hauptspeichers auslagert, und wobei die Verschlüsselungsschlüssel beim Auslagern in den reservierten Bereich des Hauptspeichers durch den Speichercontroller verschlüsselt werden.
-
Beispiel 4: Der Gegenstand nach einem der Beispiele 1-3, wobei der Cache einen Daten-Cache zum Speichern der Daten des Speicherblocks und einen KeyID-Cache zum Speichern der KeyID des Speicherblocks umfasst.
-
Beispiel 5: Der Gegenstand nach einem der Beispiele 1-4 ferner umfassend eine erste Speichervorrichtung, die betriebswirksam mit einem ersten logischen Prozessor gekoppelt ist, wobei sich der KeyID-Cache auf der ersten Speichervorrichtung befindet; und eine zweite Speichervorrichtung, die betriebswirksam mit einem zweiten logischen Prozessor und der ersten Speichervorrichtung gekoppelt ist, wobei sich ein zweiter KeyID-Cache auf der zweiten Speichervorrichtung befindet.
-
Beispiel 6; Der Gegenstand nach einem der Beispiele 1-5, wobei der KSEL in eine lineare Adresse eingebettet ist, die einen Zeiger auf die physische Adresse des Speicherblocks umfasst.
-
Beispiel 7: Der Gegenstand nach einem der Beispiele 1-6, wobei der KSEL in einer Seitentabelle als ein einer physischen Speicherseite zugeordnetes Attribut gespeichert ist, wobei sich der Speicherblock innerhalb der physischen Speicherseite befindet und wobei die physische Adresse der physischen Speicherseite aus einer von der Anwendung bereitgestellten linearen Adresse bestimmt wird.
-
Beispiel 8: Der Gegenstand nach einem der Beispiele 1-7, wobei der Speichercontroller eine Gesamtspeicherverschlüsselungs-Engine umfasst.
-
Beispiel 9: Ein System umfassend einen Hauptspeicher; einen Prozessor, der mit dem Hauptspeicher gekoppelt ist, wobei der Prozessor Folgendes umfasst: einen Prozessorkern zum Ausführen einer Anwendung; ein Schlüsselattributtabellen(KAT)-Register zum Speichern einer Vielzahl von Schlüsselkennungen (KeyIDs), die der Anwendung zugeordnet sind, wobei eine KeyID der Vielzahl von KeyIDs einen Verschlüsselungsschlüssel identifiziert; eine Auswahlschaltung, die mit dem KAT-Register gekoppelt ist, wobei die Auswahlschaltung die KeyID aus dem KAT-Register basierend auf einem KeyID-Selektor (KSEL) auswählt, wobei der KSEL einer Speicherseite zugeordnet ist, auf die ein Zugriff durchgeführt wird; einen Cache, der mit dem Prozessorkern gekoppelt ist, wobei der Cache eine physische Adresse, Daten und die KeyID der Speicherseite, auf die ein Zugriff durchgeführt wurde, speichert, wobei die KeyID ein Attribut ist, das der Speicherseite zugeordnet ist; und einen Speichercontroller, wobei der Speichercontroller die Speicherseite verschlüsselt, während die Speicherseite aus dem System in den Hauptspeicher geräumt wird, unter Verwendung des durch die KeyID identifizierten Verschlüsselungsschlüssels.
-
Beispiel 10: Der Gegenstand nach Beispiel 9, wobei der Prozessor ein Mehrkernprozessor ist, wobei der Mehrkernprozessor ferner Folgendes umfasst: einen zweiten Prozessorkern zum Ausführen einer zweiten Anwendung; ein zweites KAT-Register zum Speichern einer zweiten Vielzahl von KeyIDs, die der zweiten Anwendung zugeordnet sind, wobei eine zweite KeyID der zweiten Vielzahl von KeyIDs einen zweiten Verschlüsselungsschlüssel identifiziert; eine zweite Auswahlschaltung, die mit dem zweiten KAT-Register gekoppelt ist, wobei die zweite Auswahlschaltung die zweite KeyID aus dem zweiten KAT-Register basierend auf einem zweiten KSEL auswählt, wobei der zweite KSEL einer zweiten Speicherseite zugeordnet ist, auf die ein Zugriff durchgeführt wird; und einen zweiten Cache, der mit dem zweiten Prozessorkern gekoppelt ist, wobei der zweite Cache eine zweite physische Adresse, Daten und die zweite KeyID der zweiten Speicherseite, auf die ein Zugriff durchgeführt wurde, speichert, wobei die zweite KeyID ein Attribut ist, das der zweiten Speicherseite zugeordnet ist.
-
Beispiel 11: Der Gegenstand nach einem der Beispiele 9-10, wobei die Vielzahl von KeyIDs bei Aktivierung der Anwendung auf dem Prozessorkern in das KAT-Register geladen wird und die zweite Vielzahl von KeyIDs bei Aktivierung der zweiten Anwendung auf dem zweiten Prozessorkern in das zweite KAT-Register geladen wird.
-
Beispiel 12: Der Gegenstand nach einem der Beispiele 9-11, ferner umfassend einen Modusauswahlmultiplexer, um einen Legacy-Modus oder einen skalierbaren Verschlüsselungsmodus mit mehrfachen Schlüsseln auszuwählen, und wobei sich der Speichercontroller auf dem Prozessor befindet.
-
Beispiel 13: Der Gegenstand nach einem der Beispiele 9-12, ferner umfassend: einen mit dem Speichercontroller gekoppelten Verschlüsselungsschlüssel-Cache, wobei der Verschlüsselungsschlüssel-Cache Verschlüsselungsschlüssel speichert, die aktiven Key-IDs zugeordnet sind, wobei der Prozessorkern Verschlüsselungsschlüssel, die inaktiven Key-IDs zugeordnet sind, aus dem Verschlüsselungsschlüssel-Cache in einen reservierten Bereich des Systemspeichers auslagert, und wobei die Verschlüsselungsschlüssel beim Auslagern in den reservierten Bereich des Systemspeichers durch den Speichercontroller verschlüsselt werden.
-
Beispiel 14: Der Gegenstand nach einem der Beispiele 9-13, wobei der Verschlüsselungsschlüssel-Cache durch Hardware verwaltet wird, um inaktive Verschlüsselungsschlüssel in den reservierten Bereich auszulagern und aus dem Systemspeicher Verschlüsselungsschlüssel, die in dem KAT-Register geladenen KeyIDs zugeordnet sind, zu laden.
-
Beispiel 15: Der Gegenstand nach einem der Beispiele 9-14, wobei der Verschlüsselungsschlüssel-Cache durch eine Software verwaltet wird, die Verschlüsselungsschlüssel basierend auf der Verwendung der Verschlüsselungsschlüssel lädt und auslagert.
-
Beispiel 16 ist ein Verfahren, umfassend: Laden eines Schlüsselattributtabellen(KAT)-Registers mit einer oder mehreren Schlüsselkennungen (KeyIDs), die Verschlüsselungsschlüssel zum Verschlüsseln des von einer Anwendung verwendeten Speichers identifizieren, wobei die eine oder die mehreren KeyIDs eine Teilmenge aller KeyIDs, auf die ein System zugreifen kann, sind; Anfordern, durch eine Verarbeitungsvorrichtung, eines von der Anwendung zu verwendenden Speicherblocks; Auswählen, aus dem KAT-Register, einer einer Speicheranforderung zugeordneten KeyID, wobei die KeyID aus dem KAT-Register unter Verwendung einer Auswahlschaltung und eines Schlüsselkennungsselektors (KSEL) ausgewählt wird; und Speichern der KeyID in einem KeyID-Cache (KIC), wobei der KIC KeyIDs für jeden von dem System gecachten Speicherblock speichert.
-
Beispiel 17: Der Gegenstand nach Beispiel 16, ferner umfassend: Bestimmen, basierend auf der physischen Adresse des Speicherblocks, dass der Speicherblock von dem System gecacht wird; Bestimmen, dass der von dem System gecachte Speicherblock nicht der aus dem KAT-Register ausgewählten KeyID zugeordnet ist; Räumen des Speicherblocks aus dem Cache; und Abrufen des Speicherblocks aus dem Hauptspeicher, Cachen des Speicherblocks und Speichern der aus dem KAT-Register ausgewählten KeyID in dem KIC als dem Speicherblock zugeordnet.
-
Beispiel 18: Der Gegenstand nach einem der Beispiele 16-17, ferner umfassend: Bestimmen, basierend auf der physischen Adresse des Speicherblocks, dass der Speicherblock von dem System gecacht wird; Bestimmen, dass der von dem System gecachte Speicherblock der aus dem KAT-Register ausgewählten KeyID zugeordnet ist; und Erledigen der Speicheranforderung durch Abrufen des von dem System gecachten Speicherblocks.
-
Beispiel 19: Der Gegenstand nach einem der Beispiele 16-18, ferner umfassend: Auslagern von Verschlüsselungsschlüsseln, die inaktiven KeyIDs zugeordnet sind, aus einem Verschlüsselungsschlüssel-Cache in einen reservierten Bereich des Hauptspeichers; und Verschlüsseln der Verschlüsselungsschlüssel beim Auslagern der Verschlüsselungsschlüssel in den reservierten Bereich des Hauptspeichers.
-
Beispiel 20: Der Gegenstand nach einem der Beispiele 16-19, wobei die Anwendung eine virtuelle Maschine ist.
-
Beispiel 21: Eine Einrichtung umfassend Mittel zur Durchführung eines Verfahrens nach einem der Beispiele 16-20.
-
Beispiel 22: Mindestens ein maschinenlesbares Medium, umfassend eine Vielzahl von Befehlen, die bei Ausführung ein Verfahren bzw. eine Einrichtung nach einem der Beispiele 16-20 implementieren bzw. realisieren.
-
Beispiel 23 ist eine Einrichtung umfassend einen Prozessor, der dazu konfiguriert ist, das Verfahren nach einem der Beispiele 16-20 durchzuführen.
-
Die Offenbarung wurde zwar mit Bezug auf eine begrenzte Anzahl von Implementierungen beschrieben, aber für den Fachmann wird es sich verstehen, dass es zahlreiche Modifizierungen und Variationen davon gibt. Die angefügten Ansprüche sollen alle diese Modifizierungen und Variationen als innerhalb des Wesens und Schutzbereiches dieser Offenbarung fallend abdecken.
-
In der vorliegenden Beschreibung werden zahlreiche spezifische Details dargelegt, wie etwa Beispiele für spezifische Typen von Prozessoren und Systemkonfigurationen, spezifische Hardwarestrukturen, spezifische architektonische und mikroarchitektonische Details, spezifische Registerkonfigurationen, spezifische Befehlstypen, spezifische Systemkomponenten, spezifische Abmessungen/Höhen, spezifische Prozessor-Pipelinephasen und -operationen usw., um ein umfassendes Verständnis der Offenbarung zu bereitzustellen. Es ist jedoch für einen Fachmann offensichtlich, dass diese spezifischen Details nicht verwendet werden müssen, um die Offenbarung zu praktizieren. In anderen Fällen wurden bekannte Komponenten oder Verfahren, wie etwa spezifische und alternative Prozessorarchitekturen, spezifische Logikschaltungen/Code für beschriebene Algorithmen, spezifischer Firmware-Code, spezifische Verschaltungsoperationen, spezifische Logikkonfigurationen, spezifische Fertigungstechniken und -materialien, spezifische Compiler-Implementierungen, spezifischer Ausdruck von Algorithmen in Code, spezifische Abschalt- und Gating-Techniken/Logik und andere spezifische Betriebsdetails eines Computersystems nicht im Detail beschrieben, um die Offenbarung nicht unnötig zu verschleiern.
-
Die Implementierungen werden anhand des Bestimmens der Gültigkeit von Daten in Cache-Zeilen eines sektorbasierten Caches in spezifischen integrierten Schaltungen, wie etwa in Computerplattformen oder Mikroprozessoren, beschrieben. Die Implementierungen können auch auf andere Arten von integrierten Schaltungen und programmierbaren Logikbausteinen anwendbar sein. Zum Beispiel sind die offenbarten Implementierungen nicht auf Desktop-Computersysteme oder tragbare Computer, wie die Intel® Ultrabooks™ Computer, beschränkt. Sie können auch in anderen Vorrichtungen verwendet werden, wie etwa Handheld-Vorrichtungen, Tablets, anderen dünnen Notebooks, Systems-on-a-Chip(SoC)-Vorrichtungen und eingebetteten Anwendungen. Einige Beispiele für Handheld-Vorrichtungen umfassen Mobiltelefone, Internet-Protokoll-Vorrichtungen, Digitalkameras, Persönliche Digitale Assistenten (PDAs) und Handheld-PCs. Eingebettete Anwendungen umfassen typischerweise einen Mikrocontroller, einen digitalen Signalprozessor (DSP), ein System-on-a-Chip, Netzwerkcomputer (NetPC), Set-Top-Boxen, Netzwerk-Hubs, Wide-Area-Network(WAN)-Switches oder irgendein anderes System, das die unten gelehrten Funktionen und Operationen durchführen kann. Es wird beschrieben, dass das System irgendeine Art Computer oder eingebettetes System sein kann. Die offenbarten Implementierungen können insbesondere für Low-End-Vorrichtungen verwendet werden, wie tragbare Vorrichtungen (z. B. Uhren), elektronische Implantate, Sensor- und Steuerungsinfrastrukturvorrichtungen, Controller, SCADA(Supervisory Control and Data Acquisition)-Systeme oder dergleichen. Darüber hinaus sind die hierin beschriebenen Einrichtungen, Verfahren und Systeme nicht auf physische Computervorrichtungen beschränkt, sondern können sich auch auf Software-Optimierungen zur Energieeinsparung und -effizienz beziehen. Wie aus der folgenden Beschreibung leicht ersichtlich wird, sind die hierin beschriebenen Implementierungen von Verfahren, Einrichtungen und Systemen (ob bezogen auf Hardware, Firmware, Software oder eine Kombination davon) von entscheidender Bedeutung für eine „Grüne Technologie“-Zukunft, die sich im Gleichgewicht mit Leistungsüberlegungen befindet.
-
Obwohl die Implementierungen hierin mit Bezug auf einen Prozessor beschrieben sind, sind andere Implementierungen auf andere Arten von integrierten Schaltungen und Logikvorrichtungen anwendbar. Ähnliche Techniken und Lehren von Implementierungen der Offenbarung können auf andere Arten von Schaltungen oder Halbleitervorrichtungen angewendet werden, die von einem höheren Pipeline-Durchsatz und einer verbesserten Leistung profitieren können. Die Lehren der Implementierungen der Offenbarung sind auf jeglichen Prozessor oder jegliche Maschine anwendbar, die Datenmanipulationen durchführt. Die Offenbarung ist jedoch nicht auf Prozessoren oder Maschinen beschränkt, die 512-Bit-, 256-Bit-, 128-Bit-, 64-Bit-, 32-Bit- oder 16-Bit-Datenoperationen durchführen, sondern kann auf jeden Prozessor und jede Maschine angewendet werden, in denen eine Manipulation oder Verwaltung von Daten durchgeführt wird. Darüber hinaus stellt die Beschreibung hierin Beispiele bereit, und die begleitenden Zeichnungen zeigen verschiedene Beispiele zur Veranschaulichung. Diese Beispiele sollten jedoch nicht in einem einschränkenden Sinne verstanden werden, da sie lediglich Beispiele für Implementierungen der Offenbarung und keine abschließende Liste aller möglichen Implementierungen von Implementierungen der Offenbarung bereitstellen sollen.
-
Obwohl die obigen Beispiele die Befehlshandhabung und -verteilung im Kontext von Ausführungseinheiten und Logikschaltungen beschreiben, können andere Implementierungen der Offenbarung mittels Daten oder Befehlen, die auf einem maschinenlesbaren, greifbaren Medium gespeichert sind, erreicht werden, die, wenn sie von einer Maschine ausgeführt werden, die Maschine veranlassen, Funktionen auszuführen, die mit mindestens einer Implementierung der Offenbarung übereinstimmen. In einer Implementierung sind Funktionen, die Implementierungen der Offenbarung zugeordnet sind, in maschinenausführbaren Befehlen verkörpert. Die Befehle können verwendet werden, um einen Allzweck- oder Spezialzweckprozessor, der mit den Befehlen programmiert ist, zu veranlassen, die Schritte der Offenbarung durchzuführen. Implementierungen der Offenbarung können als Computerprogrammprodukt oder Software bereitgestellt werden, die ein maschinen- oder computerlesbares Medium mit darauf gespeicherten Befehlen aufweisen können, die zur Programmierung eines Computers (oder anderer elektronischer Vorrichtungen) verwendet werden können, um eine oder mehrere Operationen gemäß Implementierungen der Offenbarung durchzuführen. Alternativ können die Operationen von Implementierungen der Offenbarung durch spezifische Hardwarekomponenten, die eine Logik mit fester Funktion zur Durchführung der Operationen enthalten, oder durch irgendeine Kombination von programmierten Computerkomponenten und Hardwarekomponenten mit fester Funktion durchgeführt werden.
-
Befehle, die zur Programmierung der Logik zur Durchführung von Implementierungen der Offenbarung verwendet werden, können in einem Speicher in dem System gespeichert werden, wie etwa in einem DRAM, Cache, Flash-Speicher oder einem anderen Speicher. Darüber hinaus können die Befehle über ein Netzwerk oder mittels anderer computerlesbarer Medien verteilt werden. So kann ein maschinenlesbares Medium irgendeinen Mechanismus zum Speichern oder Übertragen von Informationen in einer von einer Maschine (z. B. einem Computer) lesbaren Form aufweisen, unter anderem Floppy-Disketten, optische Disketten, CD-Nurlesespeicher (CD-ROMs) und magnetooptische Discs, Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAM), löschbare programmierbare Nurlesespeicher (EPROM), elektrisch löschbare programmierbare Nurlesespeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder einen greifbaren, maschinenlesbaren Speicher, der bei der Übertragung von Informationen über das Internet mittels elektrischer, optischer, akustischer oder anderer Formen von propagierten Signalen (z. B. Trägerwellen, Infrarotsignale, digitale Signale, usw.) verwendet wird. Dementsprechend umfasst das computerlesbare Medium jegliche Art von greifbarem, maschinenlesbarem Medium, das zum Speichern oder Übertragen von elektronischen Befehlen oder Informationen in einer von einer Maschine (z. B. einem Computer) lesbaren Form geeignet ist.
-
Ein Design kann verschiedene Phasen von der Erstellung über die Simulation bis hin zur Fertigung durchlaufen. Daten, die ein Design darstellen, können das Design auf eine Anzahl von Arten repräsentieren. Erstens kann die Hardware, wie es bei Simulationen zweckmäßig ist, unter Verwendung einer Hardware-Beschreibungssprache oder einer anderen funktionalen Beschreibungssprache dargestellt werden. Zusätzlich kann in irgendeiner Phase des Design-Prozesses ein Schaltungsebenenmodell mit Logik- und/oder Transistorgates erzeugt werden. Ferner erreichen die meisten Designs in irgendeiner Phase eine Ebene von Daten, welche die physische Platzierung verschiedener Vorrichtungen in dem Hardwaremodell darstellen. Im Fall der Verwendung herkömmlicher Halbleiterherstellungstechniken können die Daten, die das Hardwaremodell darstellen, die Daten sein, die das Vorhandensein oder Nichtvorhandensein verschiedener Merkmale auf unterschiedlichen Maskenschichten für Masken, die zur Herstellung der integrierten Schaltung verwendet werden, spezifizieren. In einigen Darstellungen des Designs können die Daten in irgendeiner Form eines maschinenlesbaren Mediums gespeichert werden. Ein Speicher oder ein magnetischer oder optischer Speicher, wie etwa eine Disc, kann das maschinenlesbare Medium sein, um Informationen zu speichern, die über optische oder elektrische Wellen, die moduliert oder anderweitig erzeugt werden, um solche Informationen zu übertragen, übertragen werden. Wird eine elektrische Trägerwelle, die den Code oder das Design anzeigt oder trägt, in dem Ausmaß übertragen, dass Kopieren, Puffern oder Neuübertragung des elektrischen Signals durchgeführt wird, so wird eine neue Kopie erstellt. So kann ein Kommunikationsprovider oder ein Netzprovider einen Artikel, wie etwa in eine Trägerwelle codierte Informationen, der Techniken von Ausführungsformen der Offenbarung verkörpert, zumindest vorübergehend auf einem greifbaren, maschinenlesbaren Medium speichern.
-
Ein Modul, wie es hierin verwendet wird, bezieht sich auf irgendeine Kombination von Hardware, Software und/oder Firmware. Beispielsweise umfasst ein Modul Hardware, wie einen Mikrocontroller, die einem nicht transitorischen Medium zugeordnet ist, um Code zu speichern, der für die Ausführung durch den Mikrocontroller angepasst ist. Daher bezieht sich der Verweis auf ein Modul in einer Implementierung auf die Hardware, die speziell konfiguriert ist, um den Code, der auf einem nicht transitorischen Medium vorhanden ist, zu erkennen und/oder auszuführen. Darüber hinaus bezieht sich in einer weiteren Implementierung die Verwendung eines Moduls auf das nicht transitorische Medium einschließlich des Codes, der speziell angepasst ist, um durch den Mikrocontroller ausgeführt zu werden, um vorgegebene Operationen durchzuführen. Und wie gefolgert werden kann, kann sich in einer noch weiteren Implementierung der Begriff Modul (in diesem Beispiel) auf die Kombination des Mikrocontrollers und des nicht transitorischen Mediums beziehen. Häufig variieren und überschneiden sich Modulgrenzen, die als getrennt dargestellt werden. Zum Beispiel können ein erstes und ein zweites Modul Hardware, Software, Firmware oder eine Kombination davon gemeinsam nutzen, während möglicherweise eine unabhängige Hardware, Software oder Firmware beibehalten wird. In einer Implementierung umfasst die Verwendung des Begriffs Logik auch Hardware, wie Transistoren, Register oder andere Hardware, wie programmierbare Logikbausteine.
-
Die Verwendung des Ausdrucks „konfiguriert, um“ in einer Implementierung bezieht sich auf das Einrichten, Zusammenstellen, Herstellen, Verkaufsangebot, Importieren und/oder Ausgestalten einer Einrichtung, einer Hardware, einer Logik oder eines Elements, um eine vorgesehene oder bestimmte Aufgabe durchzuführen. In diesem Beispiel ist eine Einrichtung oder ein Element davon, die oder das nicht in Betrieb ist, dennoch „konfiguriert, um“ eine vorgesehene Aufgabe durchzuführen, falls sie bzw. es dazu ausgestaltet, gekoppelt und/oder verschaltet ist, um die vorgesehene Aufgabe durchzuführen. Als rein veranschaulichendes Beispiel kann ein Logikgatter während des Betriebs eine 0 oder eine 1 bereitstellen. Aber ein Logikgatter, das „konfiguriert ist, um“ ein Aktivierungssignal für einen Takt bereitzustellen, umfasst nicht jedes potenzielle Logikgatter, das eine 1 oder 0 bereitstellen kann. Stattdessen ist das Logikgatter ein solches, das auf eine Art und Weise gekoppelt ist, dass während des Betriebs der Ausgang 1 oder 0 den Takt aktivieren soll. Es sei nochmals darauf hingewiesen, dass die Verwendung des Begriffs „konfiguriert, um‟ keine Operation erfordert, sondern sich stattdessen auf den latenten Zustand einer Einrichtung, einer Hardware und/oder eines Elements abzielt, wobei die Einrichtung, die Hardware und/oder das Element in dem latenten Zustand ausgestaltet ist, um eine bestimmte Aufgabe durchzuführen, wenn der Apparat, die Hardware und/oder das Element in Betrieb ist.
-
Darüber hinaus bezieht sich die Verwendung des Ausdrucks „um, ... zu“, „in der Lage zu“ und / oder „betriebsfähig zu“ in einer Implementierung auf irgendeine Einrichtung, Logik, Hardware und/oder irgendein Element, die bzw. das so ausgelegt ist, dass die Verwendung der Einrichtung, der Logik, der Hardware und/oder des Elements in einer spezifizierten Weise ermöglicht wird. Es ist wie oben zu beachten, dass sich die Verwendung von „um, ... zu“, „in der Lage zu“ oder „betriebsfähig zu“ in einer Implementierung auf den latenten Zustand einer Einrichtung, einer Logik, einer Hardware und/oder eines Elements bezieht, wobei die Einrichtung, die Logik, die Hardware und/oder das Element nicht in Betrieb ist, sondern so ausgestaltet ist, um die Verwendung einer Einrichtung in einer spezifizierten Weise zu ermöglichen.
-
Ein Wert, wie hierin verwendet, umfasst irgendeine bekannte Darstellung einer Zahl, eines Zustands, eines logischen Zustands oder eines binären logischen Zustands. Häufig wird die Verwendung von Logikebenen, Logikwerten oder logischen Werten auch als 1en und 0en bezeichnet, was lediglich binäre Logikzustände darstellt. Zum Beispiel bezieht sich eine 1 auf eine hohe Logikebene und 0 bezieht sich auf eine niedrige Logikebene. In einer Ausführungsform kann eine Speicherungszelle, wie ein Transistor oder eine Flashzelle, in der Lage sein, einen einzigen logischen Wert oder mehrere logische Werte zu halten. Es wurden jedoch auch andere Darstellungen von Werten in Computersystemen verwendet. Zum Beispiel kann die Dezimalzahl Zehn auch als ein Binärwert von 1010 und als ein hexadezimaler Buchstabe A dargestellt werden. Daher umfasst ein Wert jegliche Darstellung von Informationen, die in einem Computersystem gehalten werden können.
-
Außerdem können Zustände durch Werte oder Abschnitte von Werten dargestellt werden. Als ein Beispiel kann ein erster Wert, wie etwa eine logische Eins, einen Default- oder Ausgangszustand darstellen, während ein zweiter Wert, wie etwa eine logische Null, einen Nicht-Default-Zustand darstellen kann. Darüber hinaus beziehen sich die Begriffe ,Reset' (zurücksetzen) und ,Set` (setzen bzw. einstellen) in einer Implementierung auf einen Defaultwert oder -zustand bzw. auf einen aktualisierten Wert oder Zustand. Zum Beispiel weist ein Defaultwert unter Umständen einen hohen logischen Wert, d. h. ,Reset' auf, während ein aktualisierter Wert unter Umständen einen niedrigen logischen Wert, d. h. ,Set' aufweist. Dabei ist zu beachten, dass jegliche Kombination von Werten benutzt werden kann, um irgendeine Anzahl an Zuständen darzustellen.
-
Die oben dargelegten Implementierungen von Verfahren, Hardware, Software, Firmware oder Code können über Befehle oder Code implementiert werden, die auf einem maschinenzugreifbaren, maschinenlesbaren, computerzugreifbaren oder computerlesbaren Medium gespeichert und durch ein Verarbeitungselement ausführbar sind. Ein nicht transitorisches, maschinenzugreifbares/-lesbares Medium weist irgendeinen Mechanismus auf, der Informationen in einer Form bereitstellt (d. h. speichert und/oder überträgt), die von einer Maschine, wie etwa einem Computer oder elektronischen System, gelesen werden kann. Zum Beispiel umfasst ein nicht transitorisches maschinenzugreifbares Medium Direktzugriffsspeicher (RAM), wie etwa einen statischen RAM (SRAM) oder dynamischen RAM (DRAM); ROM; ein magnetisches oder optisches Speichermedium; Flash-Speichervorrichtungen; elektrische Speichervorrichtungen; optische Speichervorrichtungen; akustische Speichervorrichtungen; eine andere Form von Speichervorrichtungen zum Halten von aus transitorischen (propagierten) Signalen (z. B. Trägerwellen, Infrarotsignalen, digitalen Signalen) empfangenen Informationen usw., die von den nichttransitorischen Medien zu unterscheiden sind, die Informationen daraus empfangen können.
-
Befehle, die zur Programmierung der Logik zur Durchführung von Implementierungen der Offenbarung verwendet werden, können in einem Speicher in dem System gespeichert werden, wie etwa in einem DRAM, Cache, Flash-Speicher oder einem anderen Speicher. Darüber hinaus können die Befehle über ein Netzwerk oder mittels anderer computerlesbarer Medien verteilt werden. So kann ein maschinenlesbares Medium irgendeinen Mechanismus zum Speichern oder Übertragen von Informationen in einer von einer Maschine (z. B. einem Computer) lesbaren Form aufweisen, unter anderem Floppy-Disketten, optische Disketten, CD-Nurlesespeicher (CD-ROMs) und magnetooptische Discs, Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAM), löschbare programmierbare Nurlesespeicher (EPROM), elektrisch löschbare programmierbare Nurlesespeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder einen greifbaren, maschinenlesbaren Speicher, der bei der Übertragung von Informationen über das Internet mittels elektrischer, optischer, akustischer oder anderer Formen von propagierten Signalen (z. B. Trägerwellen, Infrarotsignale, digitale Signale, usw.) verwendet wird. Dementsprechend umfasst das computerlesbare Medium jegliche Art von greifbarem, maschinenlesbarem Medium, das zum Speichern oder Übertragen von elektronischen Befehlen oder Informationen in einer von einer Maschine (z. B. einem Computer) lesbaren Form geeignet ist.
-
Wenn irgendwo in dieser Beschreibung auf „1 Implementierung“ oder „eine Implementierung“ Bezug genommen wird, bedeutet dies, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder Charakteristik, welches oder welche in Verbindung mit der Implementierung beschrieben wird, in mindestens einer Implementierung der Offenbarung umfasst ist. Daher beziehen sich die Ausdrücke „in 1 Implementierung“ oder „in einer Implementierung“ an verschiedenen Stellen in dieser Beschreibung nicht notwendigerweise alle auf dieselbe Implementierung. Darüber hinaus können die einzelnen Merkmale, Strukturen oder Charakteristiken in einer oder mehreren Implementierungen auf irgendeine geeignete Weise kombiniert werden.
-
In der vorstehenden Beschreibung wurde eine detaillierte Beschreibung unter Bezugnahme auf spezifische beispielhafte Implementierungen gegeben. Es ist jedoch offensichtlich, dass verschiedene Modifizierungen und Veränderungen daran vorgenommen werden können, ohne dass vom breiteren Wesen und Schutzbereich der Offenbarung, wie in den angefügten Ansprüchen dargelegt, abgewichen wird. Die Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden Sinn und nicht in einem einschränkenden Sinn zu betrachten. Darüber hinaus bezieht sich die vorstehende Verwendung von „Implementierung“ und anderen beispielhaften Ausdrücken nicht notwendigerweise auf dieselbe Implementierung oder dasselbe Beispiel, sondern kann sich auf unterschiedliche und eigene Implementierungen sowie unter Umständen auf dieselbe Implementierung beziehen.
-
Einige Abschnitte der detaillierten Beschreibung werden in Form von Algorithmen und symbolischen Darstellungen von Operationen auf Datenbits innerhalb eines Computerspeichers dargestellt. Diese algorithmischen Beschreibungen und Darstellungen sind die Mittel, die von einem Fachmann auf dem Datenverarbeitungsgebiet verwendet werden, um einem anderen Fachmann den maßgeblichen Inhalt seiner Arbeit in möglichst effektiver Weise zu vermitteln. Ein Algorithmus wird hier und im Allgemeinen als eine folgerichtige Abfolge von Operationen, die zu einem gewünschten Ergebnis führt, verstanden. Diese Operationen erfordern physische Manipulationen physischer Größen. Üblicherweise, aber nicht notwendigerweise, nehmen diese Größen die Form von elektrischen oder magnetischen Signalen an, die gespeichert, übertragen, kombiniert, verglichen und in anderer Weise manipuliert werden können. Es hat sich zuweilen als günstig herausgestellt, hauptsächlich aus Gründen der üblichen Verwendung, diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Begriffe, Zahlen oder dergleichen zu bezeichnen. Die hier beschriebenen Blöcke können Hardware, Software, Firmware oder eine Kombination davon sein.
-
Es sollte jedoch berücksichtigt werden, dass all diese und ähnliche Begriffe den geeigneten physischen Größen zuzuordnen sind und lediglich praktische Bezeichnungen sind, die auf diese Größen angewendet werden. Sofern nicht aus den obigen Erörterungen ausdrücklich etwas anderes angegeben ist, versteht es sich, dass in der gesamten Beschreibung Erörterungen, die Begriffe wie „definieren“, „empfangen“, „bestimmen“, „ausgeben“, „verknüpfen“, „zuordnen“, „erhalten“, „authentisieren“, „verhindern“, „ausführen“, „anfordern“, „kommunizieren“ oder dergleichen benutzen, sich auf die Aktionen und/oder Prozesse eines Rechensystems oder einer ähnlichen elektronischen Rechenvorrichtung beziehen, welche Daten, die als physikalische (z. B. elektronische) Größen innerhalb der Register und Speicher des Rechensystems dargestellt werden, manipulieren und in andere Daten umwandeln, die in ähnlicher Weise als physikalische Größen innerhalb der Speicher oder Register oder anderen derartigen Informationsspeicherungs-, Übertragungs- oder Anzeigevorrichtungen des Rechensystems dargestellt werden.
-
Die Worte „Beispiel“ oder „beispielhaft“ werden hierin verwendet, um als Beispiel, Fall oder Veranschaulichung zu dienen. Jeglicher Aspekt oder jegliche Ausgestaltung, der oder die hierin als „Beispiel“ oder „beispielhaft“ beschrieben wird, ist nicht unbedingt als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Ausgestaltungen auszulegen. Vielmehr soll die Verwendung der Worte „Beispiel“ oder „beispielhaft“ dazu dienen, Konzepte in einer konkreten Art zu präsentieren. Der in dieser Anmeldung verwendete Begriff „oder“ soll eher ein einschließendes „oder“ als ein ausschließliches „oder“ sein Das heißt, sofern nicht anders angegeben oder aus dem Kontext klar ersichtlich, mit „X weist A oder B auf“ ist beabsichtigt, dass es jegliche beliebige der natürlichen inklusiven Permutationen bedeuten kann. Das heißt, falls X A aufweist; X B aufweist oder X sowohl A als auch B aufweist, dann ist „X weist A oder B auf“ unter jedem der vorangehenden Fälle erfüllt. Darüber hinaus sind die Artikel „ein“, „einer“ und „eines“, wie in dieser Anmeldung und den anhängenden Ansprüchen verwendet, allgemein so auszulegen, dass sie „eines oder mehr“ bedeuten, sofern nicht anders angegeben oder aus dem Kontext ersichtlich wird, dass auf eine Singularform verwiesen wird. Außerdem ist mit der Verwendung des Ausdrucks „1 Implementierung“ oder „eine Implementierung“ durchgehend nicht beabsichtigt, dass damit die gleiche Implementierung gemeint sein soll, es sei denn, es wird so beschrieben. Auch die Begriffe „erste/r“, „zweite/r“, „dritte/r“, „vierte/r“ usw., soweit hierin benutzt, sind als Bezeichnungen zur Unterscheidung zwischen unterschiedlichen Elementen gedacht und haben nicht unbedingt eine Aufzählungsbedeutung gemäß ihrer numerischen Bezeichnung.