免费注册 查看新帖 |

Chinaunix

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

[内核同步] 内核netlink接收用户空间的数据属于进程上下文还是中断上下文啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-23 00:45 |只看该作者 |倒序浏览
rt

ioctl的内核处理函数能够确定是进程上下文。但是netlink的实现,是采用的软中断方法。

所以这里迷糊了。 采用软中断实现的接收处理函数属于进程上下文还是中断上下文呢?

论坛徽章:
0
2 [报告]
发表于 2013-10-23 00:55 |只看该作者
刚才挖坟看到的,问问各位大拿,这样解释对不对

从用户空间主动发送数据到内核空间,通过sockete系统调用后,进入内核态,这时系统处于内核态(仍然处于进程的上下文中);从内核主动发数据到用户空间,如通过中断-)软中断收到报文,通过netfilter调用事先注册的处理函数,最终通过socket机制唤醒用户进程接收数据包,这个过程中,系统处于中断(或软中断)状态。所以个人认为,netlink socket的最大优点,一是可以实现用户和内核的双向通信,二是采用更通用的socket接口方便编程,三是内核(中断或软中断)可以实时通知用户进程进行报文交互。

这句话的意思我理解为 :   

1  用户空间发送数据给内核  (进程上下文), 如果内核收到消息后,发送回复的ack也属于(进程上下文)。

2  内核主动上报给用户空间   (中断上下文)。

论坛徽章:
0
3 [报告]
发表于 2013-10-23 01:13 |只看该作者
这篇文章说的又不同 https://www.ibm.com/developerworks/cn/linux/l-netlink/

说kernel_receive() 函数的运行在软中断环境。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2013-10-23 09:19 |只看该作者
软中断应该属于中断上下文,个人觉得区分的意义不太大。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
5 [报告]
发表于 2013-10-23 09:59 |只看该作者
3.11.5内核,没发现你说的 kernel_receive()

内核 netlink套接字接收用户空间的接收函数,即 netlink_socket.netlink_rcv

它在调用 netlink_kernel_create()时,设置为第三个参数 struct netlink_kernel_cfg中的 input域

这个函数运行于进程上下文,详细调用链为 (假设你在用户空间调用 sendmsg)
  1. <net/socket.c>
  2. SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned int, flags)
  3.         __sys_sendmsg()
  4.                 ___sys_sendmsg()
  5.                         sock_sendmsg()
  6.                                 __sock_sendmsg()
  7.                                         __sock_sendmsg_nosec()
  8.                                                 sock->ops->sendmsg()
复制代码
由于你使用的套接字为 netlink, sock->ops->sendmsg()实际调用的是
  1. <net/netlink/af_netlink.c>
  2. netlink_sendmsg()
  3.         netlink_unicast()
  4.                 netlink_unicast_kernel()
  5.                         netlink_sock->netlink_rcv()
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-10-25 00:18 |只看该作者
楼上大哥,这些调用关系怎么找的啊? 有什么相关书籍啊?

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
7 [报告]
发表于 2013-10-25 08:57 |只看该作者
回复 6# wangjun0629

都是自己阅读代码。。。

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
8 [报告]
发表于 2013-10-26 10:44 |只看该作者
netlink socket她也是socket,你说socket收发是在用户进程上下文还是中断上下文

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
9 [报告]
发表于 2013-10-30 14:39 |只看该作者
用户层发数据的话在进程上下文
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP