首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux mmap完全剖析

在 32位的 Linux 内核中,每个进程都独有 4GB 的虚拟内存空间,但所有进程却共用相同的物理内存空间。...vm_area_struct 结构 在Linux内核中,虚拟内存是用过结构体 vm_area_struct 来管理的,通过 vm_area_struct 结构体可以把虚拟内存划分为多个用途不相同的内存区...当调用 mmap() 时,内核会创建一个 vm_area_struct 结构,并且把 vm_start 和 vm_end 指向虚拟内存空间的某个内存区,并且把 vm_file 字段指向映射的文件对象。...对文件的读写 像 read()/write() 这些系统调用,首先需要进行内核空间,然后把文件内容读入到缓存中,然后再对缓存进行读写操作,最后由内核定时同步到文件中。过程如下图: ?

2.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核宏container_of的深度剖析

1、前面说的 我在好几年前读linux 驱动代码的时候看到这个宏,百度了好久,知道怎么用了,但是对实现过程和原理还是一知半解。...container_of宏 在linux内核代码里面使用次数非常非常多,对于喜欢linux编程的同学来说,了解其实现方法,对以后看内核代码,写内核驱动的帮助都非常大,当然,我不是说了解这个就可以为所欲为了...,内核博大精深,先宏观再微观去学习,不积跬步何以致千里,不要想着一口就能吃成一个胖子,我这篇文章主要剖析一下这个函数的实现原理,希望对大家学习过程中有所帮助。...4、container_of 用到的知识点 剖析 4.1、({})的作用 ({})、第一个先说这个表达式,很多人可能懂,可能在很多地方见到这个表达式,但是自己却没有注意,这个表达式返回最后一个表达式的值...const __mptr;//表示__mptr的值不能改变 //和 const int * const __mptr; //表示__mptr不能改变而且指向的内容也不能改变 5、 container_of 剖析

70121

完全剖析 - Linux虚拟内存空间管理

所以,Linux 根据功能上的差异,来对虚拟内存空间进行管理。 今天,我们来介绍一下 Linux 对虚拟内存空间管理的细节。...Linux 根据功能上的差异,把整个虚拟内存空间划分为多个不同区间,称为 段。 我们先来看看 Linux 进程虚拟内存空间的布局图,如图 1 所示: ?...虚拟内存区 从上面的介绍可知,Linux 按照功能上的差异,把虚拟内存空间划分为多个 段。那么在内核中,是通过什么结构来管理这些段的呢? 答案就是:vm_area_struct。...我们通过图 2 来展示内核是怎么通过 vm_area_struct 结构来管理进程中的所有 段: ? 从上图可以看出,内核通过一个链表和一棵红黑树来管理进程中所有的 段。...通过上面的过程,内核就把应用程序的所有段加载到虚拟内存中。 总结 本文主要介绍了 Linux 内核是怎么加载应用程序,并且在虚拟内存中建立各个段的布局。

3.1K12

Apache Kafka内核深度剖析

文章主要包含以下内容: Kafka为什么快 Kafka为什么稳 Kafka该怎么用 该文章为开篇引导之做,后续会有对应的HBase,Spark,Kylin,Pulsar等相关组件的剖析。...对于这两个Cache,使用Linux的同学通常不会陌生,例如我们在Linux下执行free命令的时候会看到如下的输出: ?...操作系统将数据从磁盘拷贝到内核区的pagecache 用户程序将内核区的pagecache拷贝到用户区缓存 用户程序将用户区的缓存拷贝到socket缓存中 操作系统将socket缓存中的数据拷贝到网卡的...buffer上,发送数据 可以发现一次IO请求操作进行了2次上下文切换和4次系统调用,而同一份数据在缓存中多次拷贝,实际上对于拷贝来说完全可以直接在内核态中进行,也就是省去第二和第三步骤,变成这样: ?...如果kafka生产消费配合的好,那么数据完全走内存,这对集群的吞吐量提升是很大的。

55910

Android NDK开发完全剖析

arm-linux-androideabi-4.9 aarch64-linux-android-4.9 x86-4.9 x86_64-4.9 这其实是针对不同的CPU架构平台,我们熟知的是arm平台,Android...上面介绍完了不同架构的区别,现在可以看看有什么具体的交叉编译工具,可以选择arm平台进去看看: arm-linux-androideabi-gcc : 编译c文件的交叉编译器,和gcc类似,不同的是arm-linux-androideabi-gcc...arm-linux-androideabi-g++ : 编译cpp文件的交叉编译器 arm-linux-androideabi-addr2line : 反解出堆栈的工具,Android上的Native...crash堆栈都是通过addr2line反解出来的 arm-linux-androideabi-ld : 交叉链接器,可以将编译出来的文件链接成在arm平台上运行的文件 arm-linux-androideabi-readelf...hello.c,编译指令如下: $ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc

1.7K10

unity vr虚拟现实完全自学教程 pdf_ug80完全自学手册pdf

Sharder:用来处理大多数真实世界中的材质,如石头、玻璃等还可以用来处理皮肤,毛发; 了解着色器的相关渲染设置: 1.Opaque:默认的设置,适合渲染不透明的物体 2.Cutout:允许渲染带有完全透明的或者完全不透明的物体...如果做比较复杂的鸟瞰楼体,可以把楼体合并成一个物体变成多重材质,然后对楼体进行整体完全烘焙,这样可节省很多资源。...重拓扑技术操作简单,在建模软件中使用简单、连续的多边形完全覆盖原始模型的表面,在各主流建模软件中均可完成此工作。...在使用了PBR工作流程进行材质制作以后,物体可以在四种完全不同的光照环境下呈现出它应有的物理表现。 一个高品质且具备细节的场景往往决定了一个内容的第一印象,而模型是组成场景的基本元素。

3.7K20

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.2K32

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30
领券