linux 内核分析-- kthread

【 Git学习记录(三)】推荐四款主流的Git代码托管平台 —— GitHub、GitLab、Gitee、Coding 了解过Git之后,作为一个程序猿最基本的,你还需要了解目前主流的在线代码托管平台,并至少选择其中一款在平时开发中使用。这里特别介绍以下四款: 国外平台 GitHub —— 全球最流行的代码托管平台 GitLab —— 基于git的仓库管理程序 国内平台 Gitee —— 开源中国旗下的代码托管平台 Coding —— 支持社交元素的代码托管平台 一. GitHub 链接地址:https://github.com/ GitHub目前是全球最流行的代码托管平台(别称:全球最大的同性交友. 阅读详情

kernel thread 是如何产生出来?
今天我们来分析这个问题。

内核存在一个服务线程(kthreadd)来完成我们对内核线程的创建请求。
所以当我们call kthread_create的时候。就产生了一个请求。然后等待 服务线程(kthreadd)的服务 。
服务线程简单的从请求队列里拿出请求产生新的线程 ,

先上图。下图是完整的过程 图
R0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0YW5kYmFjaw==,size_16,color_FFFFFF,t_70)

  1. 从kthread_create开始
    [kernel/kthread.c]
    [include/linux/kthread.h]
    kthread_create 做了两件事
    a. 打包请求, 把要产生的新线程的function,以及参数打包成kthread_create_info,然后把他挂在请求队列里面
    然后唤醒kthreadd做事。

    struct kthread_create_info
    {
    int (*threadfn)(void *data);
    void *data;
    int node;
    struct task_struct *result;
    struct completion *done;
    struct list_head list;
    };

    b. 等待 khtreadd 完成线程 的产生
    c.在新线程 产生后。设定线程 的。名字, cpu mask…

  2. kthreadd
    kthread 是一个kernel thread.他在系统 init的时候 就产生了
    (可以参考/init/main.c @rest_init)
    他在一个for loop里不停的查看请求队列。当发现非空时就开始处理新的请求
    里面只是简单的call了 __do_fork,产生一个新的线程。
    这里新的线程 并不是直接 以,用户请求的function为入口的。

    pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES |
    SIGCHLD);

    而是以一个kthread的内核函数为入口的。。用户请求被包在了里面。后面我们会看到。

  3. threadfn, 新的开始
    新的线程kthread .被 创建后就开始运行
    他会告诉 请求线程,新线程已经建立起来。
    然后新线程就进入parked 状态。
    等待wake_up_process被call.后。新线程才开始运行

“EXB文件的格式和编程“ 首先,打开文件并读取文件头,然后解析文件头中的元数据信息。接下来,循环读取数据块,每次读取块头部分,解析块的大小和类型,并读取相应大小的块数据。文件头(Header):EXB文件通常包含一个文件头,用于存储关于文件的元数据信息。读取EXB文件时,首先需要解析文件头,以了解文件的属性和数据结构。总结起来,EXB文件是一种常见的二进制数据文件格式,在编程中处理EXB文件需要了解其基本结构和元数据信息。通过以上代码,您可以根据自己的需求扩展处理其他类型的数据块,或者根据EXB文件的具体规范进行解析和处理。 阅读详情

相关推荐

Claude Code + 自定义模型体验

AI 编程工具的发展突飞猛进:Cursor 横空出世,推出了“Agent 模式”;新竞争者如 Windsurf 也纷纷加入战局。几乎所有产品都开始转向“代理式(agentic)”开发模式——不再依赖单次 LLM 响应进行补全,而是让大模型在一个循环中调用各种工具,来完成更复杂的任务:分析代码库上下文、读取网页与文档、编译程序、运行测试、修复失败构建或测试、不断迭代等。

西京刀客 5795

【Linux】内核线程创建 kthread_run 函数和内核中断

以PCIE的热插拔内核线程创建为例说明注意:内核线程和RTOS的线程略有不同,这里Linux上创建以后直接运行,RTOS上有的是需要加入到调度队列中后才会执行,比如RT-Thread的系统kthread_run 是 Linux 内核中的一个函数,用于创建和运行内核线程(Kernel Thread)。在 Linux 内核中,线程是一种轻量级的执行单位,可以独立运行并共享进程资源。

逆风水手的博客 2681

第二章-Ethernet/IP基本概念

