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

當前位置:首頁 > 嵌入式 > 嵌入式軟件

作者:李志敏,華清遠見嵌入式學院上海中心講師。

一:引言

在Intel的文檔中,把中斷分為兩種。一種是異常,也叫同步同斷。一種稱之為中斷,也叫異常中斷。同步中斷指的是由CPU控制單元產生,之所以稱之為同步,是因為只有一條指令執(zhí)行完畢后才會發(fā)出中斷。例如除法運算中,除數為零的時候,就會產生一個異常。異步中斷是由外部設備按照CPU的時鐘隨機產生的。例如,網卡檢測到一個數據到來就會產生一個中斷。

二:x86的中斷處理過程

由于中斷是開著的,所以當執(zhí)行完一條指令后,cs和eip這對寄存器中已經包含了下一條將要執(zhí)行的指令的邏輯地址。在處理那條指令之前,控制單元會檢查在運行前一條指令時是否發(fā)生了一個中斷或異常。如果發(fā)生了一個中斷和異常,那么控制單元執(zhí)行下列操作:

1. 確定與中斷或異常關聯(lián)的向量i(0≤ i ≤255)

2. 讀由IDTr寄存器指向的IDT表中的第i項。

3. 從gdtr寄存器獲得GDT的基地址,并在GDT中查找,以讀取IDT表項中的選擇符標識的段描述符。這個描述符指定中斷或異常處理程序所在的段的基地址。

4. 確信中斷是由授權的(中斷)發(fā)生源發(fā)出的。首先將當前特權級CPL(存放在cs寄存器的低兩位)與段描述符(存放在GDT中)的描述符特權級DPL比較。如果CPL小于DPL,就產生一個“通常保護”異常,因為中斷處理程序的特權級不能低于引起中斷的程序的特權。對于編程異常,則做進一步的安全檢查:比較CPL與處于IDT中的門描述符的DPL,如果DPL小于CPL,就產生一個“通常保護”異常,這最后一個檢查可以避免用戶應用程序訪問特殊的陷阱門和中斷門。

5. 檢查是否發(fā)生了特權級的變化,也就是說,CPL是否不同于所選擇的段描述符的DPL。如果是,控制單元必須開始使用與新的特權級相關的棧,通過執(zhí)行以下步驟來保證這一點:

A. 讀tr寄存器,以訪問運行進程的TSS段。

B. 用與新特權級相關的棧段和棧指針的正確值裝載ss和esp寄存器。這些值可以在TSS中找到。

C. 在新的棧中保存ss和esp以前的值,這些值定義了與舊特權級相關的棧的邏輯地址。

6. 如果故障已發(fā)生,用引起異常的指令地址裝載cs和eip寄存器,從而使得這條指令能再次被執(zhí)行。

7. 在棧中保存eflag、cs和eip的內容。

8. 如果異常產生了一個硬件出錯碼,則將它保存在棧中。

9. 裝載cs和eip寄存器,其值分別是IDT表中第i項門描述符的段選擇符和偏移量字段。這些值給出了中斷或者異常處理程序的第一條指令的邏輯地址??刂茊卧鶊?zhí)行的最后一步就是跳轉到中斷或異常處理程序。換句話說,處理完中斷信號后,控制單元所執(zhí)行的指令就是被選中處理程序的第一條指令。

上面的處理過程的描述摘自<<深入理解linux內核>>,其中有幾點值得注意的地方:

1:通過門后,只能提高運行級別。就像上面所述的 “當前特權級CPL(存放在cs寄存器的低兩位)與段描述符(存放在GDT中)的描述符特權級DPL比較。如果CPL小于DPL,就產生一個“通常保護”異?!?。在中斷處理中,通常把IDT中的相應段選擇符設為__KERNEL_CS。即最高的運行級別

2:上面C所述:“在新的棧中保存ss和esp以前的值,這些值定義了與舊特權級相關的棧的邏輯地址”,那ss,esp以前的值是如何找到的呢?應該是從TSS中。在中斷發(fā)生的時候,如果檢測到運行級別發(fā)生了改了,將寄存器SS,ESP中的值保存進TSS的相應級別位置。再加載新的SS,ESP的值,然后從TSS中取出舊的SS,ESP值,再壓棧。

3:堆棧的改變,如下圖所示:


從上圖中可以看到,硬件自動保存的硬件環(huán)境是非常少,要在中斷后恢復到以前的環(huán)境,還需要保存更多的寄存器值,這是由操作系統(tǒng)完成的。這在內核的代碼中可以看到中斷和異常被處理完畢后,相應的處理程序必須產生一條iret指令,把控制權轉交給被中斷的進程,這將迫使控制單元:

1. 用保存在棧中的值裝載cs、eip和eflag寄存器。如果一個硬件出錯碼曾被壓入棧中,并且在eip內容的上面,那么,執(zhí)行iret指令前必須先彈出這個硬件出錯碼。

2. 檢查處理程序的CPL是否等于cs中的低兩位的值。如果是,iret終止返回;否則,轉入下一步。

3. 從棧中轉載ss和esp寄存器,因此,返回到與舊特權級相關的棧。

4. 檢查ds、es、fs及gs段寄存器的內容,如果其中一個寄存器包含的選擇符是一個段描述符,并且其DPL值小于CPL,那么,清相關的段寄存器??刂茊卧@么做是為了禁止用戶態(tài)的程序利用內核以前所用的段寄存器。如果不清除這些寄存器的話,惡意的用戶程序就會利用他們來訪問內核地址空間。

注意到4:舉例說明一下。如果通過系統(tǒng)調用進入內核態(tài)。然后將DS,ES的值賦為__KERNEL_DS(在2。4的內核里),處理完后(調用iret后),恢復CS,EIP的值,此時CS的CPL是3。因為DS,ES被設為了__KERNEL_DS,所以其DPL是0,所以要將DS,ES中的值清除。在2。6內核中,發(fā)生中斷或異常后,將DS,ES的值設為了__USER_DS,避免了上述的清除過程,提高了效率。

“本文由華清遠見http://www.embedu.org/index.htm提供”



華清遠見

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