コマンド スケジュール
コマンド スケジュール
コマンドは、いつでも複数のコンテキストから TBS に送信できます。 ただし、物理 TPM では一度に 1 つのコマンドのみを処理でき、一部のコマンドは長時間実行できます。 複数のコマンドが保留中の場合、TBS は TPM に送信するコマンドを決定します。 コマンドが送信されると、各コマンドには優先順位が関連付けられます。 TBS では、これらの優先順位を使用して、TPM が解放されるたびに送信する保留中のコマンドを決定します。 優先順位の 4 つのレベルは、低、標準、高、およびシステムです。 アプリケーションでは、低優先度、標準優先度、または高優先度を使用する必要があります。 通常、優先度の高いコマンドは優先度の低いコマンドの前に実行されますが、TBS コマンド スケジューラにはエージング ポリシーがあり、最終的には、長時間ブロックされたコマンドに非常に高い優先順位が与えられます。
コンテキスト管理
TBS が管理しているリソースに対して仮想ハンドルを使用して TPM_SaveContext または TPM2 ContextSave コマンドが送信されると、TBS は物理リソースに対して適切なコマンドを実行し、リソースが TPM に物理的に存在する場合は呼び出し元に結果を返します。 リソースが TPM に物理的に存在しない場合、TPM_SaveContextまたは TPM2_ContextSave コマンドの前処理によってリソースが再読み込みされ、その時点でコンテキストが保存され、呼び出し元に返されます。 保存するリソースが、通常は保存後に TPM から自動的にフラッシュされる型の場合、TBS は、このコマンドの完了時に仮想リソースを無効にします。 TPM_LoadContextまたはTPM2_ContextLoad コマンドが TBS に送信されると、TBS はコマンドを直ちに実行します。 コマンドが正常に完了すると、TBS はリソース ハンドルを仮想化し、結果の TPM バイト ストリームを呼び出し元に渡します。 TBS が管理しているリソースへの仮想ハンドルを使用して TPM_FlushSpecific または TPM2_FlushContext コマンドが送信されると、TBS は TPM_FlushSpecific または TPM2_FlushContext コマンドを実行して、リソースが物理的に存在する場合は TPM からリソースを削除します。 この場合、TBS は仮想リソースを無効にし、flush コマンドの結果を呼び出し元に返します。 リソースが TPM に物理的に存在しない場合、TPM_FlushSpecificまたは TPM2_FlushContext コマンドの前処理により、仮想ハンドルに対応するリソースが読み込まれますが、コマンドが実際に処理されるとフラッシュされます。 TBS は、TPM_LoadContext操作のTPM_KeyControlOwner ビットまたは keepHandle 機能をサポートしていないため、コンテキストが保存される前と同じハンドルをリソースに提供しません。
その他のコマンド
このドキュメントに記載されていないコマンドは、仮想キー ハンドルを物理キー ハンドル (必要な場合) に置き換え、TPM に送信することによって処理されます。 これは、使用されているリソースが TPM に物理的に存在することを確認するために、適切な操作を実行した後に行われます。 追加の特別な処理は実行されません。 TBS では、TPM_GetCapabilitiesまたはTPM2_GetCapabilityクエリの一部として TPM から返されるデータを変更することで、仮想化の忠実性を向上させる試みは行われません。 TBS では、TCG Physical Presence コマンドもサポートされます。 TBS は、Physical Presence コマンドのパススルーとして機能します。TBS 自体によって特別な処理は実行されません。
クリーンアップ
コンテキストが終了すると、関連付けられているすべての物理リソースと仮想リソースがクリーンアップされ、システム リソースが消費されなくなります。