1. 三层结构

磁盘(存储)、VM(卷管理)和文件系统。专有名词不好理解,打个比方说:磁盘就相当于一块待用的空地;LVM相当于空地上的围墙(把空地划分成多个部分);文件系统则相当于每块空地上建的楼房(决定了有多少房间、房屋编号如何,能容纳多少人住);而房子里面住的人,则相当于系统里面存的数据。

  • 文件系统—数据如何存放?

File System(文件系统):解决了空间管理的问题,即:数据如何存放、读取。

Buffer Cache:解决数据缓冲的问题。对读,进行cache,即:缓存经常要用到的数据;对写,进行buffer,缓冲一定数据以后,一次性进行写入。

  • VM—磁盘空间不足了怎么办?

VM其实跟IO没有必然联系。他是处于文件系统和磁盘(存储)中间的一层。VM屏蔽了底层磁盘对上层文件系统的影响。当没有VM的时候,文件系统直接使用存储上的地址空间,因此文件系统直接受限于物理硬盘,这时如果发生磁盘空间不足的情况,对应用而言将是一场噩梦,不得不新增硬盘,然后重新进行数据复制。而VM则可以实现动态扩展,而对文件系统没有影响。另外,VM也可以把多个磁盘合并成一个磁盘,对文件系统呈现统一的地址空间,这个特性的杀伤力不言而喻。

  • 存储—数据放在哪儿?如何访问?如何提高IO速度?

数据最终会放在这里,因此,效率、数据安全、容灾是这里需要考虑的问题。而提高存储的性能,则可以直接提高物理IO的性能

2. Logical IO vs Physical IO

逻辑IO是操作系统发起的IO,这个数据可能会放在磁盘上,也可能会放在内存(文件系统的Cache)里。

物理IO是设备驱动发起的IO,这个数据最终会落在磁盘上。

逻辑IO和物理IO不是一一对应的。

IO请求的两个阶段

等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。

使用资源阶段:真正进行数据接收和发生。

       举例说就是排队服务。

 等待数据阶段,IO分为阻塞IO和非阻塞IO。

       阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

       非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用

 使用资源阶段,IO分为同步IO和异步IO。

       同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。

       异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。

最新文章

  1. 使用NetBeans、Eclipse阅读JDK源码
  2. dedecms 模板静态化
  3. HDU2471_History of Languages
  4. Java 8 Optional类深度解析
  5. Python 基础语法(四)
  6. [原创]谷歌插件 - YE启动助手(YeLauncher)
  7. Cassandra1.2文档学习(13)—— 数据读取
  8. mongodb使用mongoose分组查询
  9. Android代码中使用Ping命令
  10. 详细解说Android权限在安卓开发中
  11. - Shell - sort处理大文件(页 1) - ChinaUnix.net
  12. High Performance Browser Networking - TCP UDP TLS
  13. INI文件的写入与读取
  14. dx.jar文件问题,有没有同学知道怎么解决呀,这一步没法解决,后面就没办法跟着做了
  15. navicat for mysql 注册码,简简单单,一个搞定(蔡军帅亲测有效)
  16. 并发编程---线程---开启方式---进程线程的区别----Thread的其他属性
  17. SSMS登记密码清除
  18. gradle tool升级到3.0注意事项
  19. Codeforces 379F New Year Tree 树的直径的性质推理
  20. MySQL 高级查询操作

热门文章

  1. 59.关系型与document类型数据模型对比
  2. 【Codeforces 1118D1】Coffee and Coursework (Easy version)
  3. jsp之${CTX}理解
  4. R - Milking Time DP
  5. MYSQL中有关表的简单操作
  6. 怎样编译和安装memcached
  7. ChargeSystem——One,Two,Three
  8. C 语言宏快速入门
  9. jquery动态创建form表单
  10. 【C语言】模拟实现memmove函数(考虑内存重叠)