文档章节

Linux中用户空间与内核空间的数据交换方式

水海云
 水海云
发布于 2017/09/09 11:33
字数 1067
阅读 24
收藏 1
  1. 内核启动参数

    Linux 提供了一种通过 bootloader/BIOS向其传输启动参数的功能,内核开发者可以通过配置bootargs之类的选项来向内核传输数据,从而控制内核启动行为。

  2. 模块参数与sysfs系统

    内核子系统或设备驱动可以直接编译到内核,也可以编译成模块,如果编译到内核,可以使用前一节介绍的方法通过内核启动参数来向它们传递参数,如果编译成模块,则可以通过命令insmod 在插入模块时传递参数,或者在运行时通sysfs来设置或读取模块数据。

    Sysfs是一个基于内存的文件系统,实际上它基于ramfs,sysfs提供了一种把内核数据结构,它们的属性以及属性与数据结构的联系开放给用户态的方式,它与kobject子系统紧密地结合在一起,因此内核开发者不需要直接使用它,而是内核的各个子系统使用它。

  3. sysctl命令工具

    Sysctl是一种用户应用来设置和获得运行时内核的配置参数的一种有效方式,通过这种方式,用户应用可以在内核运行的任何时刻来改变内核的配置参数,也可以在任何时候获得内核的配置参数,通常内核的这些配置参数也出现在proc文件系统的/proc/sys目录下,用户应用可以直接通过这个目录下的文件来实现内核配置的读写操作。

  4. 系统调用

    系统调用是内核提供给应用程序的接口,应用对底层硬件的操作大部分都是通过调用系统调用来完成的,例如得到和设置系统时间,就需要分别调用gettimeofday 和 settimeofday 来实现。事实上所有的系统调用都涉及到内核与应用之间的数据交换,如文件系统操作函数read 和 write,设置和读取网络协议栈的 setsockopt 和getsockopt。

    一般地,用户可以建立一个伪设备来作为应用与内核之间进行数据交换的渠道,最通常的做法是使用伪字符设备,然后通过ioctl等通用系统调用来操作设备数据。

  5. netlink机制

    Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE但又远比它的功能强大,目前在Linux 内核中使用netlink 进行应用与内核通信的应用很多,包括:路由daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket协议(NETLINK_USERSOCK),防火墙(NETLINK_FIREWALL)等。

    Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 netlink。

    netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中,发送消息只是把消息保存在接收者的socket的接收队列,而不需要等待接收者收到消息,但系统调用与 ioctl 则是同步通信机制,如果传递的数据太长,将影响调度粒度。

  6. proc文件系统

    procfs文件系统与sysfs类似也是一种基于内存的文件系统,是一种最早的内核与用户态数据交互的方式之一。在Linux系统的/proc目录中挂载了procfs,目录下包含了内核系统相关的参数配置信息以及运行状态信息,还有所有的进程运行数据状态等。可以对/proc目录下的一些文件使用简单的echo命令进行参数的配置来调整系统的行为。

© 著作权归作者所有

共有 人打赏支持
水海云
粉丝 50
博文 120
码字总数 101938
作品 0
深圳
程序员
私信 提问
linux vmstat命令详解

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vms...

serenity
2015/07/01
0
0
Linux 系统上交换空间的介绍

学习如何修改你的系统上的交换空间的容量,以及你到底需要多大的交换空间。 当今无论什么操作系统交换Swap空间是非常常见的。Linux 使用交换空间来增加主机可用的虚拟内存。它可以在常规文件...

作者: David Both
10/14
0
0
初识openstack之1——虚拟化介绍及KVM虚拟机

一、基础知识 CPU的工作机制 随着云计算的兴起,虚拟化作为云计算的组成部分也火了一把,但虚拟化并不是什么新技术,早在上世纪70年代虚拟化技术就已经出现。传统的CPU由4个环组成,分为:环...

qiao645
06/29
0
0
从 Linux 内核访问用户空间内存(mmu)

Linux 内存和用户空间 API 简介 因为内核和用户空间存在于不同的虚拟地址空间中,在它们之间移动数据需要特别注意。研究虚拟地址空间和内核 API 理念,用于将数据移入或移出用户空间,并学习...

小杰linux
2016/11/17
0
0
聊聊:Linux的内存管理机制

导读 经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。 这是Linux内存管理的一个...

问题终结者
08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

降压变换器 Buck

特点 输入输出极性相同。 工作过程 在 MOS 导通时,输入电源通过 L 和 C 滤波后向负载端提供电流;当 MOS 断开后,L 通过二极管续流,保持负载电流连续。输出电压因为占空比的作用,不会超过...

colinux
今天
2
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
4
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部