当前位置: 技术问答>linux和unix
求助关于内核空间和用户空间通信的问题
来源: 互联网 发布时间:2016-12-25
本文导语: 这两天在网上看了好多关于这方面的文章。但是觉得好矛盾。 1:有这么一种说法的: Linux 传统的进程间通信有很多,如各类管道、消息队列、内存共享、信号量等等。但它们都无法介于内核态与用户态使用,原因...
这两天在网上看了好多关于这方面的文章。但是觉得好矛盾。
1:有这么一种说法的:
Linux 传统的进程间通信有很多,如各类管道、消息队列、内存共享、信号量等等。但它们都无法介于内核态与用户态使用,原因如表【2】。
表【2】
通信方法 无法介于内核态与用户态的原因
管道(不包括命名管道) 局限于父子进程间的通信。
消息队列 在硬、软中断中无法无阻塞地接收数据。
信号量 无法介于内核态和用户态使用。
内存共享 需要信号量辅助,而信号量又无法使用。
套接字 在硬、软中断中无法无阻塞地接收数据。
这样子就是说mmap等都无法使用??好像只能用netlink似的?
2、有这么一种说法:
用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,
这个又说各种方法均可使用??
感觉蛮混乱的,到底是怎么回事呢?求解答。
1:有这么一种说法的:
Linux 传统的进程间通信有很多,如各类管道、消息队列、内存共享、信号量等等。但它们都无法介于内核态与用户态使用,原因如表【2】。
表【2】
通信方法 无法介于内核态与用户态的原因
管道(不包括命名管道) 局限于父子进程间的通信。
消息队列 在硬、软中断中无法无阻塞地接收数据。
信号量 无法介于内核态和用户态使用。
内存共享 需要信号量辅助,而信号量又无法使用。
套接字 在硬、软中断中无法无阻塞地接收数据。
这样子就是说mmap等都无法使用??好像只能用netlink似的?
2、有这么一种说法:
用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,
这个又说各种方法均可使用??
感觉蛮混乱的,到底是怎么回事呢?求解答。
|
怎么算介于内核态与用户态之间使用?
|
个人观点,如果在程序中使用传输数据比较多,使用netlink或共享内存,比如sysctl这样的是修改系统配置与内核通信的。
|
内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs
其中
模块参数 ,系统调用 ,netlink,
这三种是偶见过的用过的用于用户态和内核态通信的方式