微信号:dellemc_tech

介绍:为戴尔易安信客户提供技术支持服务,为广大IT行业用户分享技术文章与行业信息。

Linux存储管理基础:如何理解I/O?

2017-04-17 17:11 EMC中国技术社区

Linux存储管理系统是如何处理I/O的?本文介绍了在操作系统的应用层和存储设备终端生成I/O的基本步骤和属性以及I/O类型。

 

通常定义的I/O(或Input/Output)是指在电脑和设备之间执行一次输入和/或输出操作的能力。输入设备可以是键盘或鼠标,基于输入设备,更新光标坐标的监视器可作为输出设备。在数据存储方面,I/O通常表示输入和输出磁盘设备的数据流(如:块设备)。

 

块设备是指能够处理文件系统和/或存储非易失性数据的设备(即:硬盘驱动,CD-ROM,软盘等)。在现代计算机系统里,块设备只能处理一次传输整个或多个块(或扇区)的I/O操作,通常为512字节长度(或2的指数倍)。块设备可以通过本地、网络或通过物理设备接口共享挂载的文件系统节点来访问。使用文件系统的优点是增加数据存储的组织结构特性使其可以同时被用户和操作系统(及其应用程序)访问。文件系统因众多的功能模块而日趋先进,用户能够管理冗余并在高性能环境下进行操作。没有文件系统,物理设备也只是一系列无意义的字节值。也将不会出现识别文件位置的源数据,包括文件相关信息如:文件大小、权限等。

 

回到I/O处理。有多种方式用于初始化存储设备的I/O处理。在操作系统的应用层和存储设备终端生成I/O的基本步骤包括:

  • 打开设备或文件

  • 设置读取或写入地址

  • 执行读或写操作

  • 重复执行步骤2和步骤3

  • 关闭设备或文件

 

尽管这些步骤看起来较为简单,但仍需采用很多变量以定义I/O处理的行为。这些变量通常称为I/O属性。配置I/O属性的其中一部分参数包括:

  • 传送大小 —— 需传送字节数或块数。

  • 寻址方式 —— 顺序、随机或混合。

  • 范围 —— 执行并维护I/O操作及其大小的区域。例如:磁盘设备的前100个块或创建长度小于1GB的文件。

  • 进程数量 —— 产生同时运行在磁盘设备之上的I/O的进程总数。包括最大主机数及对中断存储设备进行I/O操作的进程数。

  • 数据模式 —— 载入读写缓存并写入/读出磁盘设备的数据模式。

  • 时序 —— I/O生成的速率包括读写操作的不同耗时差异。

 

以上列出了构成I/O属性的大部分参数,I/O属性也包括了主机总线适配器HBA的类型及配置,SCSI层队列深度,SCSI磁盘的超时限制,如果磁盘设备位于阵列中,用户还需考虑磁盘设备的stripe/chunk大小甚至RAID类型等其他因素。理解I/O属性的构成在研发,设计和故障定位中显得尤为重要。

 

当用户空间发起一个需要读出/写入磁盘设备时,需进入内核空间以恢复该进程。Linux系统I/O分为以下两类:


1.文件I/O


对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符通常是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。当内核打开一个已有文件或创建一个新文件时,它返回一个文件描述符。

可用的文件I/O函数——打开文件,读文件,写文件等。UNIX系统中的大多数文件I/O只需用到5个函数:open、read、write、lseek以及close。它们是不带缓冲的I/O,都使用文件描述符。在使用read和write函数时,选定不同大小的缓冲区(保存读和写的数据),效率是不同的。存在一个最佳效率的缓冲区大小,就是缓冲区大小等于文件系统的块长。

 

2.标准I/O


对于标准I/O库,它们的操作则是围绕流进行的。当用标准I/O库打开或创建一个文件时,使用一个流与一个文件相关联。当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针。该对象通常是一个结构,它包含了标准I/O库为管理该流所需要的所有信息,包括:用于实际I/O的文件描述符,指向用于该缓冲区的指针、缓冲区的长度、当前在缓冲区中的字符数以及出错标志等。

预定义了三个标准I/O流,分别为三个文件指针stdin,stdout和stderr。


标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。它对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。


标准I/O提供三种类型的缓冲:全缓冲、行缓冲和不带缓冲。

1)全缓冲:直到缓冲区填满,才调用系统I/O函数。

2)行缓冲:直到遇到换行符\n才调用系统I/O函数。

3)无缓冲:灭有缓冲区,数据会立即读入或者输出到外存文件和设备上。



其它参考文章:

【存储入门必读】存储基础知识



更多精彩内容,请点击阅读原文”进行查看!

如何每天都能收到如此精彩的文章?

①点击右上角点击查看官方账号”→点击关注

②长按并识别下图中的二维码,直接访问EMC中文支持论坛


 
戴尔易安信技术支持 更多文章 极致性能存储DSSD的故事 如何收集EMC Unity系统Dump文件 【专家问答】神奇备份在哪里--RecoverPoint篇 联盟企业混合云 3.5:基础架构和操作管理指南 RAID 类型介绍
猜您喜欢 慕课网实战课程《Python玩转人工智能最火框架TensorFlow应用实践》 开源浏览器插件:GitHub 显示用户编程语言排名 Nginx与HAProxy在web应用中的比较 红黑树解法的why而非how 如何使用nodejs完成sms相关业务?