免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23004 | 回复: 2
打印 上一主题 下一主题

Linux内核级线程如何创建? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-08-20 20:23 |显示全部楼层

  1. int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
复制代码

在启动的时候调用这个函数, 运行完之后自己退出就行了, 或者在内核中周期性地去调用它. 你想在用户态干掉内核线程是不行的.

论坛徽章:
0
2 [报告]
发表于 2007-08-20 20:40 |显示全部楼层
原帖由 wbchu 于 2007-8-20 20:29 发表
另外问一下,内核里面是不是不准开大的内存,比如要在内核模块里面开一个 int m[100000],是否可以?还有,内核模块里面如何把文件中的内容读进来,我现在需要把配置文件读入,是否可以?谢谢



内核里面最好不要开辟很大的内存, 每个进程的内核栈一般是8K, 所以int m[100000]很可能会出现问题.

至于如何在内核态中读取文件内容,在内核源码版有代码,你看看:
http://linux.chinaunix.net/bbs/v ... p%3Bfilter%3Ddigest

不过不推荐在内核态中直接进行文件的读写, 你可以把重要的任务交给内核态来完成, 比如一个小驱动什么的, 然后将读取文件之类的操作作为用户态程序来进行处理.

论坛徽章:
0
3 [报告]
发表于 2007-08-20 20:55 |显示全部楼层
原帖由 web_surf 于 2007-8-20 20:49 发表
其实, 借助与ioctl, 内核线程是可以杀死的。

int _exit_flag = 0;

int kernel_func(void *p)
{
    while(_exit_flag == 0)
   {
        ......
   }
}

int ioctl(....,int cmd, .........)
{ ...



嗯. 你这种方式倒是可以干掉内核线程, 不过你只是让这个循环的条件为假的方式来使内核线程结束. 我之前说的是使用kill这些方式来杀死内核线程的方式是不可以的.
其实更多的是决定何时去调用这个内核线程,比如内核中的负载平衡程序等,都有守护进程去调用这个内核线程完成一定的任务.
个人认为关键在于何时去调用,而不是何时去杀死.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP