Agendamento de comando
Agendamento de comando
Os comandos podem ser enviados para o TBS de vários contextos a qualquer momento. No entanto, um TPM físico só pode processar um comando por vez e alguns comandos podem ser executados por um período significativo de tempo. Quando vários comandos estão pendentes, o TBS decide qual comando enviar para o TPM. Quando um comando é enviado, cada comando tem uma prioridade associada a ele. O TBS usa essas prioridades para determinar qual comando pendente enviar sempre que o TPM é gratuito. Os quatro níveis de prioridade são baixos, normais, altos e sistema. Os aplicativos devem usar prioridade baixa, normal ou alta. Embora comandos de alta prioridade geralmente sejam executados antes de comandos de baixa prioridade, o agendador de comandos tbs tem uma política de envelhecimento que eventualmente dá prioridade muito alta a comandos que foram bloqueados por períodos significativos de tempo.
Gerenciamento de Contexto
Quando um comando ContextSave TPM_SaveContext ou TPM2 é enviado com um identificador virtual para um recurso que o TBS está gerenciando, o TBS executa o comando apropriado no recurso físico e retorna o resultado para o chamador se o recurso estiver fisicamente presente no TPM. Se o recurso não estiver fisicamente presente no TPM, o pré-processamento do comando TPM_SaveContext ou TPM2_ContextSave fará com que o recurso seja recarregado, momento em que o contexto será salvo e retornado ao chamador. Se o recurso que está sendo salvo for de um tipo que normalmente é liberado automaticamente do TPM após salvar, o TBS invalida o recurso virtual após a conclusão desse comando. Quando um comando TPM_LoadContext ou TPM2_ContextLoad é enviado para o TBS, o TBS executa o comando imediatamente. Se o comando for concluído com êxito, o TBS virtualizará o identificador de recurso e passará o fluxo de bytes do TPM resultante para o chamador. Quando um comando TPM_FlushSpecific ou TPM2_FlushContext é enviado com um identificador virtual para um recurso que o TBS está gerenciando, o TBS executa um comando TPM_FlushSpecific ou TPM2_FlushContext para remover o recurso do TPM se ele estiver fisicamente presente. Nesse caso, o TBS invalida o recurso virtual e retorna o resultado do comando flush para o chamador. Se o recurso não estiver fisicamente presente no TPM, o pré-processamento do comando TPM_FlushSpecific ou TPM2_FlushContext carregará o recurso que corresponde ao identificador virtual, mas será liberado quando o comando for realmente processado. O TBS não dá suporte ao bit TPM_KeyControlOwner ou à funcionalidade keepHandle da operação de TPM_LoadContext, portanto, ele não dará a um recurso o mesmo identificador que tinha antes do contexto ser salvo.
Outros comandos
Os comandos que não são mencionados nesta documentação são processados substituindo identificadores de chave virtual por identificadores de chave física (se necessário) e enviando-os para o TPM. Isso é feito depois de executar as operações apropriadas para garantir que os recursos que estão sendo usados estejam fisicamente presentes no TPM. Nenhum processamento especial adicional é executado. O TBS não tenta melhorar a fidelidade da virtualização modificando os dados passados de volta do TPM como parte de uma consulta TPM_GetCapabilities ou TPM2_GetCapability. O TBS também dá suporte a comandos de Presença Física do TCG. O TBS atua como uma passagem para comandos de Presença Física; nenhum processamento especial é executado pelo próprio TBS.
Limpeza
Quando um contexto é encerrado, todos os recursos físicos e virtuais associados a ele são limpos para que eles não consumam mais recursos do sistema.