Linux系统IO模型

作者: CPlusPlus图像处理 | 来源:发表于2019-04-09 22:44 被阅读12次

    1、linux文件系统和缓存

    文件系统接口

    文件系统—一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问。

    存储层次

    文件系统缓存

    主存(通常时DRAM)的一块区域,用来缓存文件系统的内容,包含各种数据和元数据。

    2、深入Linux文件IO机制

    标准文件访问方式

    标准文件IO流程图

    直接IO

    实现方式

    open + O_DIRECT = 绕过内核缓冲区的直接访问,便有效避免了CPU和内存的多余时间开销。

    直接绕过IO绕过缓存,不会出现write成功数据丢失的情况,血案不再重演。

    注意:直接IO的缺点就是如果访问的数据不在应用程序缓存中,那么每次数据都会直接从磁盘进行加载,这种直接加载会非常缓慢!

    通常直接IO跟异步IO结合使用会得到较好的性能。

    缓存同步

    为了保证磁盘系统与缓冲区中内容一致,Linux系统提供了sync、fsync和fdatasync三个函数。

    函数描述:向打开的文件写数据;成功返回写入的字节数,若出错,返回-1。

    头文件:

    include <unistd.h>

    int fsync(int fd);

    int fdatasync(int fd);

    void sync(void);

    说明:

    sync ---将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。

    fsync --- 将fd对应的文件的块缓冲区立即写入磁盘,并等待实际写磁盘操作结束返回。

    fdatasync --- 类似fsybc,但只影响文件的数据部分。除数据外,fsync还会同步更新文件属性。

    解决之道

    更深一层次的思考

    1、如何设计IO读写的尺度,提高IO的效率

    2、如何理解随机IO和顺序IO

    3、高并发如何提高IO的效率和并发处理能力。

    相关文章

      网友评论

        本文标题:Linux系统IO模型

        本文链接:https://www.haomeiwen.com/subject/fsbwiqtx.html