gicv3架構是gicv2架構的公升級版,增加了很多東西。變化在於以下:
對於cpu inte***ce的暫存器,增加系統暫存器訪問方式
一、gicv3結構
下圖是gicv3的架構。
包含了以下的元件:
其中,cpu inte***ce是實現在core內部的,distributor,redistributor,its是實現在gic內部的。
cpu inte***ce和gic的redistributor通訊,通過axi-stream協議,來實現通訊。
二、屬性層次
gicv3的一大變化,是對core的標識。對core不在使用單一數字來表示,而是使用屬性層次來標識,和arm core,使用mpidr_el1系統暫存器來標識core一致。
每個core,根據屬性層次的不同,使用不同的標號來識別。如下圖所示,是乙個4層結構,那麼對於乙個core來說,就可以用 ***.***.***.*** 來識別。
這種標識方式,和armv8架構的使用mpidr_el1暫存器,來標識core是一樣的。
每個core,連線乙個cpu inte***ce,而cpu inte***ce會連線gic中的乙個redistributor。redistributor的標識和core的標識一樣。
三、中斷分組
gicv3,將中斷分成了2個大組,group0和group1。
如下圖所示:
以下是irq,fiq與組的對應關係。
四、中斷生命週期
中斷生命週期,如下圖所示:
這個中斷生命週期,和gicv2的中斷生命週期是一樣的。
五、中斷流程
下圖是gic的中斷流程,中斷分成2類:
一類是中斷要通過distributor,比如spi中斷
一類是中斷不通過distributor,比如lpi中斷
lpi中斷的中斷流程
六、中斷處理
中斷處理,分為邊沿觸發處理和電平觸發處理
1、邊沿觸發處理
外部邊沿中斷到達,中斷狀態被置為pending狀態。
軟體讀取iar暫存器值,表示pe認可該中斷,中斷狀態被置為active狀態
軟體中斷處理完畢後,寫eoir暫存器,表示優先順序重置。過一段時間後,寫dir暫存器,中斷狀態被置為idle狀態。
2、電平觸發處理
外部高電平中斷到達,中斷狀態置為pending狀態。
軟體讀取iar暫存器,表示pe認可該中斷。但中斷依然為高,中斷狀態進入pending and active狀態。
軟體中斷處理完畢後,寫eoir暫存器,表示優先順序重置。過一段時間後,寫dir暫存器,中斷狀態被置為idle狀態。
系統暫存器訪問的暫存器:
下圖是gicv3中,各個暫存器,所在的位置。
下圖是icc的系統暫存器,和memory-mepped方式暫存器的對應關係的一部分,更多的就要檢視gicv3的spec。
那麼,問題來了,gicv3中,為什麼選擇將cpu inte***ce,從gic中抽離,實現在core內部?為什麼要將cpu inte***ce的暫存器,增加系統暫存器訪問方式,實現在core的內部?這樣做,是有什麼好處?
我認為,gicv3的上述安排,第一是為了軟體編寫能夠簡單,通用,第二是為了讓中斷響應能夠更快。
首先要先了解,在gic的暫存器中,哪一些暫存器,是會頻繁被core所訪問的,哪一些暫存器,是不會頻繁被core所訪問的。毫無疑問,cpu inte***ce的暫存器,是會頻繁被core所訪問的,因為core需要訪問cpu inte***ce的暫存器,來認可中斷,來中斷完成,來無效中斷。而其他的暫存器,是配置中斷的,只有在core需要去配置中斷的時候,才用訪問得到。有了這個認識,那麼理解之後我所講述的,就比較容易了。
在gicv2中,cpu inte***ce的暫存器,是實現在gic內部的,因此當core收到乙個中斷時,會通過axi匯流排(假設memory匯流排是axi匯流排),去訪問cpu inte***ce的暫存器。而中斷在乙個soc系統中,是會頻繁的產生的,這就意味著,core會頻繁的去訪問gic的暫存器,這樣會占用axi匯流排的頻寬,總而會影響中斷的實時響應。而且core通過axi匯流排去訪問cpu inte***ce暫存器,延遲,也比較大。
在gicv3中,將cpu inte***ce從gic中抽離出來,實現在core內部,而不實現在gic中。core對cpu inte***ce的訪問,通過系統暫存器方式訪問,也就是使用msr,mrs訪問,那麼core對cpu inte***ce的暫存器訪問,就加速了,而且還不占用axi匯流排頻寬。這樣core對中斷的處理,就加速了。
cpu inte***ce與gic之間,是通過專用的axi-stream匯流排,來傳輸資訊的,這樣也不會占用axi匯流排的頻寬。
gicv3架構的內容,比較多,我這邊會拆成幾個部分。
下一部分,會介紹gic stream協議。也就是cpu inte***ce與gic之間的通訊。
Dubbo入門 3 架構原理
出處 dubbo入門 3 架構原理 在之前的兩篇文章中,我們了解了有關分布式服務的基本概念和簡單的使用。現在來了解一下dubbo是如何提供這些功能的 如何運作的,以及整個框架的層次結構。本文參考自dubbo架構設計詳解及dubbo官方使用者手冊 首先要了解dubbo提供的三大核心功能 通訊提供多種對...
Android OkHttp3架構分析
在okhttp3中,其靈活性很大程度上體現在,可以intercept其任意乙個環節,而這個優勢便是okhttp3整個請求響應架構體系的精髓所在 okhttp 中的對所有的任務採用namedrunnable,約束每個執行單元給出對應的業務名稱,以便於執行緒維護。1.非同步請求執行緒池 okhttp d...
SequoiaDB 系列之四 架構簡析
在本系列的第一篇中,簡述了sequoiadb的安裝,以及乙個 偽 集群的部署 第二篇和第三篇對sequoiadb的集群,做了簡單地操作。在本篇中,將對sequoiadb的架構進行簡單的分析。因為自身能力有限,對於架構這麼高大上的主題,不敢輕言。因此本文會摘抄sequoiadb官方的描述,加上自己的理...