在I/O连接中,一旦连接建立,就不会有请求-响应数据,只会按照连接建立时指定的生产触发器所确定的时间间隔生产和消耗带有ConnectionID的数据。连接是通过连接管理器对象的Forward请求服务建立的,ForwardOpen请求包含所有连接参数,包括传输类、生产触发器、定时信息、电子密钥和连接ID。I/O适配器:I/O适配器从I/O扫描器接收隐式通信连接请求,然后以请求的速率生成I/O数据。I/O扫描器:启动与I/O适配器的隐式通信,需要处理连接的配置以及如何配置适配器。扫描器还支持启动显式报文。

_Nooice的博客 1233

Linux 进程中 Stop, Park, Freeze

http://kernel.meizu.com/linux-process-stop.html 在调试内核的时候,经常会碰到几个相近的概念:进程 stop、进程 park、进程 freeze。这几个名词看起来都是停止进程,那么他们之间的区别和应用场景在分别是什么呢?下面就来分析一番。 本文的代码分析基于 Linux kernel 3.18.22,最好的学习方法还是 “RTFSC

yiyeguzhou100的专栏 7100

TypeScript领域建模实战:基于斯坦福本体论七步法构建健壮数据模型

在软件工程中,领域建模是连接业务需求与技术实现的关键桥梁,其核心在于对业务概念、属性及其关系的显式定义与规范。通过系统化的建模方法,开发者能够将模糊的领域知识转化为清晰、可扩展且类型安全的数据结构,从而在编译时捕获潜在错误,提升代码质量与可维护性。这一过程的技术价值在于实现了从业务逻辑到类型系统的无损映射,确保了设计的一致性。在实践中,结合TypeScript的静态类型检查与Zod的运行时验证,可以构建起从概念到代码再到数据库的三层一致性约束。本文以电商、博客等常见应用场景为例,深入解析如何运用源自斯坦福知

weixin_42551967的博客 383

手把手教你为STM32设备生成自定义MAC地址(基于芯片ID的5种算法对比)

本文详细介绍了基于STM32芯片ID生成自定义MAC地址的5种算法,包括直接截取、异或折叠、CRC32哈希、自定义混合运算及SHA-256摘要。通过对比分析各算法的计算复杂度、唯一性及适用场景,帮助嵌入式开发者根据项目规模与资源,选择最合适的方案,确保设备MAC地址的唯一性与合规性。

weixin_29170327的博客 527

Linux 内核线程kthread

我们可以使用kthread_run()去创建一个内核线程并启动它,当一个内核线程被启动之后就会不停的运行下去除非其他线程调用了kthread_stop来结束这个线程,但是我们在调用kthread_stop之前一定要检查需要被终止的线程是否还在运行,如果kthread_stop调用了一个未运行的线程造成的后果是完犊子的(我这里做的实验就是导致我的虚拟机完全卡死,原因是kthread_stop调用的参数是个NULL),为了避免这种现象的出现还有一个重要的函数:kthread_should_stop,他的返回值是

qq_40629752的博客 2863

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 434

内核线程的创建kthread_run

https://blog.youkuaiyun.com/CQ062364/article/details/39646623?spm=1001.2101.3001.6650.8&utm_medium=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-39646623-blog-81703583.wap_relevant_t0_download&depth_1-utm_source=distribute.wa

gjioui123的博客 1793

【IoT】 产品设计之结构设计:如何设计产品按键

1、硅胶按键功能实现有两种接触方式 1)硅胶按键按压在DOME片(锅仔片)上 通常用在手机、儿童手表手机、防水手机等防水设备上。 2)硅胶按键增加导电基,一种黑色的导电碳粒,实现回路导电 通常用在遥控器、电脑键盘、特殊设备上。 两种方式结构设计原理是一样的,按键的固定与配合间隙与行程要确保好。 2、硅胶遥控器按键的结构方式(导电基) 按键帽为大颗粒实心的,触点为黑色导电基,通过压注成型融合为一体,那么这种按键结构设计时需要注意那些呢? 最主要的是按键按压回弹的手感,由于没有DOME片实现

产品线负责人 8669

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 932

Linux下2号进程的kthreadd--Linux进程的管理与调度(七)

