首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
Linux用户态与内核态的交互讲解
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2007-08-14  

参考文档

《Linux 系统内核空间与用户空间通信的实现与分析》 陈鑫

《在 Linux 下用户空间与内核空间数据交换的方式》 杨燚

理论篇

在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,它与内核的交互就全部使用了netlink,著名的内核包过滤框架Netfilter在与用户空间的通读,也在最新版本中改变为netlink,无疑,它把是Linux用户态与内核态交流的主要方法之一。它的通信依据是一个对应于进程的标识,一般定为该进程的 ID。当通信的一端处于中断过程时,该标识为 0。当使用 netlink 套接字进行通信,通信的双方都是用户态进程,则使用方法类似于消息队列。但通信双方有一端是中断过程,使用方法则不同。netlink 套接字的最大特点是对中断过程的支持,它在内核空间接收用户空间数据时不再需要用户自行启动一个内核程,而是通过另一个软中断调用用户事先指定的接收函数。工作原理如图:

 

如图所示,这里使用了软中断而不是内核线程来接收数据,这样就可以保证数据接收的实时性。 当 netlink 套接字用于内核空间与用户空间的通信时,在用户空间的创建方法和一般套接字使用类似,但内核空间的创建方法则不同,下图是 netlink 套接字实现此类通信时创建的过程:

 

用户空间

用户态应用使用标准的socket与内核通讯,标准的socket API 的函数, socket(), bind(), sendmsg(), recvmsg() 和 close()很容易地应用到 netlink socket。

为了创建一个 netlink socket,用户需要使用如下参数调用 socket():

 

 

 

 

 

socket(AF_NETLINK, SOCK_RAW, netlink_type)

 

netlink对应的协议簇是 AF_NETLINK,第二个参数必须是SOCK_RAW或SOCK_DGRAM, 第三个参数指定netlink协议类型,它可以是一个自定义的类型,也可以使用内核预定义的类型:

 

#define NETLINK_ROUTE          0       /* Routing/device hook                          */

#define NETLINK_W1 1 /* 1-wire subsystem */

#define NETLINK_USERSOCK 2 /* Reserved for user mode socket protocols */

#define NETLINK_FIREWALL 3 /* Firewalling hook */

#define NETLINK_INET_DIAG 4 /* INET socket monitoring */

#define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */

#define NETLINK_XFRM 6 /* ipsec */

#define NETLINK_SELINUX 7 /* SELinux event notifications */

#define NETLINK_ISCSI 8 /* Open-iSCSI */

#define NETLINK_AUDIT 9 /* auditing */

#define NETLINK_FIB_LOOKUP 10

#define NETLINK_CONNECTOR 11


共7页: 上一页 1 [2] [3] [4] [5] [6] [7] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·Linux系统调用列表(详解)
·MBR如果被覆盖了怎麽办?
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux系统下用户和用户组所有权
·Linux操作系统下配置IPTables方
·Linux操作系统的源代码目录树结
·linux应用技巧集囊(新手遍)
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux操作系统配置基础祥解:GRU
·Linux内核可装载模块对设备驱动
  相关文章
·Linux内核重编译常见故障及其解
·Linux 2.6新内核的设计理念及新
·FreeBSD手册讲解(二)—配置FreeB
·FreeBSD手册讲解(一)--配置FreeB
·一种内核到用户空间的高效数据传
·Linux系统内核新型包过滤结构的
·编译支持NTFS的Linux系统内核模
·概述Linux系统的驱动框架及驱动
·Linux操作系统动态函式库讲解(二
·Linux操作系统动态函式库讲解(
·SYN Cookie原理以及在Linux系统
·Linux系统内核网络参数意义以及

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!