什么是内核线程?[英] What is a Kernel thread?

本文是小编为大家收集整理的关于什么是内核线程?的处理方法,想解了什么是内核线程?的问题怎么解决?什么是内核线程?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我刚刚开始编码设备驱动程序并新增线程,通过许多文档来了解线程的想法.我仍然有一些疑问.

  1. 什么是内核线程?.
  2. 它与用户线程的不同?
  3. 两个线程之间的关系是什么?.
  4. 如何实现内核线程?.
  5. 在哪里可以看到实施的输出?.

任何人都可以帮助我吗?. 谢谢.

推荐答案

内核线程是仅在内核模式下运行的内核任务;它通常尚未由fork()或clone()系统调用创建.一个例子是kworker或kswapd.

如果您不知道它们是什么,您可能不应该实现内核线程.

谷歌为内核线程提供了许多页面,例如, frey's page .

其他推荐答案

  1. 内核线程是一个task_struct,没有用户空间组件.
  2. 除了缺乏用户空间外,它具有不同的祖先(kthreadd内核线程而不是init进程),并且由仅核心的API而不是来自fork/exec系统调用的序列创建.
  3. 两个内核线程具有kthreadd作为父级.除此之外,内核线程与另一个人的"独立"一个相同的"独立"作为用户空间进程.
  4. 使用 kthread中的kthread_run函数/宏.h header 您将最可能编写内核模块才能调用此函数,因此您应该查看 Linux设备驱动程序
  5. 如果您指的是实现的文本输出(通过printk调用),则可以使用dmesg命令在内核日志中看到此输出.

其他推荐答案

用户线程和堆栈:

每个线程都有自己的堆栈,以便它可以使用它自己的本地变量,线程的共享全局变量,这些变量是Linux可执行文件的.bss部分的一部分. 由于线程共享全局变量,因此当我们希望在多线程应用程序中访问/修改全局变量时,我们使用像互斥锁等同步机制.局部变量是线程单个堆栈的一部分,因此无需任何同步.

内核线程 内核线程已从进程上下文中运行内核代码的需要.内核线程是工作用机制的基础.基本上,线程内核是仅在内核模式下运行的线程,并且没有用户地址空间或其他用户属性.

要创建一个线程内核,请使用kthread_create():

#include <linux/kthread.h>

structure task_struct *kthread_create(int (*threadfn)(void *data),
                                      void *data, const char namefmt[], ...);

内核线程和堆栈: 内核线程用于处理核心后的处理任务,如PDF冲洗线程,WorkQ线程等. 内核线程仅基本上是新的进程,只有没有地址空间(可以使用克隆()使用所需标志的呼叫创建),意味着它们无法切换到用户空间.内核线程是可调度和抢先的作为正常过程.

内核线程有自己的堆栈,它们用于管理本地信息.

更多关于内核堆栈的信息: - https://www.kernel.org/doc/documentation/x86/kernel-堆栈

本文地址:https://www.itbaoku.cn/post/359010.html