Поделиться через


Планирование команд

Планирование команд

Команды можно отправлять в ТБS из нескольких контекстов в любое время. Однако физический TPM может обрабатывать только одну команду за один раз, и некоторые команды могут выполняться в течение значительного периода времени. При ожидании нескольких команд диспетчер TBS решает, какую команду отправить в доверенный платформенный модуль (TPM). При отправке команды каждой команде присваивается приоритет, который с ней связан. TBS использует эти приоритеты, чтобы определить, какая ожидающая команда будет подаваться всякий раз, когда TPM свободен. Четыре уровня приоритета являются низкими, нормальными, высокими и системными. Приложения должны использовать низкий, обычный или высокий приоритет. Хотя команды с высоким приоритетом обычно выполняются перед командами с низким приоритетом, планировщик команд TBS имеет политику старения, которая в конечном итоге дает очень высокий приоритет командам, которые были заблокированы в течение значительных периодов времени.

Управление контекстом

Когда команда TPM_SaveContext или TPM2 ContextSave отправляется с виртуальным дескриптором на ресурс, которым управляет ТБS, ТБS выполняет соответствующую команду на физическом ресурсе и возвращает результат вызывающей стороне, если ресурс физически присутствует в доверенном платформенном модуле. Если ресурс не присутствует физически в доверенном платформенном модуле, предварительная обработка команды TPM_SaveContext или TPM2_ContextSave вызывает перезагрузку ресурса, в котором случае контекст будет сохранен и возвращен вызывающему объекту. Если сохраненный ресурс имеет тип, который обычно удаляется автоматически из доверенного платформенного модуля после сохранения, ТБS делает недействительным виртуальный ресурс после завершения этой команды. Когда команда TPM_LoadContext или TPM2_ContextLoad отправляется в ТБS, служба ТБS немедленно выполняет команду. Если команда успешно завершится, TBS виртуализирует дескриптор ресурсов и передает полученный поток байтов TPM вызывающей стороне. Если команда TPM_FlushSpecific или TPM2_FlushContext отправляется с виртуальным дескриптором ресурса, которым управляет TBS, служба TBS выполняет команду TPM_FlushSpecific или TPM2_FlushContext, чтобы очистить ресурс из TPM, если он физически присутствует. В этом случае TBS делает недействительным виртуальный ресурс и возвращает результат команды очистки вызывающему. Если ресурс не присутствует физически в TPM, при предварительной обработке команды TPM_FlushSpecific или TPM2_FlushContext будет загружен ресурс, соответствующий виртуальному идентификатору, но затем ресурс будет удален при фактической обработке команды. TBS не поддерживает бит TPM_KeyControlOwner или функцию keepHandle операции TPM_LoadContext, поэтому он не предоставит ресурсу тот же дескриптор, что был у него до сохранения контекста.

Другие команды

Команды, которые не упоминаются в этой документации, обрабатываются путем замены дескрипторов виртуальных ключей физическими дескрипторами ключей (при необходимости) и отправкой их в TPM. Это делается после выполнения соответствующих операций, чтобы убедиться, что используемые ресурсы физически присутствуют на доверенном платформенном модуле. Дополнительная специальная обработка не выполняется. ТБS не пытается улучшить точность виртуализации путем изменения данных, передаваемых обратно из доверенного платформенного модуля в рамках запроса TPM_GetCapabilities или TPM2_GetCapability. TBS также поддерживает команды физического присутствия TCG. ТБС выступает в качестве посредника для команд физического присутствия; специальная обработка данных самим ТБС не выполняется.

Уборка

Когда контекст завершает работу, все физические и виртуальные ресурсы, связанные с ним, очищаются, чтобы они больше не потребляли системные ресурсы.