I/O设备

IO设备的类型

分为三类:人机交互类外部设备:打印机、显示器、鼠标、键盘等等。这类设备数据交换速度相对较慢,通常是以字节为单位进行数据交换的

存储设备:用于存储程序和数据的设备,如磁盘、磁带、光盘等。这类设备用于数据交换、速度较快。

网络通信设备:用于与远程设备通信的设备,如各种网络接口、调制解调器、其速度介于两者之间。

image.png                                           

IO控制方式

程序控制I/O:处理器代表一个进程给io模块发送一个io命令,该进程进入忙等待,直到操作完成

中断驱动I/O:处理器代表进程向io发送命令,如果来自进程的io指令是非阻塞的,那么处理器继续执行进程的后续指令。如果io指令时阻塞的,那么处理器执行来自操作系统的指令,将当前进程设置为阻塞态并且调度其他进程。

直接存储器访问(DMA):一个DMA模块控制内存和io模块之间的数据交换。为传送一块数据,处理器给DMA模块发送请求,并且只有当整个数据块传送结束后,它才能被中断。

 

DMA: 在io设备和内存之间开辟直接的数据交换通路,彻底解放CPU。有利于系统总线与存储器进行双向数据传送。其基本单位是数据块,整块数据的传送是在DMA控制器的控制下完成的,仅仅在传送一个或多个数据块的开始和结束的时候,才需要CPU干预。所传送的数据,也是直接从设备送入内存的,反之相同。

 

操作系统的IO设计

在设计io机制的时候,两个最重要的目标是效率和通用性。

 

本地外围设备的组织:硬件->调度和控制->设备I/O->逻辑I/O->用户进程

通信端口的组织:硬件->调度和控制->设备I/O->通信结构->用户进程

文件系统的组织:硬件->调度和控制->设备I/O->物理组织->文件系统->目录管理->用户进程

 

逻辑IO:逻辑io模块把设备当作一个逻辑资源来处理,它并不关心实际控制设备的细节。逻辑io模块代表用户进程管理的一般io功能,允许用户进程根据设备标识符以及诸如打开、关闭、读、写之类的简单命令与设备打交道。

 

设备IO:请求的操作和数据(缓冲的数据、记录等)被转换成适当的IO指令序列、通道命令和控制器命令。可以使用缓冲技术来提高利用率。

 

调度和控制:io操作的排队、调度实际上发生在这一层,处理中断、收集并报告io状态。这一层是与io模块和设备硬件真正发生交互的软件层。

 

image.png                                           

 

设备独立性: 用户在编程序时使用的设备与实际设备无关。一个程序独立于分配给它的某类设备的具体设备,即在用户程序中只需要指明IO使用的设备类型即可。 其优先包括:方便用户编程、使程序运行不受具体机器环境的限制、便于程序移植。

 

I/O缓冲

使用缓冲的原因

  1. 缓和CPU与IO设备间速度不匹配的矛盾
  2. 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
  3. 解决基本数据单元大小不匹配的问题
  4. 提高CPU与IO设备之间的并行性

 

缓冲是用来平滑IO需求的峰值的一种技术,但是当进程的平均需求大于io设备的服务能力的时候,缓冲再多也不能让io设备与这个进程一直并驾齐驱。但是在多道程序设计环境中,多种io活动和多种进程活动的时候,缓冲是提高系统效率和单个进程性能的一种方法。

 

缓冲

缓冲:在输入请求发出前就开始执行输入传送,并且在输出请求发出一段时间之后才开始执行输出传送。【预输入,缓输出】

 

面向块的设备:将信息保存在块中,块的大小是固定的,传送过程中一次传送一块。如磁盘和USB

面向流的设备:以字节流的方式输入输出数据,没有块结构。如终端、打印机、通信端口、鼠标等等。

 

单缓冲

当用户进程发出IO请求的时候,操作系统给该操作分配一个位于内存中系统部分的缓冲区。

 

面向块:输入传送的数据被放到系统缓冲区中,当传送完成的时候,进程把该块移到用户空间,并立即请求另一块。需要数据的设备或处理器从缓冲区中拿走数据。这样能够期望这块数据最终会被使用。

 

最终用时为MAX(C,T)+M。(c:处理器处理时间,m:数据传输到用户区的时间,t:输入到缓冲区的时间。)

