1. 程式人生 > >基於SylixOS的中斷淺析

基於SylixOS的中斷淺析

中斷 sylixos

1.中斷... 1

1.1 中斷的定義... 1

1.2 中斷的分類... 1

1.2.1 外部中斷... 1

1.2.2 內部中斷... 1

2. SylixOS下的中斷淺析... 2

2.1 SylixOS信號系統... 2

2.2 SylixOS時間管理... 2

2.3 SylixOS中斷相關的shell指令... 2

2.3.1

ints查看系統中斷向量表信息... 2

2.3.2 ss查看系統中所有線程與中斷系統堆棧使用情況... 3

3. 參考資料... 4



1. 中斷

1.1 中斷的定義

中斷是指處理機處理程序運行中出現的緊急事件的整個過程。程序運行過程中,系統外部、系統內部或者現行程序本身若出現緊急事件,處理機立即中止現行程序的運行,自動轉入相應的處理程序(中斷服務程序),待處理完後,再返回原來的程序運行,這整個過程稱為程序中斷,當處理機接受中斷時,只需暫停一個或幾個周期而不執行處理程序的中斷,稱為簡單中斷。

1.2 中斷的分類

簡單來說中斷就是發生了某種事件需要通知CPU進行處理,如果把中斷事件按照來源分類,來自CPU外部的中斷就稱為外部中斷,來自CPU內部的中斷稱為內部中斷。再進行細分,外部中斷按是否導致宕機來劃分,可分為可屏蔽中斷和不可屏蔽中斷,而內部中斷按中斷正常與否來劃分則可分為軟中斷和異常。

1.2.1 外部中斷

外部中斷是指來自CPU外部的中斷,而外部的中斷源必須是某個硬件,所以這種類型的中斷又可以被叫做硬件中斷,對於這種情況CPU提供統一的接口作為中斷信號的公共線路,所有來自外設的中斷信號都共享公共線路連接到CPU。而CPU則為用戶提供了兩條信號線

INTR(INTeRrupt)NMINon Maskble Interrupt)。

可屏蔽中斷作為外部中斷的一種,其本質上是指該外部設備發出的中斷,CPU可以選擇不處理,因為該種中斷不會導致系統宕機,所以可以通過EFlags寄存器的IF位將這些中斷屏蔽,可屏蔽中斷時通過INTR引腳進入CPU的。像外部設備如網卡,硬盤等發出的中斷都是可屏蔽中斷。

不可屏蔽中斷則是通過NMI引腳進入CPU的,它表示系統中發生了致命的錯誤,它等同於宣布:計算機宕機了。比如常見的內存讀寫錯誤,更直接的如掉電等,這樣的問題一旦出現,CPU是無法當做沒有發生而繼續執行其他任務的,所以EFlags寄存器中的IF位對齊也對這種情況無效。

1.2.2 內部中斷

內部中斷表示CPU內部產生的中斷,可以劃分為軟中斷和異常。

軟中斷就是由軟件主動發起的中斷,由於這種類型的中斷是由軟件主動發起的,所以它是主觀產生的中斷,一般來說並不是客觀上某種內部的錯誤。同時部分具備異常的“錯誤”結果的軟中斷也可以被看作是異常。

異常是另一種內部中斷,是指指令執行期間CPU內部產生的錯誤引起的,所以它不受標誌寄存器EFlagsIF位的影響。同時異常也可以按照其輕重程度分為以下三種:

1.Fault,即故障,這種錯誤是可以被修復的,屬於最輕的一種異常,通常CPU將問題修復後會將機器狀態恢復到異常之前的狀態。

2.Trap,即陷阱,異常發生時為了讓中斷處理程序返回後能夠繼續向下執行,CPU將中斷處理程序的返回地址指向導致異常指令的下一個指令。

3.Abort,即終止,這種情況是最為嚴重的異常類型,一旦出現,由於錯誤的嚴重性無法及時修復,程序將無法繼續運行,操作系統為了自身的安全性只能將此程序從進程表中去掉,一般導致此異常的錯誤通常是硬件錯誤,或者某些系統數據結構出錯。

2. SylixOS下的中斷淺析

2.1 SylixOS信號系統

信號是軟件層次上模擬的中斷,很多比較重要的應用程序都需要處理信號,信號提供了一種處理異步事件的方法,例如,中斷用戶鍵入中斷鍵,會通過信號機制停止一個程序,信號處理流程如 21


21信號處理流程

每個信號都有自己的名字,信號的名字都以“SIG”開頭。目前SylixOS可以支持63種不同的信號,其中包括標準信號和實時信號。

2.2 SylixOS時間管理

SylixOS要求提供定時中斷,以實現延時與超時控制等功能,定時中斷也叫時鐘節拍,以下函數由TICK中斷調用:

API_KernelTicks: SylixOS 普通定時器周期中斷;

API_TimerHTicks: SylixOS 高速定時器周期中斷。

2.3 SylixOS中斷相關的shell指令

2.3.1 ints查看系統中斷向量表信息

格式:

ints

ints cupidstart

ints cupidstart cupidend

說明:

該命令用於顯示所有CPU的中斷向量表信息 ints cupidstart顯示CPU ID大於等於cupidstart上的中斷向量表信息。ints cupidstart cupidend則顯示CPU ID大於等於cupidstart且小於等於cpuidend上的中斷向量表信息。

返回值:

執行返回0

備註:

本虛擬機只有1CPU

樣例:

技術分享

2-2指令ints樣例

配置:

該命令屬於系統提供的tshell命令,當LW_CFG_SHELL_EN>0時,會允許操作系統提供tshell命令,則包含該命令。

函數接口:

ints命令是通過C語言函數實現的,函數原型是:

static INT __tshellSysCmdInts(INT iArgC, PCHAR ppcArgV[]);

2.3.2 ss查看系統中所有線程與中斷系統堆棧使用情況

格式:

ss

說明:

該命令用來查看線程和中斷堆棧的使用情況。

返回值:

執行返回0

備註:

無。

樣例:

技術分享

23指令ss樣例

配置:

該命令屬於系統提供的tshell命令,當LW_CFG_SHELL_EN>0時,會允許操作系統提供tshell命令,則包含該命令。

函數接口:

ss命令是通過c語言函數實現的,函數原型是:

static INT __tshellSysCmdSs (INTiArgC, PCHAR ppcArgV[]);

3. 參考資料

《操作系統真相還原》

SylixOS應用開發手冊》


基於SylixOS的中斷淺析