實際動手觀察一下中斷

2021-10-13 05:44:36 字數 2195 閱讀 2995

本文是《作業系統:以程式設計師的角度》第三章,本章的主題是從程式設計師的角度來理解作業系統到底是如何工作的。本篇承接上文《作業系統是如何執行的》,以下為本篇目錄:

在前幾節中我們已經知道了,滑鼠、鍵盤、網絡卡等外設是通過中斷(interrupt)的形式來進行管理的,cpu在接收到中斷訊號後切換到核心模式,作業系統開始執行來對外設進行管理。在這一節中,我們將以linux作業系統為例動手驗證一下我們之前學的知識。

我們使用的工具是linux下的/proc/interrupts檔案。

/proc/interrupts

在類unix系統中(當然包括linux),可以通過檢視檔案的方式來獲取程序以及核心執行的狀態資訊,這對於我們理解作業系統的執行是很有幫助的。這些檔案的路徑在/proc下,其中/proc/interrupts檔案中儲存的就是作業系統當前中斷的統計資訊,從檔案的名字也能看出這一點來,我們使用命令來檢視一下這個檔案裡到底有什麼(你可以使用任何你熟悉的命令):

$ cat /proc/interrupts
以下是筆者單核linux系統中的輸出,注意這裡只顯示了其中的一部分:

cpu0       

0: 19 io-apic 2-edge timer

1: 68421 io-apic 1-edge i8042

8: 1 io-apic 8-edge rtc0

9: 0 io-apic 9-fasteoi acpi

12: 1162008 io-apic 12-edge i8042

14: 0 io-apic 14-edge ata_piix

15: 0 io-apic 15-edge ata_piix

16: 7797 io-apic 16-fasteoi vmwgfx, snd_ens1371

17: 135892 io-apic 17-fasteoi ehci_hcd:usb1, ioc0

18: 66 io-apic 18-fasteoi uhci_hcd:usb2

19: 160734 io-apic 19-fasteoi eth0

24: 0 pci-msi 344064-edge pcie pme, pciehp

由於筆者的計算機中只有乙個cpu,因此第一行只顯示了「cpu0」,如果你的計算機是多核cpu,那麼第一行cpu的個數就是你的計算機中cpu的個數。

第一列表示的是中斷請求號irq (interrupt request),有的同學會有疑問,這裡的中斷請求號和《程式設計師應如何理解中斷》這一節中異常表中的異常號有什麼關係呢?我們同樣以inter的x86系列為例,我們已經知道了x86中將異常表中的32~217用於外設中斷,因此我們只需要將irq+32就可以在異常表中找到對應的handler了,也就是說這個檔案裡記錄的中斷型別是從0開始計數的。

第二列表示的是中斷產生的次數,即從開機到目前為止產生的中斷次數;第三列和第四列表示的是中斷控制器(interrupt controller),在這裡我們無需關心;最後一列表示的是產生中斷的硬體裝置。

在筆者的計算機中,第1號i8042表示的是鍵盤,第12號i8042表示的是滑鼠,第19號eth0表示的是網絡卡。

動手感受一下中斷

接下來我們就實際驗證一下,晃動滑鼠,敲擊鍵盤,開啟網頁看看這些中斷數會不會有什麼變化,很顯然這些中斷數應該不斷的增加。

由於我們使用 cat /proc/interrupts命令只能檢視此刻的中斷次數,也就是說cat顯示的結果的靜態的,而該數字是不斷變化的,因此我們需要一種方法能實時的顯示中斷次數,在linux下我們可以使用watch命令,該命令的作用就是週期性的執行某個程式,並把結果輸出到螢幕當中,這樣我們就可以動態的看到這些數字的變化了,我們可以使用如下命令實時的對中斷進行觀察:

watch -n0.1 -t cat /proc/interrupts
其中-n0.1表示的是每100ms執行一次cat /proc/interrupts,-t表示不顯示命令引數資訊,執行該命令後,晃動一下你的滑鼠滑鼠,敲擊鍵盤,開啟網頁你會看到第1號、12號、19號的中斷次數確實在不斷增加。

FPGA之外,了解一下中斷

中斷是什麼?中斷的漢語解釋是半中間發生阻隔 停頓或故障而斷開。那麼,在計算機系統中,我們為什麼需要 阻隔 停頓和斷開 呢?舉個日常生活中的例子,比如說我正在廚房用煤氣燒一壺水,這樣就只能守在廚房裡,苦苦等著水開 如果水溢位來澆滅了煤氣,有可能就要發生一場災難了。等啊等啊,外邊突然傳來了驚奇的叫聲 怎...

鍊錶 自己動手寫了一下C 的

鍊錶是一種資料結構,是一種功能極其強大的陣列。鍊錶可以很輕鬆的進行增添,刪除,插入節點。目錄鍊錶 單向鍊錶 1.建立鍊錶 1.1建立節點 1.2初始化 2.鍊錶長度 3.鍊錶列印 4.查詢節點 5.刪除節點 6.增加節點 7.修改節點 完整 初學者一般先從單向鍊錶開始,單向鍊錶的操作一般包括 建立,...

(2)鞏固一下C語言基礎知識,誰動手,誰收穫。

問題7 編寫乙個程式,讓它有以下功能 從鍵盤上輸入乙個五位數,對此整數中的五個數值進行從大到小排序,形成乙個新的五位數,輸出這個整數。15分 問題8 輸入年 月 日,輸出該日期是該年的第幾天。25分 問題9 利用陣列實現資料的儲存。將學生的學號和成績儲存在陣列中,利用迴圈計算出陣列中儲存學生的平均成...