计时器服务数据结构
trb (计时器请求) 结构位于 /sys/timer.h 文件中。 itimerstruc_t 结构包含时间操作的第二个/纳秒结构,可在 sys/time.h 文件中找到。
特尔布 结构中包含多个字段。 某些字段用于 AIX® 内核处理。 其他服务面向计时器服务用户。 在调用 塔洛克 服务之后,以及在调用 开始 服务之前,计时器服务用户必须在计时器请求块中设置以下字段。
该t->func, t->t_union,t->ipri和t->id字段在从 开始 到完成处理程序的调用之间持久存在。 只有t->timeout和t->flags在后续调用 开始 服务之前,必须重置字段。
| 字段 | 描述 |
|---|---|
| t->flags | 指定标志。 您必须在此字段中设置 时间间隔 (_INCINTERVAL) 标志或 绝对 标志。 如果需要,您还可以设置 _LOWRES 标志。 T_LOWRES 标志使系统将 t->timeout 值舍入到下一个计时器超时。 使用 T_LOWRES 标志的优点是防止生成额外的计时器中断。 超时值将舍入为更大的值。 T_LOWRES 标志从不导致将超过 10 毫秒的时间添加到超时值,因为系统会以 10 毫秒的时间间隔来维护计时器。您可以设置 _MOVE_OK 或 T_LATE_OK 标志以允许系统使用计时器来执行优化。 如果设置了 _MOVE_OK 标志,那么系统可能会将计时器从其最初启动的位置移动到其他处理器。 当您不依赖于计时器到期的处理器时,应设置 _MOVE_OK 标志。 如果设置了 T_LATE_OK 标志,那么当拥有的处理器处于休眠状态时,计时器到期时间可能会延迟。 如果 _MOVE_OK 标志不适用,并且您可以容忍任意延迟到期,那么应设置 T_LATE_OK 标志。 如果同时设置了这两个标志,那么 _MOVE_OK 标志将优先于 T_LATE_OK 标志。 在设置 _MOVE_OK 或 T_LATE_OK 标志后,这两个标志将持久存在,直到所有者显式清除为止。 这两个标志都是可选的,用于帮助内部系统优化。 |
| t->timeout | 指定超时值。 此字段用于时间间隔计时器和绝对计时器,如 t->flags 字段所指示。 |
| t->func | 指定 completion-handler 函数指针。 只要可能调用此函数,此函数就必须保留在固定内存中。 使用 停止 服务来取消任何在卸载包含该函数的内核扩展之前可以调用完成处理程序的暂挂计时器请求块。 |
| t->ipri | 指定调用完成处理程序时使用的中断优先级。 在中断环境中调用完成处理程序。 中断优先级值在 /usr/include/sys/intr.h 文件中定义。 计时器完成处理程序的最不优先中断优先级是 INTTIMER。 最受青睐的中断优先级是 INTMAX。 有关中断优先级的更多信息,请参阅 AIX® Version 6.1 Kernel Extensions and Device Support Programming Concepts中的 Understanding Interrupts 。 |
| t->t_union | (可选) 将数据传递到完成处理程序。 |
| t->id | (可选) 指定用于调度计时器请求块的进程的标识。 设备驱动程序可将该字段设置为-1。 |
特尔布 结构中的其他字段不需要在 塔洛克 服务和 开始 服务之间进行初始化。
itimerstruc_t t.it 值子结构用于存储绝对计时器和增量计时器的时间信息。 T_ABSOLUTE 绝对请求标志在 sys/timer.h 文件中定义。