www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > Linux閱碼場
[導(dǎo)讀]INTERRUPT中斷是硬件和軟件交互的一種機(jī)制,可以說整個(gè)操作系統(tǒng),整個(gè)架構(gòu)都是由中斷來驅(qū)動(dòng)的。中斷的機(jī)制分為兩種,中斷和異常,中斷通常為設(shè)備觸發(fā)的異步事件,而異常是執(zhí)行指令時(shí)發(fā)生的同步事件。本文主要來說明外設(shè)觸發(fā)的中斷,總的來說一個(gè)中斷的起末會(huì)經(jīng)歷設(shè)備,中斷控制器,CPU三個(gè)...

INTERRUPT

中斷是硬件和軟件交互的一種機(jī)制,可以說整個(gè)操作系統(tǒng),整個(gè)架構(gòu)都是由中斷來驅(qū)動(dòng)的。中斷的機(jī)制分為兩種,中斷和異常,中斷通常為 設(shè)備觸發(fā)的異步事件,而異常是 執(zhí)行指令時(shí)發(fā)生的同步事件。本文主要來說明 外設(shè)觸發(fā)的中斷,總的來說一個(gè)中斷的起末會(huì)經(jīng)歷設(shè)備,中斷控制器,CPU 三個(gè)階段:設(shè)備產(chǎn)生中斷信號,中斷控制器翻譯信號,CPU 來實(shí)際處理信號

本文用 的實(shí)例來講解多處理器下的中斷機(jī)制,從頭至尾的來看一看,中斷經(jīng)歷的三個(gè)過程。其中第一個(gè)階段設(shè)備如何產(chǎn)生信號不講,超過了操作系統(tǒng)的范圍,也超過了我的能力范圍。各種硬件外設(shè)有著自己的執(zhí)行邏輯,有各種形式的中斷觸發(fā)機(jī)制,比如邊沿觸發(fā),電平觸發(fā)等等??偟膩碚f就是向中斷控制器發(fā)送一個(gè)中斷信號,中斷控制器再作翻譯發(fā)送給 , 再執(zhí)行中斷服務(wù)程序?qū)χ袛噙M(jìn)行處理。

中斷控制器

說到中斷控制器,是個(gè)什么東西?中斷控制器可以看作是中斷的代理,外設(shè)是很多的,如果沒有一個(gè)中斷代理,外設(shè)想要給 發(fā)送中斷信號來處理中斷,那只能是外設(shè)連接在 的管腳上, 的管腳是很寶貴的,不可能拿出那么多管腳去連接外設(shè)。所以就有了中斷控制器這個(gè)中斷代言人,所有的 外設(shè)連接其上,發(fā)送中斷請求時(shí)就向中斷控制器發(fā)送信號,中斷控制器再通知 CPU,如此便解決了上述問題。

中斷控制器有很多,前文講過 PIC,PIC 只用于單處理器,對于如今的多核多處理器時(shí)代,PIC 無能為力,所以出現(xiàn)了更高級的中斷控制器 APICAPIC() 高級可編程中斷控制器,APIC 分成兩部分 LAPICIOAPIC,前者 LAPIC 位于 內(nèi)部,每個(gè) 都有一個(gè) LAPIC,后者 IOAPIC 與外設(shè)相連。外設(shè)發(fā)出的中斷信號經(jīng)過 IOAPIC 處理之后發(fā)送給 LAPIC,再由 LAPIC 決定是否交由 進(jìn)行實(shí)際的中斷處理。

可以看出每個(gè) 上有一個(gè) LAPIC,IOAPIC 是系統(tǒng)芯片組一部分,各個(gè)中斷消息通過總線發(fā)送接收。關(guān)于 APIC 的內(nèi)容很多也很復(fù)雜,詳細(xì)描述的可以參考 開發(fā)手冊卷三,本文不探討其中的細(xì)節(jié),只在上層較為抽象的層面講述,理清 APIC 模式下中斷的過程。

計(jì)算機(jī)啟動(dòng)的時(shí)候要先對 APIC 進(jìn)行初始化,后續(xù)才能正確使用,前面說過初始化就是設(shè)置一些寄存器,這部分我在再談中斷(APIC)有所講解,本文關(guān)于寄存器這一塊不會(huì)再詳述,可以先看一看。下面來看看 APIC 在一種較為簡單的工作模式下的初始化過程:

IOAPIC

初始化 IOAPIC 就是設(shè)置 IOAPIC 的寄存器,IOAPIC 寄存器一覽:

所以有了以下定義:

#define?REG_ID?????0x00??//?Register?index:?ID
#define?REG_VER????0x01??//?Register?index:?version
#define?REG_TABLE??0x10??//?Redirection?table?base??重定向表
但是這些寄存器是不能直接訪問的,需要通過另外兩個(gè)映射到內(nèi)存的寄存器來讀寫上述的寄存器。

內(nèi)存映射的兩個(gè)寄存器

這兩個(gè)寄存器是內(nèi)存映射的,IOREGSEL,地址為 IOWIN,地址為 。IOREGSEL 用來指定要讀寫的寄存器,然后從 IOWIN 中讀寫。也就是常說的 index/data 訪問方式,或者說 ,用 index 端口指定寄存器,從 data 端口讀寫寄存器,data 端口就像是所有寄存器的窗口。

而所謂內(nèi)存映射,就是把這些寄存器看作內(nèi)存的一部分,讀寫內(nèi)存,就是讀寫寄存器,可以用訪問內(nèi)存的指令比如 mov 來訪問寄存器。還有一種是 IO端口映射,這種映射方式是將外設(shè)的 IO端口(外設(shè)的一些寄存器) 看成一個(gè)獨(dú)立的地址空間,訪問這片空間不能用訪問內(nèi)存的指令,而需要專門的 in/out 指令來訪問。

通過 IOREGSELIOWIN 既可以訪問到 IOAPIC 所有的寄存器,所以結(jié)構(gòu)體 如下定義:

struct?ioapic?{
??uint?reg;???????//IOREGSEL
??uint?pad[3];????//填充12字節(jié)
??uint?data;??????//IOWIN
};
填充 字節(jié)是因?yàn)?IOREGSEL,長度為 4 字節(jié),IOWIN,兩者中間差了 2 字節(jié),所以填充 字節(jié)補(bǔ)上空位方便操作。

通過 IOREGSEL?選定寄存器,然后從IOWIN中讀寫相應(yīng)寄存器,因此也能明白下面兩個(gè)讀寫函數(shù):

static?uint?ioapicread(int?reg)
{
??ioapic->reg?=?reg;????//選定寄存器reg
??return?ioapic->data;??//從窗口寄存器中讀出寄存器reg數(shù)據(jù)
}

static?void?ioapicwrite(int?reg,?uint?data)
{
??ioapic->reg?=?reg;????//選定寄存器reg
??ioapic->data?=?data;??//向窗口寄存器寫就相當(dāng)于向寄存器reg寫
}
這兩個(gè)函數(shù)就是根據(jù) 來讀寫 IOAPIC 的寄存器。下面來看看 IOAPIC 寄存器分別有些什么意義,了解了之后自然就知道為什么要這樣那樣的初始化了。下面只說 中涉及到的寄存器,其他的有興趣見文末鏈接。

IOAPIC 寄存器

ID Register

  • 索引為 0

  • :ID

Version Register

  • 索引為 1

  • 表示版本,

  • 表示重定向表項(xiàng)最多有幾個(gè),這里就是 23(從 0 開始計(jì)數(shù))

重定向表項(xiàng)

IOAPIC 有 24 個(gè)管腳,每個(gè)管腳都對應(yīng)著一個(gè) 64 位的重定向表項(xiàng)(也相當(dāng)于 64 位的寄存器),保存在 ,重定向表項(xiàng)的格式如下所示:

來源于 interrupt in linux
來源于 interrupt in linux
來源于 interrupt in linux
這是 大佬在他的 中總結(jié)出來的,很全面也很復(fù)雜,這里有所了解就好,配合著下面的初始化代碼對部分字段作相應(yīng)的解釋。

IOAPIC 初始化

#define?IOAPIC??0xFEC00000???//?Default?physical?address?of?IO?APIC

void?ioapicinit(void)
{
??int?i,?id,?maxintr;

??ioapic?=?(volatile?struct?ioapic*)IOAPIC;??????//IOREGSEL的地址
??maxintr?=?(ioapicread(REG_VER)?>>?16)?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