首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

文章目录 一、内核线程概念 二、内核线程、普通进程、用户线程 三、内核线程、普通进程区别 四、内核线程主要用途 五、内核线程创建函数 kernel_thread 源码 一、内核线程概念 ---- 直接...由 Linux 内核 启动的线程 , 被称为 " 内核线程 " ; " 内核线程 " 是一种 特殊进程 , 独立运行在 " 内核空间 " , 其将 " 内核函数 " 委托给 独立进程 , 该 " 独立进程..." 与 其它进程 ( 包括 普通进程 , 内核自身 , 用户级线程 ) 并行执行 ; " 内核线程 " 也称为 " 守护进程 " ; 二、内核线程、普通进程、用户线程 ---- 在 【Linux 内核...】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 ) 一、进程特殊形式 ( 内核线程 | 用户线程...*arg, unsigned long flags) 方法 , 就是创建内核线程的函数 , 该函数中最终也是调用了 _do_fork() 函数 , 与 fork() , vfork() , clone(

3.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核15-内核如何创建进程

,先检查指针是否合法 * 因为如果线程创建后立即退出的话,线程指针可能会非法 */ if (!...:创建旧进程的副本,比如进程描述符和子进程运行需要的其它内核数据结构。...根据是创建线程还是进程设置线程组组长、进程组组长等等信息 // ... // 12....esp寄存器加载thread.esp的值(也就是获取了子进程的内核态栈的地址),eip寄存器加载ret_from_fork()函数的返回地址(子进程执行的下一条指令)。...当然了,线程只是拷贝父进程的即可。 创建完进程的4要素之后,把新进程的最开始执行的指令设置到eip寄存器即可。然后就是等待内核调度。当轮到新进程使用CPU的时候,就从eip寄存器开始执行。

2K10

深入理解Linux内核内核线程(下)

虽然讲解完了内核线程创建过程,但是似乎又少点什么,那么下面我们来看两个细节:内核线程执行处理函数和内核线程上下文切换细节: 7.内核线程执行处理函数细节 内核线程执行到处理函数要从fork说起: 7.1...内核创建内核线程用例 下面我们来看下,内核创建内核线程为系统服务的用例,我们只提及不讲解具体的服务逻辑。...用例1:linux系统中,当内存不足时,会唤醒kswapd内核线程来进行异步内存回收,下面我们来看他的创建过程: mm/vmscan.c kswapd_init ->for_each_node_state...(kswapd, pgdat, "kswapd%d", nid) //使用kthread_run结构创建并唤醒创建内核线程 执行kswapd函数 用例2:Linux软中断是下半部的一种机制,一般对效率要求较高的场景会使用到...9.实践环节 前面我们分析了内核线程创建过程,也分析了很多的源代码,最后我们来实战一下,来使用内核的api来创建内核线程为我们服务(这里我们创建一个内核线程,然后每隔一秒打印一串字符 :I am kernel

2K30

Linux内核线程

线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核线程”。...用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。...这种线程甚至在象 DOS 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。...其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。...Windows NT和OS/2支持内核线程Linux 支持内核级的多线程

4K00

深入理解Linux内核内核线程(上)

1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 在linux系统中, 我们接触最多的莫过于用户空间的任务...,像用户线程或用户进程,因为他们太活跃了,也太耀眼了以至于我们感受不到内核线程的存在,但是内核线程却在背后默默地付出着,如内存回收,脏页回写,处理大量的软中断等,如果没有内核线程那么linux世界是那么的可怕...本文力求与完整介绍完内核线程的整个生命周期,如内核线程创建、调度等等,当然本文还是主要从内存管理和进程调度两个维度来解析,且不会涉及到具体的内核线程如kswapd的实现,最后我们会以一个简单的内核模块来说明如何在驱动代码中来创建使用内核线程...2.kthreadd的诞生 盘古开天辟地,我们知道linux所有任务的祖先是0号进程,然后0号进程创建了天字第一号的1号init进程,init进程是所有用户任务的祖先,而内核线程同样也有自己的祖先那就是...:停止一个内核线程 kthread_should_stop:判断一个内核线程是否应该停止2.涉及到的kthreadd内核线程,新创建内核线程,发起创建内核线程请求的任务,他们直接通过完成量进行同步 3

2K20

Java线程Linux内核线程的映射关系

Java线程Linux内核线程的映射关系Linux内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。...Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制,JVM线程内核轻量级进程有一一对应的关系。...线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。...Java线程在Windows及Linux平台上的实现方式,现在看来,是内核线程的实现方式。...看图: Java线程Linux内核线程的映射关系 (说明:KLT即内核线程Kernel Thread,是“内核分身”。

2.1K40

linux内核进程创建fork源码解析

平时写过多进程多线程程序,比如使用linux的系统调用fork创建子进程和glibc中的nptl包里的pthread_create创建线程,甚至在java里使用Thread类创建线程等,虽然使用问题不大...这次在自己写操作系统的时候,看了一遍linux内核的进程创建过程。算是有了比较深入的理解。     进程概念:进程是对正在运行程序的一个抽象。...一个标准的线程线程ID,当前指令指针,寄存器集合,堆栈等,线程创建速度快,因为线程和所属进程共享资源,避免了资源复制和重新创建的开销。...,进程线程创建都要调用同一个函数就是do_fork, 系统调用sys_fork,sys_clone,和内核线程创建kernel_thread函数最终都要调用do_fork。.../* * fork进程的主要函数,sys_fork,sys_clone等用户系统调用和kernel_thread创建内核线程函数都会调用 * 此函数。

8.6K21

4.4 Windows驱动开发:内核监控进程与线程创建

PsSetCreateProcessNotifyRoutineEx 用于在系统启动后向内核注册一个回调函数,以监视新进程的创建和退出,其函数原型如下: NTSTATUS PsSetCreateProcessNotifyRoutineEx...与进程检测类似,如果要检测线程创建则只需要通过PsSetCreateThreadNotifyRoutine创建线程回调即可,PsSetCreateThreadNotifyRoutine 函数的原型如下:...当一个新的线程创建时,操作系统会调用所有已注册的回调函数,并将新线程的ThreadID和进程ID作为参数传递给回调函数。这些参数可以用来识别新线程所属的进程以及新线程本身的标识符。...对于PCREATE_THREAD_NOTIFY_ROUTINE来说,它指向一个回调函数,用于通知进程中新线程创建。...ThreadId:新线程线程ID。 Create:布尔值,指示新线程创建还是销毁。如果为TRUE,则表示新线程创建;如果为FALSE,则表示新线程已销毁。

28920

4.4 Windows驱动开发:内核监控进程与线程创建

PsSetCreateProcessNotifyRoutineEx 用于在系统启动后向内核注册一个回调函数,以监视新进程的创建和退出,其函数原型如下:NTSTATUS PsSetCreateProcessNotifyRoutineEx...与进程检测类似,如果要检测线程创建则只需要通过PsSetCreateThreadNotifyRoutine创建线程回调即可,PsSetCreateThreadNotifyRoutine 函数的原型如下:...当一个新的线程创建时,操作系统会调用所有已注册的回调函数,并将新线程的ThreadID和进程ID作为参数传递给回调函数。这些参数可以用来识别新线程所属的进程以及新线程本身的标识符。...对于PCREATE_THREAD_NOTIFY_ROUTINE来说,它指向一个回调函数,用于通知进程中新线程创建。...ThreadId:新线程线程ID。Create:布尔值,指示新线程创建还是销毁。如果为TRUE,则表示新线程创建;如果为FALSE,则表示新线程已销毁。

30140

Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )

文章目录 一、进程特殊形式 ( 内核线程 | 用户线程 ) 二、C 标准库与 Linux 内核中进程相关概念 三、Linux 查看进程命令及输出字段解析 一、进程特殊形式 ( 内核线程 | 用户线程 )...种 特殊形式 : 内核线程 : 只有 内核虚拟地址空间 , 没有 用户虚拟地址空间 的进程 , 称为 内核线程 ; 用户级线程 : 共享 用户虚拟地址空间 的进程 , 称为 用户线程 ; 线程 : 用户线程...又称为 线程 ; 线程组 : 共享 相同 用户虚拟地址空间 的线程 , 组成了一个 线程组 , 二、C 标准库与 Linux 内核中进程相关概念 ---- C 语言中 标准库 提供的 进程 , 与 Linux...内核 中的 进程 这两个概念是不同的 ; C 标准库 中的 包含多个线程 的进程 , 在 Linux 内核中 称为 " 线程组 " ; C 标准库 中的 只有一个线程 的进程 , 在 Linux 内核中...称为 " 任务 / 进程 " ; C 标准库 中的 线程 , 在 Linux 内核中 称为 " 共享 用户虚拟地址空间 的 进程 " 三、Linux 查看进程命令及输出字段解析 ---- 在 Ubuntu

8.4K20

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.1K32

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30
领券