Compartir a través de


Programación de comandos

Programación de comandos

Los comandos se pueden enviar al TBS desde varios contextos en cualquier momento. Sin embargo, un TPM físico solo puede procesar un comando cada vez y algunos comandos se pueden ejecutar durante un período de tiempo significativo. Cuando hay varios comandos pendientes, TBS decide qué comando se va a enviar al TPM. Cuando se envía un comando, cada comando tiene una prioridad asociada. El TBS usa estas prioridades para determinar qué comando pendiente se va a enviar cada vez que el TPM es gratuito. Los cuatro niveles de prioridad son bajos, normales, altos y del sistema. Las aplicaciones deben usar prioridad alta, normal o baja. Aunque los comandos de prioridad alta normalmente se ejecutan antes de los comandos de prioridad baja, el programador de comandos TBS tiene una directiva de envejecimiento que finalmente da prioridad muy alta a los comandos que se han bloqueado durante períodos de tiempo significativos.

Administración de contextos

Cuando se envía un comando TPM_SaveContext o TPM2 ContextSave con un identificador virtual a un recurso que el TBS está administrando, TBS ejecuta el comando adecuado en el recurso físico y devuelve el resultado al autor de la llamada si el recurso está presente físicamente en el TPM. Si el recurso no está presente físicamente en el TPM, el preprocesamiento de la TPM_SaveContext o TPM2_ContextSave comando hace que el recurso se vuelva a cargar, en cuyo momento se guardará el contexto y se devolverá al autor de la llamada. Si el recurso que se guarda es de un tipo que normalmente se vacía automáticamente desde el TPM después de guardarlo, TBS invalida el recurso virtual al finalizar este comando. Cuando se envía un comando TPM_LoadContext o TPM2_ContextLoad al TBS, TBS ejecuta el comando inmediatamente. Si el comando se completa correctamente, TBS virtualiza el identificador de recursos y pasa el flujo de bytes de TPM resultante al autor de la llamada. Cuando se envía un comando TPM_FlushSpecific o TPM2_FlushContext con un identificador virtual a un recurso que el TBS está administrando, TBS ejecuta un comando de TPM_FlushSpecific o TPM2_FlushContext para expulsar el recurso del TPM si está presente físicamente. En este caso, TBS invalida el recurso virtual y devuelve el resultado del comando flush al autor de la llamada. Si el recurso no está presente físicamente en el TPM, el preprocesamiento del comando TPM_FlushSpecific o TPM2_FlushContext cargará el recurso correspondiente al identificador virtual, pero se vaciará cuando el comando se procese realmente. El TBS no admite el bit de TPM_KeyControlOwner ni la funcionalidad keepHandle de la operación TPM_LoadContext, por lo que no proporcionará a un recurso el mismo identificador que tenía antes de guardar el contexto.

Otros comandos

Los comandos que no se mencionan en esta documentación se procesan reemplazando los identificadores de clave virtual por identificadores de clave física (si es necesario) y enviarlos al TPM. Esto se hace después de realizar las operaciones adecuadas para asegurarse de que los recursos que se usan están presentes físicamente en el TPM. No se realiza ningún procesamiento especial adicional. El TBS no intenta mejorar la fidelidad de la virtualización modificando los datos pasados desde el TPM como parte de una consulta de TPM_GetCapabilities o TPM2_GetCapability. El TBS también admite comandos de presencia física de TCG. El TBS actúa como un paso a través para los comandos de presencia física; el propio TBS no realiza ningún procesamiento especial.

Limpieza

Cuando se cierra un contexto, se limpian todos los recursos físicos y virtuales asociados a él para que ya no consuman recursos del sistema.