CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  内核及驱动程序研究区

linux下如何实现两个内核线程之间的通信

楼主freedomchen()2006-04-29 17:19:42 在 Linux/Unix社区 / 内核及驱动程序研究区 提问

并且两个内核线程可能是在不同的机器上 问题点数:20、回复次数:12Top

1 楼tb01412(tb)回复于 2006-04-29 21:01:18 得分 0

不在同一机子上的进程通信只能依靠网络,串口之类,所以你试一下在内核中去封装在C库中的相关操作试一下,也就是说封装一下socket套接字通信的各个API,或者串口操作的API之类Top

2 楼freedomchen()回复于 2006-04-30 09:02:19 得分 0

我对socket理解的不是很深刻。我曾经看到过一篇关于linux内核线程和用户进程间通信的帖子,好像是用netlink实现的,我不太清楚socket,netlink,tcp/ip这三者之间的关系,可否给我科普一下,多谢了Top

3 楼yangxudongseu(贝壳里的涛声)回复于 2006-04-30 16:53:56 得分 0

unix域套接字Top

4 楼john56(John Blanchard)回复于 2006-05-07 17:01:07 得分 0

内核是多线程吗?Top

5 楼shinesi(DaBaiCai)回复于 2006-05-08 19:44:42 得分 0

rpcTop

6 楼yaoyuhang(tom)回复于 2006-05-09 15:04:14 得分 0

不太明白,什么是“内核线程”。帮不了你啦  
   
  如果是线程间通信方式很多。  
  共享内存,管道,socket,信号量等等。Top

7 楼tb01412(tb)回复于 2006-05-09 15:22:28 得分 0

内核线程,你可以将它看成一个普通的进程,只不过它没有单独的进程页表,CR3等,而是共用内核的,并且是工作在内核态,其它情况与一个普通的进程完全一样  
   
  一个用户进程可以用什么方式与外部机子通信,就可以在内核线程中用相应方式,不过内核线程由于工作在内核态,所以不能使用C库的东东,这样一来就有了太多限制,比如不能使用封装好的socket通信,不能使用封装好的文件操作函数等,而C库的这些东东都是调用内核的相关系统调用来实现的,所以你完全可以模仿C库的操作,自己来封装这些函数,然后调用,不过这样做非常麻烦,给一个简单的办法:写一个用户进程,然后通过特定的手段与内核线程通信,而在用户进程中才真正与外部机子通信,这样简化了操作,但效率段降低了,内核线程与用户进程通信的手段就很丰富了,比如进程间的任何通信方式都可以用(同样存在封装API的问题),简单一点可以用proc文件系统,信号(内核中向用户进程发信号非常简单)等,如果再做简单一点,就为你的用户进程写一个“驱动”,内核线程与那个驱动交互数据,同是在内核态下,交互数据的方式就有N多种了,看一下LINUX设备驱动程序这本书就明白了,比如可以用内核信号量,锁,原子操作等,应有尽有,而“驱动”与你的那个用户进程交互数据就再简单不过了,用read,write系列函数,这样一来,由内核线程发起操作,首先向通知“驱动”有数据到来,然后向它传递数据,然后“驱动”通知用户进程有数据来,并且将数据交给用户进程,用户进程将读到的数据再通过socket通信向外部机子发出。。。。  
  这样一来,写代码的难度大大降低,而效率也大大降低了,数据转了一大圈来发出去,如果你想要提高效率的话,直接在内核线程中使用socket通信与外界交互数据,不过代码的难度就上去了Top

8 楼alec626(月吻长河Blog:spaces.msn.com/filebase)回复于 2006-05-14 17:58:58 得分 0

不同的机器上只有使用socket了Top

9 楼zdhzidy(rick)回复于 2006-05-22 14:51:22 得分 0

呵呵,这个问题好像是计算机集群,分布式样操作系统方面的问题了:)和具体使用Linux还是Windows已经没有什么关系了。建议可以看看分布式系统方面的书籍,估计可能有帮助。Top

10 楼bluedreammer(瀟瀟鳥)回复于 2006-05-25 10:30:22 得分 0

netlink  
  可以google下,网上很多sample的Top

11 楼sycpu()回复于 2006-05-25 13:53:25 得分 0

长见识Top

12 楼ljp940531(ljp)回复于 2006-06-17 13:45:05 得分 0

比如不能使用封装好的socket通信,不能使用封装好的文件操作函数等,而C库的这些东东都是调用内核的相关系统调用来实现的,所以你完全可以模仿C库的操作,自己来封装这些函数,然后调用,不过这样做非常麻烦,给一个简单的办法:写  
   
   
  内核使用socket函数全部加上sys_就可以了,参数都一样,,一样的使用。。。。呵呵Top

相关问题

关键词

得分解答快速导航

  • 帖主:freedomchen

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo