基于SylixOS的中断浅析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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的中断浅析的主要内容,如果未能解决你的问题,请参考以下文章

SylixOS的信号屏蔽浅析

SylixOS DNS浅析

SylixOS 启动浅析

SylixOS 中断流程

SylixOS 中断流程

SylixOS线程堆栈大小浅析