转自:http://blog.chinaunix.net/uid-25513153-id-2888903.html

kthread_create与kernel_thread的区别

kernel thread可以用kernel_thread创建,但是在执行函数里面必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的完成。 
kthread_create是比较正牌的创建函数,这个不必要调用daemonize,用这个创建的kernel thread都挂在了kthread线程下。
从表面上来看,这两个函数非常的类似,但是实现却是相差甚远。
kthread_create是通过work_queue来实现的,kernel_thread是通过do_fork来实现的。
kthread_create:
DECLARE_WORK(work, keventd_create_kthread, &create);
调用keventd_create_kthread,keventd_create_kthread中调用kernel_thread:
    pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD);
参考:
http://www.scs.ch/~frey/linux/kernelthreads.html
http://kernelnewbies.org/Simple_UDP_Server
http://mail.nl.linux.org/kernelnewbies/2006-07/msg00373.html
http://linux.sheup.com/linux/linux7553.htm

kernel_thread 的使用

作者:Penna 日期:2009-04-20

字体大小:   
 

转载文章,版权归原作者所有。
原文出处:http://hi.baidu.com/wild_boar/blog/item/92eb8b5432543b1c3b293546.html

可以在非内核线程中调用kernel_thread, 但这样创建的线程必须在自己调用daemonize(...)来释放资源, 成为真正的内核线程。

#include 
#include

static int noop(void *dummy) 

int i = 0; 
daemonize("mythread"); 
while(i++ < 5) { 
printk("current->mm = %p\n", current->mm); 
printk("current->active_mm = %p\n", current->active_mm); 
set_current_state(TASK_INTERRUPTIBLE); 
schedule_timeout(10 * HZ); 

return 0; 
}

static int test_init(void) 

kernel_thread(noop, NULL, CLONE_KERNEL | SIGCHLD); 
return 0; 
}

static void test_exit(void) {} 
module_init(test_init); 
module_exit(test_exit);

”mythread“就是给这个内核线程取的名字, 可以用ps -A来查看。 
schedule()用于进程调度, 可以理解为放弃CPU的使用权.

kernel thread可以用kernel_thread创建,但是在执行函数里面必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的完成。 
kthread_create是比较正牌的创建函数,这个不必要调用daemonize,用这个创建的kernel thread都挂在了kthread线程下。

kthread_create与kernel_thread的区别【栈】的更多相关文章

  1. 面试题思考:Stack和Heap的区别 栈和堆的区别

    堆栈的概念: 堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常 ...

  2. Linux程序存储结构与进程结构堆和栈的区别【转】

    转自:http://www.hongkevip.com/caozuoxitong/Unix_Linux/24581.html 红客VIP(http://www.hongkevip.com):Linux ...

  3. ios 基础知识篇 堆和栈的区别

    前言 堆和栈是什么?有什么区别?是干嘛的? 内存管理 移动设备的内存及其有限,每一个APP所能占用的内存是有限制的 (吐槽一下:iPhone6s还是16G起步,还好我也买不起->_-> 扯 ...

  4. Linux内核:kthread_create(线程)、SLEEP_MILLI_SEC

    转自:http://blog.csdn.net/guowenyan001/article/details/39230181 一.代码 #include <linux/module.h> # ...

  5. Java面试题中常考的容易混淆的知识点区别

    以下是我收集的Java编程里各种区别,供Java学习爱好者参考,这些区别都是每次Java面试中常考的,大家好好掌握,如有失误请留言指出.想要获取Java详细全套学习资料请到上海尚学堂官网获取. 1.H ...

  6. 剑指offer例题——用两个栈实现队列

    题目:用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 首先是概念理解,栈和对列存取的区别 栈(stack)是一种后进先出(last in first out, LI ...

  7. js堆和栈

    一.栈 栈:英文为“stack”: 定义:一种存放数据的内存区域: 特点: ①LIFO,后进先出: 可视化描述: ②调用栈,函数或者子例程像堆积木一样存放,以实现层层调用: 函数调用形成一个栈帧: f ...

  8. 《C#高级编程》学习笔记----c#内存管理--栈VS堆

    本文转载自Netprawn,原文英文版地址 尽管在.net framework中我们不太需要关注内存管理和垃圾回收这方面的问题,但是出于提高我们应用程序性能的目的,在我们的脑子里还是需要有这方面的意识 ...

  9. Leetcode Lect3 内存中的栈空间与堆空间

    内存中的栈空间与堆空间 我们通常所说的内存空间,包含了两个部分:栈空间(Stack space)和堆空间(Heap space) 当一个程序在执行的时候,操作系统为了让进程可以使用一些固定的不被其他进 ...

随机推荐

  1. 编译 TensorFlow 的 C/C++ 接口

    TensorFlow 的 Python 接口由于其方便性和实用性而大受欢迎,但实际应用中我们可能还需要其它编程语言的接口,本文将介绍如何编译 TensorFlow 的 C/C++ 接口. 安装环境: ...

  2. 学习materialize

    <div class="container"> <div class="row">   </div> <div cla ...

  3. 安装CentOS 5.x与多重引导小技巧

    不建议使用Virtualbox安装Linux来学习!本处是学习在计算机上安装Linux. 但现在条件有限,就先使用Virtualbox练习!

  4. ASP.NET程序中设置相对路径的方法

    如图所示,这是个绝对路径. 改为相对路径的方法是:AppDomain.CurrentDomain.BaseDirectory. 如下图所示:

  5. 学习MVC中出现的一个BUG

    BUG描述:No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.S ...

  6. TLS协议分析

    TLS协议分析 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解 ...

  7. B - 寻找M

    B - 寻找M Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Descri ...

  8. Linux挂载Win共享文件夹_VmwareTools

  9. sudo是干哈子的

    我sudo loop发现啊大家就都是root了,那么这和我直接用root起有啥区别呢? root      3826  0.0  0.1  56596  3984 pts/2    S+   12:5 ...

  10. linux cfs 负载均衡

    确定新的负载的时候,代码中给出的公式是: (old×(2^i-1) + new))/2^i 整理下来是: old + (new-old)/2^i i的范围是[1, 4],也就是说,i的层级越高,那么n ...