日期 内核版本 架构 作者 GitHub 优快云 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 前言Linux下有3个特殊的进程,idle进程(PID=0PID = 0), init进程(PID=1PID = 1)和kthreadd(PID=2P

OSKernelLAB(gatieme) 3万+

TEA-Tiny Encryption算法在FPGA的实现

在FPGA原型中,我们定义了一个TEA_FPGA模块,该模块包含一个输入数据端口(plain)、一个输入密钥端口(key)和一个输出数据端口(cipher)。在模块中,我们通过32轮的循环处理来实现TEA算法的加密过程,并将最终结果存储在cipher变量中。由于FPGA硬件的高速性能,这种基于HDL的TEA算法实现可以在短时间内完成大量的数据加密处理,从而提高加密效率和性能。总之,在FPGA中实现TEA算法可以大大提高加密效率和性能,通过使用硬件描述语言HDL来实现可以更高效、更快速地完成数据加密操作。

BitSlinger的博客 272

Linux内核线程kthread简介【最好的一篇!】

Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内核态,因此,它只能使用大于PAGE_OFFSET(3G)的地址空间。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;

m0_74282605的博客 1719

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux内核下kthread_run()与kthread_create()分析:

kthread_run是linux内核定义的一个宏它包含: 1)kthread_create(task_id);//创建内核线程 2)wake_up_process(&task_id);//投入运行内核线程 kthread_run一旦执行线程会一直运行下去,只有遇到kthread_should_stop函数或者kthread_stop()函数,才停止运行; 代码如下: inclu...

ruolin0923的博客 1432

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

kthread_work和kthread_worker机制

最近在看spi的驱动,驱动中有一个队列化机制,看起来不是很懂,所以就整理了下这块的内容,即kthread_work队列化机制,其实也可以理解为一种内核线程机制。 我们首先来分析一下下面两个结构体kthread_worker 和 kthread_work 。 结构体分析 kthread_worker 数据结构定义在:include/linux/kthread.h struct kth...

小小城御园的博客 2054

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Linux API】kthread的使用

一,内核实例分析先来分析一下一个实例,这个例子主要是创建一个内核线程,用来打印GPIO信息,当线程没有收到停止的指令时,一直打印。int config_gpio_thread(void *tmp_gpio_num) //回调函数,返回值必须是int ,且参数必须是void * { int gpio_num = *((int *)tmp_gpio_num);//类型强转,由void*

Joymine的专栏 2630

Linux kthread worker/work机制分析

基于linux 5.6.2 code。

jiangnanmingtian的博客 858

linux kthread_run,kthread_run---进程创建唤醒过程的学习

创建内核使用的线程的函数为kthread_run()函数,而该函数实际是一个宏定义,它由kthread_create()和wake_up_process()两部分组成,调用了kthread_create()后执行了wake_up_process().这样的好处是用kthread_run()创建成功的线程可以直接运行,使用方便。kthread_create()根据参数创建kthread_create...

weixin_40002336的博客 1001

linux Kthread的使用示例

在Linux内核中,kthread(内核线程)用于创建运行在内核空间的后台线程,常用于驱动开发中执行异步任务(如轮询设备状态、数据处理等)。

1461

Android 8.0 开机流程 (二) Linux 内核kthreadd进程的启动

上一篇文章中分析了Linux内核idle进程(pid=0)的启动启动过程,并且创建了kthreadd 进程和init进程。init进程较为复杂,放在下一篇分析。本文就先分析kthreadd进程的启动过程。 1、kthreadd的创建 kthreadd定义在 Kernel\kernel\kthread.c 在上文中得知,kthreadd进程在rest_init()中被创建。task_struc...

不羁的码农 690

kthread_stop问题探讨

#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/device.h> #include <linux/cdev.h> #include <linux/kdev_t.h> #include <linux/interrupt.h> #incl

wangkai6666的博客 3884

运行不息的内核线程kthread

要创建一个内核线程有许多种方法,我们这里要学的是最简单的一种。打开include/linux/kthread.h,你就看到了它全部的API,一共三个函数。   struct task_struct kthread_run(int (*threadfn)(void *data),      void *data, const char namefmt[],...)

fivedoumi的专栏 660

【linux kernel】linux内核的kthreadd线程

linux内核的kthreadd线程分析 文章目录linux内核的kthreadd线程分析一、kthreadd线程的创建二、kthreadd线程入口分析三、新创建的内核线程入口函数```kthread```分析四、总结与补充(4-1)kthread_create()函数(4-2)kthread_create与kernel_thread的区别(4-3)kthread_run()函数(4-4)linux内核创建线程的整体过程五、附录 【注】 (1)linux内核版本:4.1.15 (2)文本不对进程和线程作区

iriczhao的博客 1927

linux 内核 current,解密Linux kernel中的内核线程

*****************************摘要***********************************************kernel_thread(kthreadd, NULL, CLONE_FS |CLONE_FILES);regs.ARM_pc= (unsigned long)kernel_thread_helper;do_fork(flags|CLONE_...

weixin_31064267的博客 484

Linux: 内核线程简析

linux, 内核线程

JiMoKuangXiangQu的专栏 1294
上一篇: device attribute
standback
博客等级 码龄14年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值