14.I/O系统

I/O系统

计算机的两大任主要工作是处理和I/O。

计算机的操作系统I/O功能是,管理和控制I/O操作和I/O设备。

1.概述

因为I/O设备的功能与速度差异很大,所以需要采用不同的方法来控制设备。
这些方法构成了I/O子系统,以便内核的其他部分不必涉及I/O设备管理的复杂性。

为了封装各种设备的细节与特点,操作系统内核采用设备驱动程序模块,设备驱动程序(device driver)为I/O子系统提供了统一的设备访问接口,就像系统调用为应用程序与操作系统之间提供的标准接口。

2.I/O硬件

尽管I/O设备的种类如此之多,但是仅需少数几个概念,就能理解设备是如何连接以及软件如何控制硬件。

端口:设备与计算机的通信通过一个连接点或端口
控制器:控制器是可以操作端口、总线或设备的一组电子器件。(如,串行端口控制器、SCSI总线控制器)。
I/O端口寄存器:I/O端口通常由四个寄存器组成,即状态、控制、数据输入、数据输出寄存器

主机与控制器之间的交互可以有以下三种方式:

  1. 轮询
  2. 中断
  3. DMA(直接内存访问)

每种设备都有自己的功能集、控制位的定义及与主机交互的协议,这些都是不同的。
如何设计操作系统,以便新的外设可以连接到计算机而不必重写操作系统?
设备种类繁多,操作系统又是如何提供一个统一、方便的应用程序的I/O接口?

3.应用程序I/O接口

本节讨论操作系统的架构与接口,以便按统一的方式来处理I/O设备。

涉及到抽象、封装与软件分层。
设备驱动程序一方面可以定制以适应各种设备,另一方面也提供一组标准接口。

14.I/O系统_第1张图片
设备驱动程序层的作用是,为内核I/O子系统隐藏设备控制器之间的差异。

I/O子系统与硬件的分离简化了操作系统开发人员的工作。
也有利于硬件制造商,它们可以设计新的硬件与现有主机控制器接口兼容,也可以编写设备驱动程序已将新的硬件连到流行的操作系统。

这样可以将新的外设连到计算机,而无需等待操作系统供应商来开发支持代码。

4.内核I/O子系统

由于I/O设备种类繁多,功能和传输速率差异巨大,需要多种方法来进行设备控制。这些方法共同组成了操作系统内核的I/O子系统,它将内核的其他方面从繁重的I/O设备管理中解放出来。

I/O核心子系统提供的服务主要有I/O调度、缓冲与高速缓存、设备分配与回收、假脱机、设备保护和差错处理等。

(1)I/O调度
应用程序执行系统调用的顺序很少是最佳的。

I/O调度可以改善系统整体性能,减少I/O完成所需的平均等待时间。

就比如说现在磁盘的磁头在磁盘的开始的位置,三个应用程序向这个磁盘发布阻塞的读调用,应用程序1需要磁盘结束部分的块,应用程序2需要磁盘开始部分的块,应用程序3需要磁盘中间部分的块。操作系统如果按照2、3、1的顺序进行处理,则可以降低磁头所需要移动的距离。按照这种方式来重新排列服务顺序就是I/O调度的核心。

操作系统为每个设备维护一个请求等待队列。当应用程序发出阻塞I/O的系统调用时,该请求被添加到相应设备的请求队列。
I/O调度程序重新安排队列顺序,以便提高系统的总体效率和应用程序的平均响应时间。

I/O调度是I/O子系统提高计算机效率的一种方法。

(2)缓冲
缓冲区(buffer)是一块内存区域,用于保存两个设备之间或在设备与应用程序之间传输的数据。
缓冲区的 3 个作用:

  1. 处理数据流的生产者与消费者之间的速度不匹配。
  2. 协调传输大小不一数据的设备。
  3. 支持应用程序I/O的复制语义。

(3)缓存
缓存(cache)是保存数据副本的高速内存区域。

  1. CPU的Cache,它中文名称是高速缓冲存储器,读写速度很快,几乎与CPU一样。由于CPU的运算速度太快,内存的数据存取速度无法跟上CPU的速度,所以在cpu与内存间设置了cache为cpu的数据快取区。当计算机执行程序时,数据与地址管理部件会预测可能要用到的数据和指令,并将这些数据和指令预先从内存中读出送到Cache。一旦需要时,先检查Cache,若有就从Cache中读取,若无再访问内存,现在的CPU还有一级cache,二级cache。简单来说,Cache就是用来解决CPU与内存之间速度不匹配的问题,避免内存与辅助内存频繁存取数据,这样就提高了系统的执行效率。
  2. 磁盘也有cache,硬盘的cache作用就类似于CPU的cache,它解决了总线接口的高速需求和读写硬盘的矛盾以及对某些扇区的反复读取。

缓存和缓冲功能不同,但是有时一个内存区域可以用于两个目的。

区别
Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。

Cache的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。

简单来说就是buffer偏重于写,而cache偏重于读。
14.I/O系统_第2张图片
(4)假脱机[ spool ]与设备预留
假脱机(spool)是保存设备输出的缓冲区。这些设备,如打印机,不能接收交叉的数据流。是操作系统中釆用的一项将独占设备改造成共享设备的技术。

虽然打印机只能一次打印一个任务,但是多个应用程序可能希望并发打印输出,而不能让它们的输出混到一起。操作系统通过拦截所有打印输出,来解决这一问题。

应用程序的输出先是假脱机到一个单独的磁盘文件。当应用程序完成打印时,假脱机系统排序相应的假脱机文件,以便输出到打印机。

假脱机系统的组成
14.I/O系统_第3张图片
输入井和输出井
在磁盘上开辟出的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输 入的数据。输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。

输入缓冲区和输出缓冲区
在内存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送 到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送到输出设备。

输入进程和输出进程
输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再 送到输入井。当CPU需要输入数据时,直接将数据从输入井读入内存。输出进程模拟脱机 输出时的外围控制机,把用户要求输出的数据先从内存送到输出并,待输出设备空闲时,再 将输出井中的数据经过输出缓冲区送到输出设备。

共享打印机是使用SPOOLing技术的一个实例,这项技术已被广泛地用于多用户系统和 局域网络中。当用户进程请求打印输出时,SPOOLing系统同意为它打印输出,但并不真正 立即把打印机分配给该用户进程,而只为它做两件事:

  1. 由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中。
  2. 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入 其中,再将该表挂到请求打印队列上。

5.I/O请求转成硬件操作

操作系统是如何将应用程序请求连到网络线路或特定的磁盘扇区。
14.I/O系统_第4张图片

你可能感兴趣的:(《操作系统概念》)