2015-09-14 75 views
0

我正在閱讀關於ARM Trustzone的link。我知道使用TrustZone,可以將內存劃分爲安全和非安全區域。供應商可以使用它來運行安全的操作系統。TrustZone內存分區

我很好奇的是什麼是這個分區的粒度支持?只是可能有一塊標記爲「安全」的內存塊,並且每個操作系統只能有一塊這樣的內存塊? TrustZone是否有能力爲單個進程分配內存?

可以說我有一個.so文件(假設的例子)爲Linux應用程序。有可能過程A中的相同代碼可以在虛擬地址0x1000到0x2000中被標記爲安全的,而在過程B中可以在虛擬地址0x5000到0x6000中被標記爲安全的?

回答

1

TrustZone分區發生在物理內存級別,因此您問題的進程級別部分並不適用。請注意,作爲非安全操作系統的Linux甚至無法訪問安全內存,因此具有用於不可訪問地址的虛擬映射的用處不大;然而,安全操作系統確實能夠憑藉其頁表項中的NS位映射安全和非安全物理地址。

至於物理分區是如何進行的,它取決於實現。您的鏈接指向TZC-380支持2-16個區域,最小爲32KB;其後繼TZC-400有9個區域,並一路下降到4KB粒度。其他實現可能仍然不同,儘管粒度低於4KB是不太可能的,因爲對於其MMU處於啓用狀態的CPU來說,這種實現幾乎不可用。另外,系統中通常只有一些硬件連接到安全存儲器映射(TZC的編程接口),並且通常包含一些專用的安全SRAM。