1、中斷:
通常被定義成一個事件,該事件改變處理器執行的指令順序。這樣的事件與cpu芯片外部電路產生
的電信號相對應。
2、中斷的產生:
每個能夠發出中斷請求的硬件設備控制器都有一條稱為IRQ的輸出線(中斷線)。所有的IRQ線都
與一個中斷控制器的輸入引腳相連,中斷控制器與cpu的intr引腳相連。
3、中斷向量:
每個中斷由0-255之間的一個8位數來標識。稱為中斷向量。
4、中斷描述符表:
IDT是一個系統表,它與每一個中斷或者異常向量相聯系,每一個向量在表中有相應的中斷處理程
序的入口地址。cpu的idtr寄存器執行IDT表的物理基地址。
5、中斷的硬件處理:
在內核被init進程初始化后,cpu運行在保護模式下。當執行一條指令后,sc和eip這對寄存器包
含了下一條將要執行的指令的邏輯地址。在執行這條指令之前,cpu控制單元會檢查在運行前一條指令時是
否發生了一個中斷。如果發生了,cpu控制單元處理中斷。
軟中斷:
軟中斷是利用硬件中斷的概念,用軟件方式進行模擬,實現宏觀上的異步執行效果。
硬中斷是外部設備對cpu的中斷。
軟中斷通常是硬中斷服務程序對內核的中斷。(中斷服務程序和中斷處理程序不同)
信號則是由內核或者其他進程對某個進程的中斷。
理解:因為每個進程空間或者線程空間都是在一定程度上相對邏輯獨立的,類似於外部設備DMA相
對於cpu。所以從理論上說,是可以實現中斷的。
擴展:信號量與消息隊列都是提供給用戶程序的,是內核服務的一種封裝。
進程內核棧和用戶棧:
每個進程都有兩個棧:用戶棧和內核棧。當進程在用戶空間運行時,cpu堆棧指針寄存器里面的內
容是用戶堆棧地址。同理,進程在內核空間運行時,eip值是內核棧空間地址。
進程用戶棧和內核棧的切換,當進程因為中斷或者系統調用而陷入內核態執行時,進程所使用的
堆棧也要從用戶棧轉到內核棧。
檢查信號中斷時在內核態即將進入用戶態的時候,而不是任何時候都檢查的。
軟中斷時軟件實現的中斷,也就是程序運行時其他程序對它的中斷。
中斷源發中斷請求或者軟中斷信號后,cpu或者接收進程在適當的時機自動進行中斷處理或者完成
軟中斷信號對應的功能。
軟中斷發生的時間是由程序控制的,而硬中斷時隨機的。
構成軟中斷機制的核心元素:
軟中斷狀態寄存器irq_stat:
軟中斷向量表:
軟中斷守護daemon:這是軟中斷實現的核心,通過查詢irq_stat判斷軟中斷是否發生。
軟中斷的工作過程模擬了硬中斷過程,當某一個軟中斷事件發生后,首先需要設置對應的中斷標
記位,觸發中斷事務,然后喚醒守護進程去檢查中斷狀態寄存器,如果查詢發現某一個軟中斷事務發生,
那么通過軟中斷向量表調用軟中斷服務程序action。