磁盘I/O

原文路径:http://blog.csdn.net/guolong1983811/article/details/50421857

IO 系统的分层:

 

  1.    三层结构

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

 

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

 

对应了上图的 File System 和 Buffer Cache 。

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

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

 

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

 

对应上图的 Vol Mgmt 。

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

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

 

对应上图的 Device Driver 、 IO Channel 和 Disk Device

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

 

    2. Logical IO vs Physical IO

 

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

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

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

 

说说IO(二)- IO模型

这部分的东西在网络编程经常能看到,不过在所有 IO 处理中都是类似的。

IO 请求的两个阶段 

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

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

       举例说就是排队 和服务。

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

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

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

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

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

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

 

 

按照 Unix 的 5 个 IO 模型划分

 

  • 阻塞 IO
  • 非阻塞 IO
  • IO 复用
  • 信号驱动的 IO
  • 异步 IO

从性能上看,异步 IO 的性能无疑是最好的。

 

各种 IO 的特点

  • 阻塞IO :使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。 Java 的 BIO 使用这种方式,问题带来的问题很明显,一个 Socket 需要一个独立的线程,因此,会造成线程膨胀。
  • 非阻塞IO 采用轮询方式,不会形成线程的阻塞。 Java 的 NIO 使用这种方式,对比 BIO 的优势很明显,可以使用一个线程进行所有 Socket 的监听( select )。大大减少了线程数。

 

  • 同步IO :同步 IO 保证一个 IO 操作结束之后才会返回,因此同步 IO 效率会低一些,但是对应用来说,编程方式会简单。 Java 的 BIO 和 NIO 都是使用这种方式进行数据处理。
  • 异步IO :由于异步 IO 请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步 IO 相当于把一个IO 拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说增加了复杂性。但是异步 IO 的性能是所有很好的,而且异步的思想贯穿了 IT 系统方方面面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值