i_sched 内核服务
用途
调度非级别处理。
语法
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/intr.h> void i_sched ( handler)
struct intr *handler;
struct intr *handler;
参数
| 项 | 描述 |
|---|---|
| 处理程序 (handler) | 指定固定中断处理程序结构的地址。 |
描述
i_sched服务允许设备驱动程序将其部分工作安排在较低的中断优先级下处理。 此功能允许中断处理程序尽可能快地运行,避免中断处理延迟和过速情况。 有关中断处理程序的简要说明,请参阅i_init内核服务。
在以下情况下,可以安排在非级别进行处理:
- 设备驱动程序的中断处理程序例程必须执行耗时的处理。
- 这项工作不需要立即进行。
请注意: The caller cannot alter any fields in the 闯入 structure from the time the i_sched service is called until the kernel calls the off-level routine. 结构也必须保持固定。 否则,系统可能会崩溃。
处理程序 参数指向的中断处理程序结构描述了一个非级别中断处理程序。 i_sched服务的调用者必须设置 intr结构中的所有字段。 The INIT_OFFLn macros in the /usr/include/sys/intr.h file can be used to initialize the 商人 parameter. N 值表示运行非级别处理程序时应该使用的优先级类。 当前,定义 3 0 到 3 个类。
使用i_sched服务有两个额外限制:
首先,i_sched服务不会重新注册已注册用于关机处理的intr结构。 由于i_sched没有返回值,因此如果指定的结构体已经注册但尚未执行,服务将直接正常返回,而不会注册该结构体。 在调用该结构中指定的越级处理程序之前,内核会立即从注册列表中删除intr结构。 因此,越级处理程序可以再次使用该结构注册另一个越级请求。
当从第二级中断处理程序 (SLIH) 调度非级别请求时,必须小心。 如果越级请求已经注册但尚未执行,则第二次注册将被忽略。 如果关机处理程序正在执行或已经运行,则会注册一个新请求。 此服务的用户应该了解这些计时注意事项和相应的程序。
其次,内核使用flags闯入,以确定该结构是否已被注册。 该字段应在首次调用i_sched服务前初始化一次,并在以后调用i_sched服务时保持不变。
注: 非级别中断处理程序路径长度不应超过 5,000 条指令。 如果超出此数量,那么会对实时支持产生负面影响。
执行环境
返回值
i_sched服务没有返回值。