中断机制是怎样的?
硬件在需要的时候,主动发送一个电信号,通知内核。
如何区分不同设备的中断?
不同设备的中断不同,每个中断都具有唯一的数字标识(特定的中断总是与特定的设备相关联),从而操作系统能够区分中断并知道是哪个硬件设备产生的中断。
中断和异常有什么异同?
- 相同点,内核对它们的处理方式
- 不同点,中断由硬件产生,异常由软件产生
什么是中断处理程序(中断服务程序)?
产生中断的设备都有一个响应的中断处理程序,由内核在响应中断的时候执行。
什么是设备驱动程序?
设备驱动程序是对设备进行管理的内核代码,设备的中断处理程序是其中的一部分。
中断处理程序与其他内核函数有什么区别?
中断处理程序由内核调用来响应中断,运行于不可被阻塞的中断上下文或原子上下文。
为什么中断要划分为上半部和下半部?
为实现中断处理程序又快又多的目的
中断上半部完成什么工作?
上半部接收到一个中断就立即执行,在中断禁止的情况下完成有严格时限的工作,如答复接收的中断或复位硬件。
中断下半部完成什么工作?
允许稍后完成没有严格时限的工作,在适当的时机打开中断。
中断上下文和进程上下文有什么区别?
- 当执行一个中断处理程序时,内核处于中断上下文;
- 在中断上下文不能睡眠故不可调用睡眠函数;
- 当内核代表进程执行系统调用或运行内核线程时,内核处于进程上下文;
- 在进程上下文可以睡眠并随意调用程序。
禁止中断和使用锁有什么不同?
- 禁止中断能够防止来自其他中断处理程序的并发访问抢占当前代码和当前处理器
- 使用锁能够防止来自其他处理器对共享数据的并发访问
中断处理程序有哪些局限?
- 只能完成中断处理流程的上半部
- 以异步方式执行可能打断其他重要的代码并可能对硬件进行操作,因此要尽快执行完
- 不在进程上下文中执行,不能被阻塞
如何实现下半部机制?
- 任务队列---驱动程序把下半部注册到合适的任务队列形成一个链表,根据所处的位置,下半部函数会在某个时刻执行。
- 软中断---静态定义的下半部接口,有32个,即使两个接口类型相同也可以在多个处理器上同时执行。
- tasklet---动态定义的下半部实现机制,类型相同的tasklet不能同时执行,类型不同的tasklet可以在不同的处理器上同时执行
内核定时器和下半部推迟执行程序机制有什么不同?
- 内核定时器把操作推迟到某个确定的时间段后就会执行,
- 下半部把操作推迟到现在以外的任何时间执行