当前位置: 首页 > 面试题库 >

何时在Linux内核中使用内核线程vs工作队列

巫马阳飙
2023-03-14
问题内容

在Linux内核中有许多安排工作的方法:计时器,tasklet,工作队列和内核线程。什么时候使用一个对另一个的准则是什么?

有明显的因素:计时器功能和小任务无法进入睡眠状态,因此它们无法等待互斥量,条件变量等。

在驱动程序中为我们选择哪种机制的其他因素是什么?

首选的机制是什么?


问题答案:

如您所说,这取决于手头的任务:

工作队列将工作推迟到内核线程中-您的工作将始终在流程上下文中运行。他们是可安排的,因此可以入睡。

通常,在工作队列或sotftirqs /
tasklet之间没有争论。如果延迟的工作需要睡眠,则使用工作队列,否则使用softirqs或tasklet。Tasklet也更适合于中断处理(它们得到了一定的保证,例如:Tasklet永远不会在下一个滴答中运行,它总是相对于其自身进行序列化等)。

当您确切地知道何时要发生某件事,并且不想在此期间中断/阻止进程时,内核计时器将非常有用。它们在流程上下文之外运行,并且相对于其他代码而言也是异步的,因此,如果您不小心,它们将成为争用条件的来源。

希望这可以帮助。



 类似资料:
  • 问题内容: 该功能在内部如何工作?考虑到内核确实具有访问用户内存空间的特权,它是否使用任何缓冲区还是完成了任何内存映射? 问题答案: 的实现高度依赖于体系结构。 在x86和x86-64上,它只是直接从用户空间地址进行读取并写入内核空间地址,同时如果已配置,则暂时禁用SMAP(超级用户模式访问阻止)。它的棘手部分是将代码放置在特殊区域中,以便页面错误处理程序可以识别其中何时发生错误。发生的内存保护错

  • 问题内容: 我正在阅读Robert Love的“ Linux内核开发”,并且遇到了以下段落: 无需(轻松)使用浮点数 当用户空间进程使用浮点指令时,内核将管理从整数到浮点模式的转换。内核使用浮点指令时必须执行的操作因体系结构而异,但是内核通常会捕获陷阱,然后启动从整数模式到浮点模式的转换。 与用户空间不同,内核不具有对浮点​​的无缝支持的奢侈,因为它无法轻易地陷入陷阱。在内核内部使用浮点数需要手动

  • 主要内容:initramfe虚拟文件系统GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管 Linux 的启动过程了。 内核完成再次系统自检之后,开始采用动态的方式加载每个硬件的模块,这个动态模块大家可以想象成硬件的驱动(默认 Linux 硬件的驱动是不需要手工安装的,如果是重要的功能,则会直接编译到内核当中;如果是非重要的功能,比如硬件驱动会编译为模块

  • 简介 如你所知,我从去年开始写了一系列关于 x86_64 架构汇编语言程序设计的博文。除了大学期间写过一些 Hello World 这样无实用价值的程序之外,我从来没写过哪怕一行的底层代码。那些程序也是很久以前的事情了,就像我刚才说的,我几乎完全没有写过底层代码。直到不久前,我才开始对这些事情感兴趣,因为我意识到我虽然可以写出程序,但是我却不知道我的程序是怎样被组织运行的。 在写了一些汇编代码之后

  • 本章描述内核中使用到的各种各样的概念。 每个 CPU 的变量 CPU 掩码 initcall 机制 Linux 内核的通知链

  • 一系列关于 Linux 内核和其内在机理的帖子,目的很简单 - 分享我对 Linux 内核内在机理的一点知识,帮助对 Linux 内核内在机理感兴趣的人,和其他低级话题。