日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
探究Linux操作系統(tǒng)中的中斷和異常(1)——從IDT到I/O中斷處理
當(dāng)外部事件發(fā)生時(shí)(比如硬件設(shè)備請(qǐng)求數(shù)據(jù)傳輸、用戶輸入等)。


成都創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比開(kāi)化網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式開(kāi)化網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋開(kāi)化地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴(lài)。

作為一名程序員,我們都知道,在計(jì)算機(jī)運(yùn)行過(guò)程中,CPU會(huì)不斷地執(zhí)行指令。但是,當(dāng)外部事件發(fā)生時(shí)(比如硬件設(shè)備請(qǐng)求數(shù)據(jù)傳輸、用戶輸入等),CPU需要立即停下來(lái)去響應(yīng)這些事件,然后再返回原來(lái)的位置繼續(xù)執(zhí)行指令。這種被打斷的現(xiàn)象就叫做“中斷”。

在操作系統(tǒng)級(jí)別上,對(duì)于每個(gè)可引起CPU響應(yīng)的事件都有一個(gè)唯一的編號(hào)稱(chēng)為“中斷向量”,而對(duì)于每個(gè)不同類(lèi)型的中斷向量都有相應(yīng)的代碼段負(fù)責(zé)處理該類(lèi)別下所有具體實(shí)例化出來(lái)的事件。

那么,在Linux操作系統(tǒng)內(nèi)部,是如何實(shí)現(xiàn)這樣一個(gè)復(fù)雜而高效率、完整性極強(qiáng)且安全穩(wěn)定性又較好得管理著大大小小各種類(lèi)型各種來(lái)源異步拋出并要求及時(shí)響應(yīng)處理以完成任務(wù)轉(zhuǎn)移或者通信交互目標(biāo)呢?答案就在本文所述內(nèi)容里面。

1. 中斷描述符表IDT

首先介紹核心概念——IDT。 IDT(Interrupt Descriptor Table) 是 Linux 操作系統(tǒng)用于保存所有 CPU 可能接收并響應(yīng)之 IRQ 和 Exception 的信息表。在Linux內(nèi)核啟動(dòng)時(shí),就會(huì)為每個(gè)中斷向量創(chuàng)建一個(gè)對(duì)應(yīng)的中斷描述符,并將其存儲(chǔ)到IDT中。

這些描述符包含了很多信息,比如:

- 中斷處理函數(shù)指針

- 標(biāo)志位(例如:是否允許該中斷被屏蔽)

- 特權(quán)級(jí)別(用于確定哪些代碼可以訪問(wèn)該中斷)

因此,在 Linux 操作系統(tǒng)內(nèi)部要實(shí)現(xiàn)對(duì)各種不同類(lèi)型的外部事件進(jìn)行響應(yīng)和管理,就需要使用 IDT 這個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)所有可能引發(fā) CPU 響應(yīng)并觸發(fā)相應(yīng) Interrupt Service Routine 的 IRQ 和 Exception 信號(hào)。

2. I/O 中斷處理

I/O (Input/Output) 中斷是最常見(jiàn)、最基本的一類(lèi)硬件中斷。當(dāng)設(shè)備發(fā)送了數(shù)據(jù)或請(qǐng)求后,CPU 需要立即停止正在執(zhí)行的任務(wù)去響應(yīng)這個(gè)事件,并且從設(shè)備讀取或者寫(xiě)入數(shù)據(jù)傳輸完成后返回原來(lái)位置繼續(xù)執(zhí)行下面程序。

在Linux操作系統(tǒng)內(nèi)部,I/O 設(shè)備通常與 CPU 之間通過(guò)總線連接。當(dāng) I/O 設(shè)備產(chǎn)生一個(gè) IRQ 信號(hào)時(shí),則會(huì)觸發(fā)一個(gè)所謂“IRQ Handler”的特定機(jī)制,該機(jī)制負(fù)責(zé)識(shí)別并調(diào)用相應(yīng)的 ISR(Interrupt Service Routine) 函數(shù)來(lái)進(jìn)行真正地處理工作。

ISR 是由操作系統(tǒng)開(kāi)發(fā)人員編寫(xiě)出來(lái)以響應(yīng)某一特定類(lèi)型中斷的函數(shù)。當(dāng)觸發(fā)一個(gè) I/O 中斷時(shí),CPU 會(huì)根據(jù) IDT 查找到相應(yīng)的 ISR 函數(shù),并將控制權(quán)轉(zhuǎn)移給該函數(shù)。

在 ISR 函數(shù)內(nèi)部,通常需要完成如下工作:

- 關(guān)閉或者屏蔽當(dāng)前 IRQ

- 處理設(shè)備傳輸數(shù)據(jù)等操作

- 打開(kāi)或者允許后續(xù) IRQ

3. 總結(jié)

總之,在 Linux 操作系統(tǒng)內(nèi)部實(shí)現(xiàn)對(duì)各種不同類(lèi)型的外部事件進(jìn)行響應(yīng)和管理是非常復(fù)雜而嚴(yán)謹(jǐn)?shù)倪^(guò)程。這篇文章主要介紹了中斷描述符表IDT以及I/O中斷處理機(jī)制兩個(gè)核心概念,從而幫助大家更好地理解Linux操作系統(tǒng)內(nèi)部實(shí)現(xiàn)原理,并能夠深入挖掘其它相關(guān)知識(shí)點(diǎn)。

參考資料:

1. -linux-interrupt/index.html

2. -system-call.html


當(dāng)前文章:探究Linux操作系統(tǒng)中的中斷和異常(1)——從IDT到I/O中斷處理
網(wǎng)站鏈接:http://www.dlmjj.cn/article/dphphpd.html