ARM GIC(四) gicv3架構基礎

2021-10-09 23:12:03 字數 3003 閱讀 4922

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官方的描述,加上自己的理...