文件系统IO分为DirectIO和BufferIO,其中BufferIO也叫Normal IO。

1. 缓存IO

缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。

读操作:操作系统检查内核的缓冲区有没有需要的数据,如果已经缓存了,那么就直接从缓存中返回;否则从磁盘中读取,然后缓存在操作系统的缓存中。

写操作:将数据从用户空间复制到内核空间的缓存中。这时对用户程序来说写操作就已经完成,至于什么时候再写到磁盘中由操作系统决定,除非显示地调用了sync同步命令(详情参考《【珍藏】linux 同步IO: sync、fsync与fdatasync》)。

缓存I/O的优点:1)在一定程度上分离了内核空间和用户空间,保护系统本身的运行安全;2)可以减少读盘的次数,从而提高性能

缓存I/O的缺点:在缓存 I/O 机制中,DMA 方式可以将数据直接从磁盘读到页缓存中,或者将数据从页缓存直接写回到磁盘上,而不能直接在应用程序地址空间和磁盘之间进行数据传输,这样,数据在传输过程中需要在应用程序地址空间(用户空间)和缓存(内核空间)之间进行多次数据拷贝操作,这些数据拷贝操作所带来的CPU以及内存开销是非常大的。

2. 直接IO

直接IO就是应用程序直接访问磁盘数据,而不经过内核缓冲区,这样做的目的是减少一次从内核缓冲区到用户程序缓存的数据复制。比如说数据库管理系统这类应用,它们更倾向于选择它们自己的缓存机制,因为数据库管理系统往往比操作系统更了解数据库中存放的数据,数据库管理系统可以提供一种更加有效的缓存机制来提高数据库中数据的存取性能。

直接IO的缺点:如果访问的数据不在应用程序缓存中,那么每次数据都会直接从磁盘加载,这种直接加载会非常缓存。通常直接IO与异步IO结合使用,会得到比较好的性能。(异步IO:当访问数据的线程发出请求之后,线程会接着去处理其他事,而不是阻塞等待)

下图分析了写场景下的DirectIO和BufferIO:

参考:

Linux 中直接 I/O 机制的介绍:http://www.ibm.com/developerworks/cn/linux/l-cn-directio/

转载于:https://www.cnblogs.com/youngerchina/p/5624462.html

磁盘IO:缓存IO与直接IO相关推荐

  1. java io 缓存读取_Java 文件IO写入读取四种方法

    第一种:字节流 FileInputStream  FileOutputStream 1.1 读取操作 //先创建一个和硬盘连接的流(打通硬盘和内存的通道) FileInputStream fis = ...

  2. linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput

    标准IO开发 前面分析的文件IO编程都是基于文件描述符的.这些都是基本的IO控制,是不带缓存的. 这里要讨论的IO操作是基于流缓冲的,它是符合ANSIC的标准IO处理. 标准IO提供流缓冲的目的是尽可 ...

  3. day10--协成\异步IO\缓存

       协成(Gevent) 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.CPU只认识线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将 ...

  4. 09、IO流—File类与IO流

    文章目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三 ...

  5. 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  6. python中io.textio_关于python的IO读写的二三事

    IO读写内情 关于io读写,可以分为缓存io与直接io两种.而前者缓存io是当前最为常用的一种io机制:即使用缓冲区buffer(内存中的一块地址),来防止对硬件的频繁访问,由此减少读写操作的时间消耗 ...

  7. mysql io模型_5种网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  8. 【学习笔记】JAVA IO与NIO(new IO)的对比与不同IO模型的理解

    JAVA IO 分类: 几种IO 模型 1. 阻塞 IO 模型 2. 非阻塞 IO 模型 JAVA NIO 多路复用 IO 模型(即Java中的NIO) JAVA IO 思维导图: 分类: 按照流的方 ...

  9. java io 模型_五种 IO 模型

    IO即为Input.Output,对计算机来说,我们使用键盘鼠标给计算机指令就是一种输入,计算机将我们键盘输入的文字显示到显示器即是一种输出.或者写博客时将计算机从键盘接收到的文字信息发送到平台上即为 ...

  10. python io多路复用框架_python之IO多路复用

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别? 不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

最新文章

  1. Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
  2. Silverlight Tools Beta 2 For Vs2008 中文版装不上的原因
  3. 服务差,信号不好真的是联通用户下滑的原因吗?
  4. Servlet WEB过滤器
  5. 华夫饼为什么不松软_用了3年的华夫饼配方,掌握这个配比,外酥里软超,比蛋糕好吃...
  6. 二叉搜索树的插入与删除图解
  7. 内连接、左外连接、右外连接、交叉连接区别
  8. 利用Group Conv在单个CNN中实现集成学习
  9. 组合数学及其应用——鸽巢原理
  10. html 数据库 编写学生表,【数据库】用sql语句创建学生表如何做
  11. SQL Server数据库复制
  12. dos命令怎样进入计算机,怎么进DOS命令的方法
  13. 第10章 十字消除(《C和C++游戏趣味编程》配套教学视频)
  14. 大数据智能分析的未来发展趋势
  15. 计算机双硬盘怎么启动第二块硬盘,电脑装两个硬盘怎么设置主从盘_双硬盘设置主盘的方法...
  16. 基于健康档案的区域卫生信息平台-总体架构图
  17. 【zhailu】国外产品经理到底在做些什么?【转载内容】
  18. 计算机专业毕业实习心得
  19. tdd干扰波形_TDD-LTE上行干扰定位方法及排查指导手册.doc
  20. 开发者和工程师的区别?

热门文章

  1. C语言-结构体内存对齐
  2. C/C++查找一定范围内的素数(筛法)
  3. Sharepoint学习笔记—DebugTroubleShooting--不同调试对象的Attach方式
  4. 网页中层或菜单被Flash挡住的解决办法
  5. kafka logstash elk
  6. 用过C#的朋友可能认为它是一种十分安全的语言,其实C#也可以做到经典的缓冲区溢出。 本文章将用一个实例来描述C#究竟是如何发生缓冲区溢出的! 首先建立一个C# Console工程,并开启工程的“允许
  7. 数据结构03栈和队列
  8. restTemplate使用和踩坑总结
  9. axios异步请求数据的简单使用
  10. 《Android 应用案例开发大全(第二版)》——导读