任务2优先级高于任务1。
- t0 — 任务1处于运行状态,任务2处于睡眠状态,等待被中断唤醒。
- t1 — 任务1请求系统服务完成某些操作,此时开始,系统进入内核空间运行。
- t2 — 产生一个中断信号,并且此中断的中断服务程序唤醒任务2。但是由于系统在内核空间所进行的某些操作不可以被中断,CPU 的处理中断被禁止,中断没有立即响应(中断延迟是由于内核在进入临界区之前关闭CPU的中断响应所引起的)。CPU 将继续在内核空间执行任务1的系统服务。
- t3 — 内核代码使能中断响应,Linux 内核退出临界区,CPU 开始响应 t2 时刻产生的中断信号。
- t4 — 中断服务程序开始执行。当中断服务程序执行完后,中断服务程序唤醒了任务2。
- t5 — 返回被中断的代码,由于此时系统运行在内核态执行任务1的系统服务请求,任务2无法抢占任务1的控制权,所以执行任务1的系统服务请求。
- t6 — 中断返回结束。
- t7 — 由于任务1的系统调用完成返回或者执行系统服务的过程中主动请求任务调度,系统开始进行任务调度。
- t8 — 运行任务2。
任务响应延迟时间,以下各值的累加:
- 中断延迟时间【包括硬件延迟和软件延迟,一般研究涉及到如何最大限度地减少软件所造成的延迟时间】。从中断产生到CPU开始响应的时间段。中断延迟是由于内核在进入临界区之前关闭CPU的中断响应所引起的,此时间段内,虽然外部设备使CPU的中断请求有效,但CPU并不立刻响应中断,而是继续执行临界区的内核代码,直至退出临界区使能中断请求,才开始进行中断响应。
- 中断分派阶段【对于具体的平台时间确定】。CPU开始响应中断,到开始执行中断服务程序之间的时间段。查找中断号、保存寄存器、定位中断服务程序等。
- 中断服务阶段【时间段的长度可控】。系统开始执行中断服务程序到中断服务程序执行完地时间段。
- 中断返回阶段【对于具体的平台时间确定】。主要操作是恢复寄存器的值。
- 调度延迟。需要进行进程调度到实际开始进行调度的时间段。
- 进程调度时间【延迟时间可以设计】。系统开始进行调度到最高优先级的进程开始被调度运行的时间段。根据资源的利用情况、进程的优先级、进程的运行情况、选择合适的进程进行调度。
|