文档章节

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

水海云
 水海云
发布于 2017/09/09 11:33
字数 1067
阅读 19
收藏 1
点赞 0
评论 0
  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
初识openstack之1——虚拟化介绍及KVM虚拟机

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

qiao645
06/29
0
0
Linux 用户态与内核态的交互——netlink 篇

原文链接:http://www.chinaunix.net/jh/4/822500.html 这是一篇学习笔记,主要是对《Linux 系统内核空间与用户空间通信的实现与分析》中的源码imp2的分析。其中的源码,可以到以下URL下载:...

bigfish__
2012/02/20
0
0
Linux下硬盘分区的最佳方案

Linux下硬盘分区的最佳方案 在对硬盘进行分区前,应该先弄清楚计算机担负的工作及硬盘的容量有多大,还要考虑到以下几个问题。   第一点也是最重要的一点,要知道当前安装LILO的版本,因为...

龙玉华
2010/03/19
0
0
linux系统调优-存储(内存、硬盘)

首先一个基本概念: 存储系统存储速度的快->慢: 内存->闪存->磁盘 因为内存的价格限制以及操作系统支持的限制,我们只能从磁盘这块来看,可见磁盘正是存储系统的最大瓶颈所在。 **下面具体提...

月黑风高杀人夜
2015/08/21
0
0
Linux内存管理(简洁概括)

虚拟内存是为了满足物理内存不足采用的策略,利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间也就是交换分区。 作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的逻辑内存,...

Taisuke
2014/06/16
0
0
从 Linux 内核访问用户空间内存(mmu)

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

小杰linux
2016/11/17
0
0
Linux 中直接 I/O 机制的介绍

Linux 中直接 I/O 机制的介绍 简介: 对于传统的操作系统来说,普通的 I/O 操作一般会被内核缓存,这种 I/O 被称作缓存 I/O。本文所介绍的文件访问机制不经过操作系统内核的缓存,数据直接在...

慎思
2012/07/27
0
1
Android安全模型之Linux安全模型

Android系统以Linux内核为基础,理解Android的安全设计首先要理清Linux安全模型的主要概念与元素,包括用户与权限,进程与内存空间等。 用户与权限 Linux安全模型的基础是用户与用户组。Lin...

柳哥
2014/11/30
0
0
Android安全模型之Android安全机制(进程通信)

进程通信是应用程序进程之间通过操作系统交换数据与服务对象的机制。Linux操作系统的传统进程间通信(IPC)有多种方式,比如管道,命令管道,信号量,共享内存,消息队列,以及网络与Unix套接...

柳哥
2014/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部