I/O优化知识

Linux内存知识:

内存和进程的关系:

创建进程时,系统会为每个进程分配一个4G大小的虚拟地址空间,且每个进程都有3G的用户空间和1G的内核空间

1.32位操作系统中表示一个地址需要32bit,因此最大可表示的地址数量为pow(2,32)
2.在同一时刻,一个cpu中只有一个进程在运行,cpu只能看见正在运行的进程对应的4G虚拟地址空间,进程间的切换会导致正在使用的虚拟地址的切换
3.3G用户空间的私有的,1G的内核空间是共有的,且内核空间与物理内存空间的映射是位移映射,直接是虚拟地址-3G(可以这么做是因为映射到物理内存却总是从最低地址0x00000000开始,这也解释了“1G的内核空间是共有的”),用户空间与物理内存空间的映射方式是分页或者分段的。
4.由于内存分页,操作系统去获取数据的时候一般是按照一页一页的去获取。面向内存友好的代码是可以充分利用这一机制来提高效率的,比如遍历二维数组时的方式

日常io操作所触发的流程

在这里插入图片描述
当我们在应用程序中调用read等操作时,首先到达VFS虚拟文件系统(这个是具体文件系统的接口层,为了屏蔽不同文件系统的差别),如果在此时命中了文件cache,则会直接获取到数据,否则会去请求磁盘io,读取磁盘的数据到内存,这一步效率和硬件效率有很大的关系,如图:
不同硬件效率
文件cache的说明:
在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个 Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用 memory map 方式访问时负责建立映射;VFS 负责 Page Cache 与用户空间的数据交换。而具体文件系统则一般只与 Buffer Cache 交互,它们负责在外围存储设备和 Buffer Cache 之间交换数据。
参考文章:
Linux中虚拟地址
Linux内存分页
磁盘io那些事(美团)
Linux内存
Linux内核的文件cache管理机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值