系统中断软件是什么?

   更新日期:2024.05.06
中断、异常和系统调用

所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。

第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。

1.中断处理

中断处理一般分为中断响应和中断处理两个步骤。中断响应由硬件实施,中断处理主要由软件实施。

(1)中断响应

对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。发生中断时,CPU暂停执行当前的程序,而转去处理中断。这个由硬件对中断请求作出反应的过程,称为中断响应。一般说来,中断响应顺序执行下述三步动作:

◆中止当前程序的执行;

◆保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容);

◆从中断控制器取出中断向量,转到相应的处理程序。

通常CPU在执行完一条指令后,立即检查有无中断请求,如果有,则立即做出响应。

当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断”—Software Interrupts),或者来自意外事件(如访问页面不在内存)。

如果当前CPU的执行优先级低于中断的优先级,那么它就中止对当前程序下条指令的执行,接受该中断,并提升处理机的执行级别(一般与中断优先级相同),以便在CPU处理当前中断时,能屏蔽其它同级的或低级的中断,然后保存断点现场信息,通过取得的中断向量转到相应的中断处理程序的入口。

(2)中断处理

CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到相应的表项,该表项应是一个中断门。于是,CPU就根据中断门的设置而到达了该通道的总服务程序的入口。

核心对中断处理的顺序主要由以下动作完成:

◆保存正在运行进程的各寄存器的内容,把它们放入核心栈的新帧面中。

◆确定“中断源”或核查中断发生,识别中断的类型(如时钟中断或盘中断)和中断的设备号(如哪个磁盘引起的中断)。系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。中断向量因机器而异,但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。

◆核心调用中断处理程序,对中断进行处理。

◆中断处理完成并返回。中断处理程序执行完以后,核心便执行与机器相关的特定指令序列,恢复中断时寄存器内容和执行核心栈退栈,进程回到用户态。如果设置了重调度标志,则在本进程返回到用户态时做进程调度。

2.系统调用

在Unix/Linux系统中,系统调用像普通C函数调用那样出现在C程序中。但是一般的函数调用序列并不能把进程的状态从用户态变为核心态,而系统调用却可以做到。

C语言编译程序利用一个预先确定的函数库(一般称为C库),其中有各系统调用的名字。C库中的函数都专门使用一条指令,把进程的运行状态改为核心态。Linux的系统调用是通过中断指令“INT 0x80”实现的。

每个系统调用都有惟一的号码,称作系统调用号。所有的系统调用都集中在系统调用入口表中统一管理。

系统调用入口表是一个函数指针数组,以系统调用号为下标在该数组中找到相应的函数指针,进而就能确定用户使用的是哪一个系统调用。不同系统中系统调用的个数是不同的,目前Linux系统中共定义了221个系统调用。

另外,系统调用表中还留有一些余项,可供用户自行添加。

当CPU执行到中断指令“INT 0x80”时,硬件就做出一系列响应,其动作与上述的中断响应相同。CPU穿过陷阱门,从用户空间进入系统空间。相应地,进程的上下文从用户堆栈切换到系统堆栈。

接着运行内核函数system_call()。首先,进一步保存各寄存器的内容;接着调用syscall_trace( ),以系统调用号为下标检索系统调用入口表sys_call_table,从中找到相应的函数;然后转去执行该函数,完成具体的服务。

执行完服务程序,核心检查是否发生错误,并作相应处理。如果本进程收到信号,则对信号作相应处理。最后进程从系统空间返回到用户空间。

上面两讲简要介绍了Linux内核的主要数据结构和相应的算法。Linux内核包含了丰富的内容,这里仅是其中的一点点,以求起到“抛砖引玉”的作用。

信号的中断与系统调用的重起

#include <signal.h>int sigaction(ints signo, const struct sigaction *act, struct sigaction *oact) ;struct sigaction { void (*sa_handler)(); /* addr of signal handler, or SIG_IGN, or SIG_DFL */ sigset_t sa_mask; /* additional signals to block */ int sa_flags; /* signal options*/} ; 当更改信号动作时,如果sa _handler指向一个信号捕捉函数(不是常数SIG_IGN或SIG_DFL),则sa_mask字段说明了一个信号集,在调用信号捕捉函数之前,该信号集要加到进程的信号屏蔽字中。仅当从信号捕捉函数返回时再将进程的信号屏蔽字恢复为原先值。这样,在调用信号处理程序时就能阻塞某些信号。在信号处理程序被调用时,系统建立的新信号屏蔽字会自动包括正被递送的信号。因此保证了在处理一个给定的信号时,如果这种信号再次发生,那么它会被阻塞到对前一个信号的处理结束为止。A. 可自动重起的signal()的实现:#include <signal.h>#typpdef void Sigfunc(int signo); Sigfunc *signal(int signo, Sigfunc *func){ struct sigaction act, oact; act.sa_handler = func; sigemptyset(act.sa_mask); act.sa_flags = 0; if (signo == SIGALRM) {#ifdef SA_INTTERRUPT //SUNOS act.flags |= SA_INTTERRUPT;#endif } else // for other signal {#ifdef SA_RESTART //SVR, 4.3+BSD act.flag |= SA_RESTART; #endif } if (sigaction(signo, &act, &oac) < 0) return (SIG_ERR); return (oact.sa_handler);}注: 在if语句中,我们检查是否为SIGALRM信号,如果是,且系统定义了 SA_INTERRUPT(SUNOS),即为SUNOS,该系统默认的系统调用是自 动重起的,我们阻止该信号中断的系统调用重起,因为我们要用该信号 中断I/O操作,实现定时的功能. 接着的else语句中的信号为SIGALRM之外的其他信号,且系统定义了 SA_RESTART,即为SVR4或4.3+BSD类系统,该类系统中默认的系统 调用是不可重起的,所以应该加上SA_RESTART标志,使由这些信号中 断的系统调用自动重起.B. 不可重起的signal_intr()实现: Sigfunc *signal_intr(int signo, Sigfunc *func)
{
struct sigaction act, oact;

act.sa_handler = func;
sigemptyset(act.sa_mask);
act.sa_flags = 0;

#ifdef SA_INTTERRUPT //SUNOS
act.flags |= SA_INTTERRUPT;
#endif
if (sigaction(signo, &act, &oac) < 0)
return (SIG_ERR);

return (oact.sa_handler);
}
注: 只有SUNOS为自动重起的,其他为不自动重起的,所以只要将SUNOS标 志为非自动重起即可.如上.