加速比为: (T+C)/(MAX(C,T)+M)

 

优势在于能够提高系统速度,并且操作系统可以进行进程交换。但是增加了操作系统的逻辑复杂度。交换逻辑也会受到影响。

 

面向流:每次传送一行的方式或者每次传送一个字节的方式使用。传送行的方式输入要挂起,输出不用。传送字节的方式采用生产者/消费者模型。

 

双缓冲

也称缓冲交换。给操作系统分配两个系统缓冲区,在一个进程往一个缓冲区中传送数据(取数据)的同时,操作系统清空(或者填充)另一个缓冲区。

 

它的执行时间是MAX(C,T),加速比是 (T+C)/MAX(C,T)。 如果C<=T,则有可能使得面向块的设备全速运行,反之也能确保处理器的效率,不需要等待IO。因此性能能够有所提高,但是复杂性也提升了。

 

面向流:每次传送一行的io,用户进程不需要为输入输出挂起程序。对于每次传送一个字节的操作,双缓冲并没有特别的优势。都采用生产者/消费者模型。

image.png                                           

循环缓冲

如果该进程需要爆发式地执行大量的IO操作,仅仅有两个缓冲是不够的,在这种情况下,通常使用多于两个的缓冲区的方案来缓解不足。当使用两个以上的缓冲区的时候,这组缓冲区自身被当作循环缓冲区。

image.png                                           

 

缓冲池

由多个系统公共的缓冲区组成,缓冲区按其使用情况可以形成三个队列:空缓冲队列、装满输入数据的缓冲队列和装满输出数据的缓冲队列。还包括了四个缓冲区:收容输入数据、提取输入数据、收容输出数据、提取输出数据的工作缓冲区。

 

当输入程序需要输入数据的时候,从空缓冲队列对首使用一个空缓冲区,作为收容输入的工作缓冲区,然后装入数据,装满后再挂到输入队列队尾。当计算程序需要输入数据的时候,从输入队列取得一个缓冲区作为提取输入工作缓冲区,计算进程从中提取数据,数据用完后再放入到空缓冲队列。

 

磁盘调度

 

磁盘性能参数

寻道时间:磁头定位到磁道所需要的时间

旋转延迟:磁道定位之后,磁盘控制器开始等待,直到适当的扇区旋转到磁头处的时间。

存取时间:寻道时间+旋转延迟,即达到读或写的位置所需要的时间。

传输时间:磁头定位完成,磁头通过下面旋转的扇区,执行读操作或写操作所需要的时间。

image.png                                           

 

image.png                                           

 

总的存取时间=存取时间(寻道时间+旋转延迟)+传输时间

image.png                                           

 

计算:

image.png                                           

 

 

磁盘调度策略

 

 磁盘访问产生性能差异的原因可以追溯到寻道时间。如果扇区访问请求包括随机选择磁道,则性能就特别低。为提高性能,需要减少花费在寻道上的时间。

 

 

 

 
 

名称

说明

注释

RSS 

随机访问

用于分析和模拟

FIFO 

按顺序处理队列中的项目

最公平的调度,如果大量进程竞争一个磁盘,这种技术在性能上往往接近于随即调度。

PRI

根据进程优先级来

在磁盘队列管理之外控制,不能优化磁盘的利用率

LIFO

后进先出

局部性最好,资源利用率最高

SSTF 

最短服务时间优先,移动道数最少

利用率高,队列小

SCAN

仅沿一个方向移动,在途中满足请求。到达后反方向扫描

服务分布比较好

C-SCAN

限定在一个方向上,到达之后,回到起始段重新扫描

服务变化较低

N-step-SCAN

把请求队列分成长度为N的子队列,每一次SCAN扫描,如果此时由新请求,则放到新队列中

服务保证

FSCAN

两个子队列

负载敏感

 
 
 
 

image.png                                           image.png                                           

image.png                                           

硬盘高速缓存

一个硬盘高速缓存是内存中为磁盘扇区设置的一个缓冲区,包含有磁盘中某些扇区的副本。当出现一个请求某一特定扇区的IO请求时,首先进行检测,以确定该扇区是否在cache中。

 

主要考虑的问题有两个:

  1. 缓存数据与用户空间交换的问题:数据传送、共享内存指针
  2. 置换策略:LRU LFU

 

版权声明:本文为suntorlearning原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/suntorlearning/p/11039915.html