天天看點

中斷實時性及處理技術簡介

本文作者:Xingguang 本文來源:晶片開放社群(OCC)

1. 什麼是中斷

中斷是CPU處理外部事件的一個重要技術。它能使CPU暫停正在執行的任務,轉而進行中斷請求,處理完成後傳回斷點,繼續執行原來的任務。

2. 中斷與輪詢的差別

在一個SoC中,外部裝置與CPU的互動一般有兩種手段:輪詢和中斷。

輪詢是指CPU不斷查詢外設的狀态寄存器,進而了解裝置的狀态,進行必要的操作。為了節約CPU資源,查詢工作往往不是連續的,而是定時進行。輪詢方式具有簡單,易實作,易控制的優勢,同時也存在浪費CPU和系統資源,無法及時感覺裝置狀态變化的不足。 中斷,顧名思義,就是打斷正在進行的工作。中斷不需要處理器輪詢裝置的狀态,裝置在自己發生狀态改變時将主動發送一個中斷請求給處理器,後者在接收到這一請求時,會暫停目前正在執行的任務,轉而去處理外設的中斷請求。

目前大多數SoC的外設都采用中斷的方式與處理器進行溝通,本文将重點介紹與中斷實時性相關的技術。

3. 中斷實時性的概念

中斷實時性是指CPU響應中斷的快慢程度,我們可以用中斷響應時間來衡量它。CPU響應中斷,可以分為以下幾個步驟:

(1) 完成目前指令的執行

(2) 保護現場

(3) 尋找中斷入口

(4) 執行中斷處理程式

(5) 中斷傳回并恢複現場

中斷響應時間,就是從上述第(1)步開始,到第(4)步的第一條指令為止,所花費的時間。在很多系統,特别是實時系統中,必須盡量縮短中斷響應時間,以提高中斷的實時性。

4. 提高中斷實時性的技術

我們重點介紹兩項技術,分别用來加速上述的第(1)步和第(4)步。

4.1 中斷快速響應模式——加速完成目前指令

在通常情況下,CPU會在每條指令的“退休”階段響應中斷。所謂“退休”,是指一條指令已經完成了所有的操作,即将從流水線上退出。如果CPU執行了多周期指令或者執行延時不可預期指令,那麼該條指令需要較長的時間才能到達“退休”階段。此時的中斷響應速度會受到極大影響,大幅降低系統的實時性。在中斷快速響應模式下,CPU無需等待指令退休,即可直接響應中斷。這一機制可以打斷較長執行延時的指令,進而提高中斷響應的速度。

【例】玄鐵R807實作了中斷快速響應模式,軟體可以通過控制寄存器打開/關閉此功能。

假設目前指令是一條Load指令,在沒有cache或cache miss的情況下,CPU需要讀取memory。受總線帶寬和memory延時的影響,該指令的執行時間不确定。

  • 在普通模式下,CPU必須等到Load指令退休以後才能響應中斷,等待時間可能是幾十~幾百個時鐘周期,嚴重影響實時性。
  • 在中斷快速響應模式下,CPU放棄目前的Load指令,直接響應中斷,等待時間幾乎為零。

4.2 利用TCM——更快開始進行中斷

TCM是Tightly Coupled Memory的縮寫,意思是緊耦合Memory。所謂“緊耦合”,是指與CPU的流水線緊密結合。我們可以把TCM通俗地了解為“CPU身邊的memory”。它可以像一般memory一樣讀寫,同時不受總線帶寬的影響,可以保證單周期通路。TCM用于存放對實時性有嚴格要求的指令和資料,當然也是加速中斷處理的有力手段。

【例】玄鐵I805和R807實作了TCM。下面對比一下使用TCM與否的差别。
  • 不使用TCM:進行中斷時,CPU跳轉到普通memory空間取指令,通路延時不确定。雖然Cache可以起到加速的作用,但是Cache存在Miss、Eviction等不确定因素,是以不能100%保證明時性。
  • 使用TCM:系統初始化時,通過專用接口将一些關鍵中斷的處理函數搬運到TCM,并且把中斷入口位址映射到TCM。進行中斷時,CPU跳轉到TCM區域取指令,TCM可以保證穩定的低延時指令流,進而100%滿足實時性的要求。

繼續閱讀