有系统中断和系统软件没有系统中断软件

系统中断处理程序

  • 17834492699 :操作系统中中断是什么意思
    滑龙侄5080 :答:中断是操作系统最基本的机制之一,能够使操作系统在运行过程中随时响应硬件设备或其他程序请求,保证了系统的可靠性和稳定性。中断有硬件中断和软件中断两种类型。硬件中断是由计算机的硬件设备(如键盘、鼠标、打印机等)引起的,...
  • 17834492699 :我用的QQ音乐听歌,经常会被系统中断,是怎么回事呢?vivox7plus刚买没几...
    滑龙侄5080 :答:可查看以下排查方法:1、更换网络或进入设置--应用与权限/更多设置--应用管理—点击右上角 --显示系统进程--QQ音乐--存储,进入清除下数据,然后使用看看;2、检测手机系统版本以及软件 版本是否为最新的,若可检测到新的...
  • 17834492699 :win7的资源监视器系统中断 是什么?
    滑龙侄5080 :答:ext_temp_1\AutoPlay\Scripts\hosts.exe 扫描结果 === 建议修复项扫描结果 --- 驱动开发调试开关被打开系统关键位置已修复
  • 17834492699 :win10系统空闲的时候系统中断占40%cpu,风扇狂转温度高,怎么办?
    滑龙侄5080 :答:win7之后的所有系统,都有一个叫“系统中断”的进程,长期占用cpu,最高的时候甚至疯狂到40%左右,不管使用什么软件,都会导致系统卡顿。对这个问题,我也是深受其害,一直在摸索解决办法,网上的答案一般有几种1、intel核心...
  • 17834492699 :电脑系统中断怎么处理
    滑龙侄5080 :答:当拆除到解决好系统终端的时候,便能够查出相关的问题。通常这样的一步计划和在实施的过程中需要耗费的时间比较长。假如你已经排除了是硬件问题导致的系统中断,则意味着你需要去检查一下你软件是否有相悖论的相关设置。例如...
  • 17834492699 :win10系统显示系统中断怎么办
    滑龙侄5080 :答:下面我们就一起来看看win10电脑系统中断解决方法。win10电脑系统中断的解决方法:1、右键点击【任务栏】,选择【任务管理器】。2、在弹出的对话框里面,点击左下方的【详细信息】。3、找到中断的软件进程,右键点击选择【结束...
  • 17834492699 :简述中断处理的过程。指出其中哪些工作是由硬件完成的,哪些是由软件实...
    滑龙侄5080 :答:CPU中断处理过程为首先,将断点处的PC值(即下一条应执行指令的地址)推入堆栈保留下来,这称为保护断点,由硬件自动执行。然后,将有关的寄存器内容和标志位状态推入堆栈保留下来,这称为保护现场,由软件执行完成。保护断点...
  • 17834492699 :win10任务管理器经常显示系统中断
    滑龙侄5080 :答:win10任务管理器经常显示系统中断。1.右键点击【任务栏】,选择【任务管理器】。2.在弹出的对话框里面,点击左下方的【详细信息】。3.找到中断的软件进程,右键点击选择【结束任务】。4.再就是可以切换到【详细进程】,查看...
  • 17834492699 :BIOS系统中的powerbeep表示什么?
    滑龙侄5080 :答:BIOS系统中的powerbeep表示电源蜂鸣。不需要去修改,以免在计算机出现故障时影响异常报警,导致故障扩大。BIOS的主要功能是为计算机提供最基本、最直接的硬件设置和控制。此外,BIOS还为操作系统提供一些系统参数。系统硬件的变化被...
  • 17834492699 :什么是中断系统调用
    滑龙侄5080 :答:当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断”—Software Interrupts),或者来自意外事件(如访问页面不在内存)。如果当前CPU的执行优先级低于中断的优先级,那么它就中止对...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网