Linux : 中断 上下文

某个外部设备因为某些事件向CPU发了一个信号,CPU停止正在进行的工作优先处理此事件,处理完之后继续处理原来进行的工作。
CPU在执行一个程序时,对系统发生的某个事件(程序自身或外界的原因)作出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去处理相应的事件,处理完该事件后,到适当的时候返回断点,继续完成被打断的程序。

中断

CPU具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。
这种特殊的信息我们可以称其为中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息
产生中断信息的事件,即中断信息源,简称中断源

中断处理程序
用来处理中断信息的程序。一般来说,需要对不同的中断信息编写不同的处理程序
CPU收到中断信息后,应该转去执行该中断信息的处理程序。若要处理某处的程序,就要将CS:IP指向它的入口(程序第一条指令的地址)。
中断向量表
中断处理程序入口地址的列表,一个表项存放一个中断向量。中断向量就是中断处理程序的入口地址
中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序的入口。
CPU知道了中断类型码,就可以将中断类型码作为中断向量表的表项号,定位相应的表项,从而得到中断处理程序的入口地址
中断的优先级别
如果有两个或两个以上的中断源发出中断请求信号,CPU会接受优先级别高的中断源请求,然后再接受优先级别低的中断源请求

中断处理过程

1.响应中断请求
当CPU正在执行主程序时,如果接收到中断源发出的中断请求信号,
就会响应中断请求,停止主程序,开始执行中断。
2.保护断点
为了在执行完中断后能返回主程序,在执行中断时,会将主程序的下一条指令的地址(又称断电地址)
保存到RAM的堆栈中
3.寻找中断入口地址
中断入口地址存放着相应的中断子程序,不同的中断源对应着不同的中断入口地址。
用中断类型码,在中断向量表中找到中断处理程序的入口。找到这个入口地址的目的就是用它设置CS和IP,
使CPU执行中断处理程序。这个工作是由CPU的硬件自动完成的。
4.执行中断子程序
5.中断返回

中断控制器
CPU众多外部设备中的一个。不同的是,它一方面接收其它外设中断引脚的输入,另一方面,它会发出中断信号给CPU。
IRQ Interrupt Request 即中断请求。
IRQ的作用是在所用的电脑中,执行硬件中断请求的动作,如需要读取硬盘中的一段数据时,当数据读取完毕,硬盘就通过IRQ来通知系统,相应的数据已经写到指定的内存中了。

内中断:8086CPU内中断的产生
中断类型码

                                       中断类型码
1.除法错误,如执行div指令产生的除法溢出   0
2.单步执行                              1
3.执行int0指令                          4
4.执行int指令     该指令的格式为int n,指令中的n为字节型立即数,是提供给CPU的中断类型码。
CPU用中断类型码的数据来标识中断源。中断类型码为一个字节型数据,可以表示256种中断源,
中断类型码的作用就是用来定位中断处理程序。
上下文

context,一个环境,相对于进程而言,就是进程执行时的环境。具体来说是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。
当发生进程调度时,进行进程切换就是上下文切换(context switch)。
操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。
模式切换与进程切换比较起来容易且节省时间,因为模式切换最主要的任务是切换进程寄存器上下文的切换。

用户空间的应用程序,通过系统调用,进入内核空间。这时用户空间的进程要传递很多变量、参数的值给内核,内核态运行时也要保存用户进程的一些寄存器值、变量等。

进程上下文

可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。
一个进程的上下文分为三部分:用户级上下文、寄存器上下文以及系统级上下文。
用户级上下文: 正文、数据、用户堆栈以及共享存储区;
寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。

处理器总处于以下三种状态之一:
1.内核态,运行于进程上下文,内核代表进程运行于内核空间;
2.内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3.用户态,运行于用户空间。
硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。

中断上下文

也可以看作是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。
当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。
当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,
以便在再次执行该进程时,能够必得到切换时的状态执行下去。
    在linux中,当前进程上下文均保存在进程的任务数据结构中。
在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。
但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。
事件

用户对窗口上各种组件的操作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件等。
事件有系统事件和用户事件。
系统事件由系统激发,如时间每隔24小时,银行储户的存款日期增加一天。
用户事件由用户激发,如用户点击按钮,在文本框中显示特定的文本。事件驱动控件执行某项功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夏与冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值