自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖解SOC中的Time:系統(tǒng)里有哪些Timer?

系統(tǒng) Linux
一個大的系統(tǒng)里,有多少個Timer?這些Timer的作用分別是什么?這些Timer有什么區(qū)別?它們的精確度有什么不同嗎?

說明:

本文講述的是armv8-aarch64、armv9架構(gòu)在設(shè)計模式上,本文帶有一些個人的見解,如有不同的見解,可以評論區(qū)或微信群參與討論。

思考:

  • 一個大的系統(tǒng)里,有多少個Timer?這些Timer的作用分別是什么?這些Timer有什么區(qū)別?它們的精確度有什么不同嗎?
  • Linux Kernel的Tick使用的是哪個Timer?watchdog是用的哪個Timer?
  • 一個ARM Core里有又多少個Timer?不同軟件系統(tǒng)中的Timer的使用方式有何不同嗎?
  • 應(yīng)用程序中的 setitimer()這樣的函數(shù)是否會調(diào)用到底層程序?
  • 應(yīng)用程序要讀取當(dāng)前系統(tǒng)時間戳的時候,是否需要調(diào)用到kernel space? 在glibc中是否就可以實現(xiàn)了?
  • 什么是arch timer?什么是SOC Timer、apb timer、memory-mapped timer?
  • 對于arch timer,又分為物理timer和虛擬timer?那么什么時候使用物理timer,什么時候使用虛擬timer?為什么?
  • EL1和S-EL1中使用的arch timer是如何隔離的?(這里所說的隔離是指寄存器如何隔離的,中斷如何隔離的) 9、EL3 Physical Timer對應(yīng)的寄存器為什么是xxxEL1, 不應(yīng)該是xxxEL3嗎?

1、系統(tǒng)里面有多少個Timer?

圖片

如上圖所示,在一個SOC中一定/可能存在:

  • core timer(也叫arch timer),每個core中都有這個Timer
  • SOC Timer(也叫apb timer、memory-mapped Timer),可能會有多個,可以存在以下這樣的:

(1) 一個專門給Non-secure 使用的timer

(2) 一個專門給Secure 使用的timer

(3) 一個專門用于特定用途的timer(4) 、綁定core的Timer,例如8個timer,固定某個timer給某個core使用

2、每一個core里面又有多少個Timer

2.1、四個物理Timer

圖片

  • EL1 Physical Timer 不區(qū)分secure和non-secure,但在ATF的switch cpucontext的時候,會保存和恢復(fù)相關(guān)寄存器,所以從軟件視角來看是有兩套寄存器,也就是有 non-secure EL1PhysicalTimer? 和 secure EL1PhysicalTimer?,這也是最最理想的設(shè)計方案。然而非常非常非常非常的遺憾的是,寄存器通過軟件switch cpucontext可以變成2套,但中斷呢?中斷是無法同時給non-secure和secure同時使用的,也無法做到中斷在Security State之間的隔離。既然這樣,說明這樣的硬件是一個"非常嚴(yán)重"的問題,那么我們看下軟件是怎么使用的呢?

(1)Linux Kernel正常使用,在讀取counter值、counter頻率的同時,也會設(shè)置CTL、CVAL、TVAL等相關(guān)寄存器,也會觸發(fā)和處理30中斷(EL1 Physical Timer的默認中斷號是30);(2)optee中,僅僅是讀取counter值、counter頻率的同時,就可以計算時間戳了。optee不會讀取CTL、CVAL、TVAL等相關(guān)寄存器,當(dāng)然也不會觸發(fā)和處理30中斷了。

以上便是軟件基于“硬件缺陷”而進行的設(shè)計,自然也不會出現(xiàn)什么問題。然后你說ARM Timer有缺陷就有缺陷了?你真的懂它們的設(shè)計嗎?事實上ARM的設(shè)計中,也考慮了上面描述的問題。你仔細看看它的 ?EL3PhysicalTimer?,他的寄存器的名字竟然是 xxx_EL1?(而不是 xxx_EL3?),也就是說它本身就是想給secure security用的(EL3也屬于secure security)。另外我也參考了具體的arm core trm手冊,發(fā)現(xiàn) EL3PhysicalTimer?所對應(yīng)的中斷號(29號中斷)的signal configuration描述為"Secure EL1 Pyhsical Timer"。我們再查一下BL32(Secure EL1)的參考程序 trusted-firmware-a/bl32/tsp/tsp_timer.c?, 它操作的也正是 EL3PhysicalTimer。 

總結(jié): 

(1) ?EL1PhysicalTimer? 不區(qū)分secure和non-secure,在secure和non-secure之間也無法做到隔離。一般情況下它是給NS-EL1使用的。當(dāng)然S-EL1如果是僅僅讀取counter和頻率獲取當(dāng)前時間戳,也是可以用的,但這不應(yīng)該是建議的。因為這樣造車non-secure也可以竊取到secure側(cè)的時間戳。

(2) ?EL3PhysicalTimer? 的本意就是想給secure用的,包括EL3和S-EL1

  • EL2 Physical Timer 給non-secure EL2使用的
  • S-EL2 Physical Timer 給secure EL2使用的
  • EL3 Physical Timer 給Secure使用的,包括EL3和S-EL1

2.2、三個虛擬Timer

圖片

EL1VirtualTimer?主要是給EL1 OS(guest os)使用的,那么對于一個操作系統(tǒng),它到底是使用 EL1PhysicalTimer?還是使用 EL1VirtualTimer? ? 由宏控決定,在編譯的時候就決定了。例如你這個OS沒有跑在VM中,那么就使用 EL1PhysicalTimer?,如果你這個OS是要跑在VM中的,那么就使用 EL1VirtualTimer

圖片

EL2PhysicalTimer?是很好理解的,就是給EL2管理程序使用的嘛,但是 EL2VirtualTimer?是給誰用的呢? 這里就需要一點虛擬化的概念了, EL2VirtualTimer是給Host App使用的。

作者簡介:

Baron (csdn:代碼改變世界ctw),九年手機安全/SOC底層安全開發(fā)經(jīng)驗。擅長trustzone/tee安全產(chǎn)品的設(shè)計和開發(fā)。

責(zé)任編輯:武曉燕 來源: Linux閱碼場
相關(guān)推薦

2019-06-26 09:10:07

操作系統(tǒng)調(diào)度算法

2019-08-28 09:27:33

Linux操作系統(tǒng)技術(shù)

2015-10-13 09:56:33

2009-07-17 16:32:34

Timer對象Swing

2025-02-13 09:26:43

Python元組集合

2021-01-05 10:17:38

人臉識別AI人工智能

2011-04-26 17:30:23

2009-12-03 16:01:18

IP TIME雙WAN

2024-04-01 11:43:51

Rust開發(fā)插件

2022-06-14 23:23:29

區(qū)塊鏈比特幣數(shù)據(jù)庫

2013-08-09 15:19:57

Windows系統(tǒng)盜版系統(tǒng)

2010-05-05 10:49:34

Oracle 復(fù)合類型

2022-08-27 14:14:06

Spring事務(wù)開發(fā)

2023-08-05 00:10:18

2021-06-27 17:20:20

遺留系統(tǒng)隱形成本CIO

2023-09-03 22:14:23

分布式ID

2023-06-05 16:41:27

Python開發(fā)

2010-04-21 09:12:56

Oracle JDBC

2010-05-05 09:33:46

Oracle事務(wù)

2009-12-22 14:13:53

BGP種類
點贊
收藏

51CTO技術(shù)棧公眾號