linux的IO

前言

学习自用,文末的参考资料都是好文,这篇还得慢慢补充

正文

linux IO,首先应该看一下linux IO涉及到的层次图,

对于read系统调用在内核的处理,如上图所述(TODO),经过了VFS、具体文件系统,如ext2、页高速缓冲存层、通用块层、IO调度层、设备驱动层、和设备层

为了方便,我们暂时只讨论上面的三部分,应用层,内核的page cache,负责IO调度的block layer

加这些层是为了一个缓冲,用户空间的层是为了减少用户态写入读出跳转内核态太频繁,而内核的page cache也是因为缓冲磁盘寻道时间,而mmap+write就是直接把这个区域映射到用户空间从而可以直接写入

block layer则是负责整理IO请求,即我们操作系统里学到的IO调度算法,block layer可以看成是DMA和硬件组成;

然后讲下常用的API

最常见的read 和write,如果是默认打开文件open的方式,一次read/write都会用到全部缓存,如果是open的时候传入了其它flag就另当别论了

还可以采用mmap+write的方式,这样的话可以忽略应用层的buffer直接写进内存中(这个mmap的空间估计能和page cache合并),不过每次写入内存都会陷入内核态,如果是太频繁的读写也会导致内核切换的开销太大,这正是用用户层buffer的原因

还有个问题是mmap会有安全性的问题,其他进程可能会写到这个位置而引起SIGBUS(这个不是隔离的吗,mmap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值