繁体   English   中英

xnu内核中有工作队列功能吗?

[英]is there a workqueue feature in xnu kernel?

我需要在Mac OSX(内核模式驱动程序)上使用类似于工作队列的功能,并且正在寻找一种将工作添加到队列中以供稍后由内核线程处理的方法。 从概念上讲,这与Linux内核中可用的工作队列功能相同。 XNU内核上也有类似的东西吗?

尽管我承认我对Linux方面并不十分熟悉,但我不认为有这样的直接对等物,因此我将避免进行比较,而只是告诉您macOS / xnu上的可用功能。

I / O套件IOWorkLoops

如果要构建I / O Kit驱动程序,尤其是在编写辅助中断处理程序时,将使用IOWorkLoops 中断由IOEventSource对象抽象,该对象计划辅助中断处理程序在驱动程序的IOWorkLoop上运行

每个IOWorkLoop包装一个内核线程,并为与该线程共享的资源提供序列化/锁定机制。 通过IOCommandGate或直接通过工作循环对象显式提交到工作循环的所有作业,或由于IOEventSource事件而提交给工作循环的所有作业,都将被序列化。 请注意, IOCommandGate作业将在调用线程而非工作循环线程上同步运行。

与macOS / OSX内部一样,您将需要查看头文件注释以及xnu源中的实现以获取详细信息。 我个人发现IOWorkLoop对于某些任务而言有些笨拙,但是如果您要处理PCI设备等,则实际上别无选择。

thread_call

一个更轻量的后台工作机制是thread_call API 它在<kern/thread_call.h>定义,并支持在OS管理的后台线程上运行功能,可以选择在延迟或具有特定优先级之后运行。 这可能更接近您从Linux所了解的知识,具有相当简单的API,但不适用于辅助中断处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM