Разделение памяти TrustZone

Я читаю о ARM Trustzone на этом ссылка. Я понимаю, что с помощью TrustZone можно разделить память на безопасные и незащищенные области. Поставщики могут использовать это для запуска безопасной ОС.

Что меня интересует, так это то, какова поддержка детализации для этого раздела? Просто может быть блок памяти, помеченный как «защищенный», и может быть только один такой блок памяти для каждой ОС? Есть ли у TrustZone возможность разбивать память на отдельные процессы?

Допустим, у меня есть файл .so (гипотетический пример) для приложения Linux. Возможно ли, что один и тот же код в процессе A может быть помечен как безопасный по виртуальному адресу от 0x1000 до 0x2000, а в процессе B может быть помечен как безопасный по виртуальному адресу от 0x5000 до 0x6000?


person Jake    schedule 14.09.2015    source источник


Ответы (1)


Разделение TrustZone происходит на уровне физической памяти, поэтому части вашего вопроса на уровне процесса на самом деле не применимы. Обратите внимание, что Linux как незащищенная ОС даже не может видеть защищенную память, поэтому виртуальные сопоставления для недоступных адресов будут мало полезны; однако безопасная ОС имеет возможность отображать как безопасные, так и незащищенные физические адреса благодаря биту NS в своих записях таблицы страниц.

Что касается того, как происходит это физическое разбиение, это зависит от реализации. TZC-380, на который ссылается ваша ссылка, поддерживает от 2 до 16 регионов с минимальным размером 32 КБ; его преемник TZC-400 имеет 9 регионов. , и идет вплоть до детализации 4 КБ. Другие реализации могут все еще отличаться, хотя гранулярность ниже 4 КБ маловероятна, поскольку это было бы практически непригодно для ЦП с включенным MMU. Кроме того, обычно в системе есть некоторые вещи, которые будут жестко связаны только с картой защищенной памяти (например, интерфейс программирования TZC), и это часто включает в себя некоторое выделенное защищенное SRAM.

person Notlikethat    schedule 14.09.2015