目 录
2.3.2 ss查看系统中所有线程与中断系统堆栈使用情况... 3
1. 中断
1.1 中断的定义
中断是指处理机处理程序运行中出现的紧急事件的整个过程。程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断,当处理机接受中断时,只需暂停一个或几个周期而不执行处理程序的中断,称为简单中断。
1.2 中断的分类
简单来说中断就是发生了某种事件需要通知CPU进行处理,如果把中断事件按照来源分类,来自CPU外部的中断就称为外部中断,来自CPU内部的中断称为内部中断。再进行细分,外部中断按是否导致宕机来划分,可分为可屏蔽中断和不可屏蔽中断,而内部中断按中断正常与否来划分则可分为软中断和异常。
1.2.1 外部中断
外部中断是指来自CPU外部的中断,而外部的中断源必须是某个硬件,所以这种类型的中断又可以被叫做硬件中断,对于这种情况CPU提供统一的接口作为中断信号的公共线路,所有来自外设的中断信号都共享公共线路连接到CPU。而CPU则为用户提供了两条信号线INTR(INTeRrupt)和NMI(Non Maskble Interrupt)。
可屏蔽中断作为外部中断的一种,其本质上是指该外部设备发出的中断,CPU可以选择不处理,因为该种中断不会导致系统宕机,所以可以通过EFlags寄存器的IF位将这些中断屏蔽,可屏蔽中断时通过INTR引脚进入CPU的。像外部设备如网卡,硬盘等发出的中断都是可屏蔽中断。
不可屏蔽中断则是通过NMI引脚进入CPU的,它表示系统中发生了致命的错误,它等同于宣布:计算机宕机了。比如常见的内存读写错误,更直接的如掉电等,这样的问题一旦出现,CPU是无法当做没有发生而继续执行其他任务的,所以EFlags寄存器中的IF位对齐也对这种情况无效。
1.2.2 内部中断
内部中断表示CPU内部产生的中断,可以划分为软中断和异常。
软中断就是由软件主动发起的中断,由于这种类型的中断是由软件主动发起的,所以它是主观产生的中断,一般来说并不是客观上某种内部的错误。同时部分具备异常的“错误”结果的软中断也可以被看作是异常。
异常是另一种内部中断,是指指令执行期间CPU内部产生的错误引起的,所以它不受标志寄存器EFlags中IF位的影响。同时异常也可以按照其轻重程度分为以下三种:
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。
备注:
本虚拟机只有1个CPU。
样例:
图 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应用开发手册》