Планирование команд
Планирование команд
Команды можно отправлять в TBS из нескольких контекстов в любое время. Однако физический доверенный платформенный модуль может обрабатывать только одну команду за раз, а некоторые команды могут выполняться в течение длительного периода времени. Если несколько команд находятся в состоянии ожидания, TBS решает, какую команду следует отправить в доверенный платформенный модуль. При отправке команды каждая команда имеет связанный с ней приоритет. TBS использует эти приоритеты, чтобы определить, какие ожидающие команды следует отправлять каждый раз, когда доверенный платформенный модуль свободен. Четыре уровня приоритета: низкий, нормальный, высокий и системный. Приложения должны использовать низкий, обычный или высокий приоритет. Хотя команды с высоким приоритетом обычно выполняются до низкоприоритетных команд, планировщик команд TBS имеет устаревшую политику, которая в конечном итоге дает очень высокий приоритет командам, которые были заблокированы в течение значительных периодов времени.
Управление контекстом
При отправке команды TPM_SaveContext или TPM2 ContextSave с виртуальным дескриптором в ресурс, которым управляет TBS, TBS выполняет соответствующую команду в физическом ресурсе и возвращает результат вызывающей стороне, если ресурс физически присутствует в TPM. Если ресурс физически отсутствует в TPM, предварительная обработка TPM_SaveContext или команды TPM2_ContextSave приводит к перезагрузке ресурса, после чего контекст будет сохранен и возвращен вызывающей объекту. Если сохраняемый ресурс имеет тип, который обычно автоматически очищается из доверенного платформенного модуля после сохранения, tbS делает виртуальный ресурс недействительным после выполнения этой команды. Когда команда TPM_LoadContext или TPM2_ContextLoad отправляется в TBS, TBS выполняет команду немедленно. Если команда выполнена успешно, TBS виртуализирует дескриптор ресурса и передает результирующий поток байтов доверенного платформенного модуля вызывающей объекту. При отправке команды TPM_FlushSpecific или TPM2_FlushContext с виртуальным дескриптором в ресурс, которым управляет TBS, tbS выполняет команду TPM_FlushSpecific или TPM2_FlushContext, чтобы исключить ресурс из доверенного платформенного модуля, если он физически присутствует. В этом случае TBS делает виртуальный ресурс недействительным и возвращает вызывающей объекту результат команды очистки. Если ресурс физически отсутствует в TPM, предварительная обработка команды TPM_FlushSpecific или TPM2_FlushContext загрузит ресурс, соответствующий виртуальному дескриптору, но затем он будет сброшен при фактической обработке команды. TBS не поддерживает TPM_KeyControlOwner бит или функциональность keepHandle операции TPM_LoadContext, поэтому не предоставляет ресурсу такой же дескриптор, который он имел до сохранения контекста.
Другие команды
Команды, не упомянутые в этой документации, обрабатываются путем замены дескрипторов виртуальных ключей физическими (при необходимости) и их отправки в доверенный платформенный модуль. Это делается после выполнения соответствующих операций, чтобы убедиться, что используемые ресурсы физически присутствуют в TPM. Дополнительная специальная обработка не выполняется. TBS не пытается повысить точность виртуализации, изменяя данные, передаваемые из доверенного платформенного модуля в рамках запроса TPM_GetCapabilities или TPM2_GetCapability. TBS также поддерживает команды физического присутствия TCG. TBS выступает в качестве сквозного для команд физического присутствия; не выполняется специальная обработка самим TBS.
Очистка
При выходе из контекста все связанные с ним физические и виртуальные ресурсы очищаются, чтобы они больше не потребляли системные ресурсы.