Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
IO详解 PDF 下载
匿名网友发布于:2024-05-05 10:08:03
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

IO详解 PDF 下载 图1

 

 

资料内容:

DMA和虚拟地址空间
在继续讲解之前,我们先讲解两个操作系统中的基本概念,⽅便后⾯我们对IO的理解。
现代操作系统都有⼀个叫做DMADirect memory access)的组件。这个组件是做什么的呢?
⼀般来说对内存的读写都是要交给CPU来完成的,在没有DMA的情况下,如果程序进⾏IO操作,那么所有的CPU
间都会被占⽤,CPU没法去响应其他的任务,只能等待IO执⾏完成。这在现代应⽤程序中是⽆法想象的。
如果使⽤DMA,则CPU可以把IO操作转交给其他的操作系统组件,⽐如数据管理器来操作,只有当数据管理器操作
完毕之后,才会通知CPUIO操作完成。现代操作系统基本上都实现了DMA
虚拟地址空间也叫做(Virtual address space),为了不同程序的互相隔离和保证程序中地址的确定性,现代计算
机系统引⼊了虚拟地址空间的概念。简单点讲可以看做是跟实际物理地址的映射,通过使⽤分段或者分⻚的技术,
将实际的物理地址映射到虚拟地址空间。
 
对于上⾯的IO的基本流程图中,我们可以将系统空间的buffer和⽤户空间的buffer同时映射到虚拟地址空间的同⼀
个地⽅。这样就省略了从系统空间拷⻉到⽤户空间的步骤。速度会更快。
同时为了解决虚拟空间⽐物理内存空间⼤的问题,现代计算机技术⼀般都是⽤了分⻚技术。
分⻚技术就是将虚拟空间分为很多个page,只有在需要⽤到的时候才为该page分配到物理内存的映射,这样物理
内存实际上可以看做虚拟空间地址的缓存。
虚拟空间地址分⻚对IO的影响就在于,IO的操作也是基于page来的。
⽐较常⽤的page⼤⼩有:1,024, 2,048, 4,096 bytes
 
IO的分类
IO可以分为File/Block IOStream I/O两类。
对于File/Block IO来说,数据是存储在disk中,⽽disk是由filesystem来进⾏管理的。我们可以通过filesystem来定
file的名字,路径,⽂件属性等内容。
filesystem通过把数据划分成为⼀个个的data blocks来进⾏管理。有些blocks存储着⽂件的元数据,有些block
储着真正的数据。
最后filesystem在处理数据的过程中,也进⾏了分⻚。filesystem的分⻚⼤⼩可以跟内存分⻚的⼤⼩⼀致,或者是
它的倍数,⽐如 2,048 或者 8,192 bytes等。
并不是所有的数据都是以block的形式存在的,我们还有⼀类IO叫做stream IO
stream IO就像是管道流,⾥⾯的数据是序列被消费的。
 
IONIO的区别
java1.0中的IO是流式IO,它只能⼀个字节⼀个字节的处理数据,所以IO也叫做Stream IO
NIO是为了提升IO的效率⽽⽣的,它是以Block的⽅式来读取数据的。
Stream IO中,input输⼊⼀个字节,output就输出⼀个字节,因为是Stream,所以可以加上过滤器或者过滤器
链,可以想想⼀下web框架中的filter chain。在Stream IO中,数据只能处理⼀次,你不能在Stream中回退数据。
Block IO中,数据是以block的形式来被处理的,因此其处理速度要⽐Stream IO快,同时可以回退处理数据。但
是你需要⾃⼰处理buffer,所以复杂程度要⽐Stream IO⾼。
⼀般来说Stream IO是阻塞型IO,当线程进⾏读或者写操作的时候,线程会被阻塞。
NIO⼀般来说是⾮阻塞的,也就是说在进⾏读或者写的过程中可以去做其他的操作,⽽读或者写操作执⾏完毕之
后会通知NIO操作的完成。
IO中,主要分为DataOutPutDataInput,分别对应IOoutin
DataOutPut有三⼤类,分别是WriterOutputStreamObjectOutput