Befehlsplanung
Befehlsplanung
Befehle können jederzeit aus mehreren Kontexten an die TBS übermittelt werden. Ein physisches TPM kann jedoch nur einen Befehl gleichzeitig verarbeiten, und einige Befehle können für einen längeren Zeitraum ausgeführt werden. Wenn mehrere Befehle ausstehen, entscheidet der TBS, welcher Befehl an das TPM gesendet werden soll. Wenn ein Befehl übermittelt wird, ist jedem Befehl eine Priorität zugeordnet. Die TBS verwendet diese Prioritäten, um zu bestimmen, welcher ausstehende Befehl übermittelt werden soll, wenn das TPM kostenlos ist. Die vier Prioritätsebenen sind niedrig, normal, hoch und system. Anwendungen sollten niedrige, normale oder hohe Priorität verwenden. Obwohl Befehle mit hoher Priorität normalerweise vor Befehlen mit niedriger Priorität ausgeführt werden, verfügt der TBS-Befehlsplaner über eine alternde Richtlinie, die schließlich Befehlen, die über einen erheblichen Zeitraum blockiert wurden, eine sehr hohe Priorität einräumt.
Kontextverwaltung
Wenn ein TPM_SaveContext- oder TPM2 ContextSave-Befehl mit einem virtuellen Handle an eine Ressource übermittelt wird, die vom TBS verwaltet wird, führt der TBS den entsprechenden Befehl für die physische Ressource aus und gibt das Ergebnis an den Aufrufer zurück, wenn die Ressource physisch im TPM vorhanden ist. Wenn die Ressource im TPM nicht physisch vorhanden ist, führt die Vorverarbeitung des TPM_SaveContext- oder TPM2_ContextSave-Befehls dazu, dass die Ressource erneut geladen wird. An diesem Punkt wird der Kontext gespeichert und an den Aufrufer zurückgegeben. Wenn es sich bei der zu speichernden Ressource um einen Typ handelt, der nach dem Speichern normalerweise automatisch aus dem TPM geleert wird, wird die virtuelle Ressource vom TBS nach Abschluss dieses Befehls ungültig. Wenn ein TPM_LoadContext- oder TPM2_ContextLoad-Befehl an die TBS übermittelt wird, führt der TBS den Befehl sofort aus. Wenn der Befehl erfolgreich abgeschlossen wurde, virtualisiert der TBS das Ressourcenhandle und übergibt den resultierenden TPM-Bytestream an den Aufrufer. Wenn ein TPM_FlushSpecific- oder TPM2_FlushContext-Befehl mit einem virtuellen Handle an eine Ressource übermittelt wird, die vom TBS verwaltet wird, führt der TBS einen TPM_FlushSpecific- oder TPM2_FlushContext-Befehl aus, um die Ressource aus dem TPM zu entfernen, sofern sie physisch vorhanden ist. In diesem Fall ungültigisiert der TBS die virtuelle Ressource und gibt das Ergebnis des Flush-Befehls an den Aufrufer zurück. Wenn die Ressource nicht physisch im TPM vorhanden ist, wird durch die Vorverarbeitung des befehls TPM_FlushSpecific oder TPM2_FlushContext die Ressource geladen, die dem virtuellen Handle entspricht, aber sie wird dann geleert, wenn der Befehl tatsächlich verarbeitet wird. Der TBS unterstützt weder das TPM_KeyControlOwner Bit noch die KeepHandle-Funktionalität des TPM_LoadContext-Vorgangs, sodass eine Ressource nicht das gleiche Handle erhält, das sie vor dem Speichern des Kontexts hatte.
Andere Befehle
Befehle, die in dieser Dokumentation nicht erwähnt werden, werden verarbeitet, indem virtuelle Schlüsselhandles (falls erforderlich) durch physische Schlüsselhandles ersetzt und an das TPM übermittelt werden. Dies erfolgt nach dem Ausführen der entsprechenden Vorgänge, um sicherzustellen, dass die verwendeten Ressourcen physisch im TPM vorhanden sind. Es wird keine zusätzliche spezielle Verarbeitung durchgeführt. Der TBS versucht nicht, die Genauigkeit der Virtualisierung zu verbessern, indem Daten geändert werden, die im Rahmen einer TPM_GetCapabilities- oder TPM2_GetCapability-Abfrage vom TPM zurückgegeben werden. Der TBS unterstützt auch TCG Physical Presence-Befehle. Der TBS fungiert als Passthrough für Befehle zur physischen Anwesenheit. es erfolgt keine spezielle Verarbeitung durch die TBS selbst.
Cleanup
Wenn ein Kontext beendet wird, werden alle physischen und virtuellen Ressourcen, die diesem zugeordnet sind, bereinigt, sodass sie keine Systemressourcen mehr verbrauchen.