i_sched 内核服务

用途

调度非级别处理。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/intr.h>

void i_sched ( handler)
struct intr *handler;

参数

表 1. 参数
描述
处理程序 (handler) 指定固定中断处理程序结构的地址。

描述

i_sched 服务允许设备驱动程序将其部分工作安排在较低的中断优先级下处理。 此功能允许中断处理程序尽可能快地运行,避免中断处理延迟和过速情况。 有关中断处理程序的简要说明,请参阅 i_init 内核服务。

在以下情况下,可以安排在非级别进行处理:

  • 设备驱动程序的中断处理程序例程必须执行耗时的处理。
  • 这项工作不需要立即进行。
注意:从调用 i_sched 服务到内核调用关机例程期间,调用者不能更改 intr 结构中的任何字段。 结构也必须保持固定。 否则,系统可能会崩溃。

处理程序 参数指向的中断处理程序结构描述了一个非级别中断处理程序。 i_sched 服务的调用者必须设置 intr 结构中的所有字段。 INIT_OFFLn 文件中的 /usr/include/sys/intr.h 宏可用于初始化 处理程序参数。 N 值表示运行非级别处理程序时应该使用的优先级类。 当前,定义 3 0 到 3 个类。

使用 i_sched 服务有两个额外限制:

首先,i_sched 服务不会重新注册已注册用于离层处理的 intr 结构。 由于 i_sched 没有返回值,因此如果指定结构已注册但尚未执行,服务将直接正常返回,而不会注册该结构。 在调用该结构中指定的越级处理程序之前,内核会立即从注册列表中删除 intr 结构。 因此,越级处理程序可以再次使用该结构注册另一个越级请求。

当从第二级中断处理程序 (SLIH) 调度非级别请求时,必须小心。 如果越级请求已经注册但尚未执行,则第二次注册将被忽略。 如果关机处理程序正在执行或已经运行,则会注册一个新请求。 此服务的用户应该了解这些计时注意事项和相应的程序。

其次,内核会使用指定的 flags 结构中的 intr 字段来判断该结构是否已经注册。 该字段应在首次调用 i_sched 服务前初始化一次,并在以后调用 i_sched 服务时保持不变。

注: 非级别中断处理程序路径长度不应超过 5,000 条指令。 如果超出此数量,那么会对实时支持产生负面影响。

执行环境

i_sched 内核服务可从 processinterrupt 环境中调用。

返回值

i_sched 服务没有返回值。