操作系统(五)输入/输出(I/O)管理

I/O管理概述

I/O管理要完成哪些功能?

  • 状态跟踪,要能实时掌握外部设备的状态
  • 设备存取,要实现对设备的存取操作
  • 设备分配,在多用户环境下,负责设备的分配与回收
  • 设备控制,包括设备的驱动、完成和故障的中断处理

I/O 设备分类

IO设备被当做一种特殊的文件

根据使用特性分类

  • 人机交互式设备:鼠标,打印机
  • 网络通信设备:网络接口,调制解调器
  • 存储设备:外存,辅存

根据传输速率分类

  • 低速设备:键盘,鼠标
  • 中速设备:行式打印机,激光打印机
  • 高速设备:磁盘机,磁带机

根据信息交换单位分类

  • 块设备

    • 传输速率较高,可寻址(即可随机读/写任一块)

    • 常采用DMA方式

    • 数据传输的基本单位是“块”,如磁盘

  • 字符设备

    • 传输速率较慢,不可寻址
    • 常采用中断驱动方式
    • 数据传输的基本单位是字符,如鼠标、键盘

根据共享属性/设备分配方式分类

  • 共享设备

    • 在一段时间内允许多个进程同时访问的设备(并发访问)

    • 一般采用动态分配

    • 分配共享设备不会引起进程死锁

    • 共享设备必须是可随机访问和可寻址的设备【我想这个要求是从效率考虑的。假设磁盘只能顺序访问,那么同时打开磁盘上的两个文件,这切换的代价也太大了】

  • 独占设备(属于临界资源)

    • 一段时间内只允许一个用户(进程)访问的设备
    • 可采用动态分配和静态分配,一般采用静态分配
    • 分配独占设备可能引起进程死锁(动态分配)
  • 虚拟设备

    • 以SPOOLing方式使用外部设备,通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户(进程)同时使用

I/O 控制方式

更详细内容见计组

程序直接控制方式

从外存读取数据,CPU需要对外设状态进行循环检査,直到确定该字已经在O控制器的数据寄存器中。

存在问题

I/O 设备无法向 CPU 报告自己完成了 I/O 操作,所以只能处理机不断循环询问 I/O 设备是否完成,别的啥也不干了,CPU 和 I/O 设备只能串行工作,CPU 利用率极低,属于忙等方式

中断驱动 I/O 控制方式

CPU 与 I/O 设备并行工作,仅当输完一个数据时,才需 CPU 花费极短的时间去做些中断处理

以字(节)为单位进行 I/O 的,每当完成一个字(节)的 I/O 时,控制器便要向 CPU 请求一次中断,所以 I/O 中断方式主要用在键盘、键盘等中速设备

存在问题

不适用于高速设备,如果用于磁盘就太低效了,1KB 的数据需要中断 1K 次

直接存储器访问(DMA)方式

中断驱动 I/O 控制方式中,I/O 设备与内存之间的数据交换需要经过CPU中转,DMA 的基本思想是,在 I/O 设备和内存之间开辟一条**“直接的数据通路”**,彻底解放 CPU

“直接的数据通路”:DMA 的这条数据通路是逻辑上的,其实就是总线,不过 DMA 请求具有更高的响应性,CPU 需要礼让 DMA 请求

数据传输的基本单位是数据块,从设备直接送入内存(或者相反),仅在传送一个或多个(连续的)数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的

周期窃取

又叫周期挪用,是指利用CPU不访问 存储器的那些周期来实现DMA操作

存在问题

CPU 每发出一次 I/O 指令,只能读/写一个或多个连续的数据块(别管是几个,必须是连续的),希望进一步减少 CPU 的干预,于是有了通道控制方式

DMA与中断控制方式对比

在这里插入图片描述

I/O 通道控制方式

DMA 方式的进一步发展:

  • 把对一个数据块的读(或写)为单位的干预减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预
  • DMA 方式需要 CPU 来控制传输数据块的大小,传输的内存地址,而通道方式中,这些信息是由通道决定的
  • 一个 DMA 控制器对应一台设备,而一个通道可以对应多个 I/O 控制器(一个 I/O 控制器又可以控制多台同类型设备)

I/O 通道

一种硬件,可以视为“弱鸡版”CPU

通道程序

由一系列通道指令(或称为通道命令)所构成的,不属于机器指令,属于通道自己的指令,存放在主存中,由通道从主存中取出并由通道来执行

工作过程

CPU 向通道发送一条 I/O 指令(指明操作的设备、通道程序的地址)。通道在收到该指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,当通道完成了规定的 I/O 任务后(全部放入内存),向 CPU 发中断信号(实现了 CPU、通道和 I/O 设备三者的并行操作)

I/O 硬件

电子部件:设备控制器(I/O控制器)

设备控制器是计算机中的一个实体, 其主要职责是控制一个或多个 I/O 设备, 以实现 I/O 设备和计算机之间的数据交换。 它是 CPU 与 I/O 设备之间的接口, 它接收从 CPU 发来的命令,并去控制 I/O 设备工作。

设备控制器的(组成)基本功能

在这里插入图片描述
  • 控制寄存器:接收和识别 CPU 或通道发出的命令

    磁盘控制器可以接收 CPU 发来的 Read、 Write、 Format 等 15 条不同的命令

  • 数据寄存器:实现主机和外设的数据交换

    **CPU 与控制器之间:**通过数据总线,由 CPU 并行地把数据写入控制器,或从控制器中并行地读出数据(如果是 DMA 或通道方式的话,那就是“主存”与控制器)

    **控制器与设备之间:**设备将数据输入到控制器,或从控制器传送给设备

  • 状态寄存器:标识和报告设备的状态

    记录 IO 设备的状态,例如,仅当该设备处于发送就绪状态时,CPU才能启动控制器从设备中读出数据

  • 地址译码器:地址识别和设备选择

    每个设备控制器的寄存器都有唯一的地址,详见计组

    **内存映象I/O:**控制器中的寄存器与内存地址统编址,可以采用对内存进行操作的指令来对控制器进行操作

    **寄存器独立编址:**控制器中的寄存器使用单独的地址,需要设置专门的指令来操作控制器

  • 数据缓冲,使用缓冲器缓和CPU与IO设备的速度差异

  • 信号格式的转换,实现电平转换、串/并转换、模/数转换等

  • 差错控制,若传送中出现了错误,向 CPU 报告,CPU 将重新进行一次传送

机械部件:I/O设备

I/O 软件

I/O 系统的层次概述

在这里插入图片描述

先从宏观上理解下各层的功能作用

用户层软件,产生IO请求,比如给打印机一个打印任务;设备独立性软件,实现设备独立性是指用户在编程序时使用的设备与实际设备无关。用户程序中只指明IO使用的设备类型即可。意思就是,不管是磁盘还是打印机,用户都可以使用同一个比如 read/write 实现读写,设备独立性软件负责将其翻译成相应硬件的命令和参数。但是由于不同厂商生产的硬盘/打印机会有很大差异。所以需要设备驱动程序,负责把这些命令和参数转换成更具体的IO命令,发送给设备控制器。设备控制器再按照命令和参数完成相应任务,在完成任务后,控制器发出一个中断信号,请求CPU处理IO请求,所以有中断处理程序

用户层软件

实现与用户交互的接口,用户可直接通过在用户层提供的、与 I/O 操作有关的库函数,对设备进行操作

设备独立性软件

设备独立性软件。用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间。

主要功能

  • 执行所有设备的公有操作:对设备的分配与回收,建立逻辑设备名到物理设备名的映射关系等
  • 向用户层(或文件层)提供统一的调用接口(read/write)
  • 建立逻辑设备名到物理设备名的映射关系
  • 向设备驱动程序提供根据相应设备翻译后的命令和参数

设备独立性

实现设备独立性是指用户在编程序时使用的设备与实际设备无关,简单来说,就是应用程序不需要考虑使用的是磁盘还是打印机,对它们可以用统一的 read/write 命令实现读写。

为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。因此,系统须具有将逻辑设备名称转换为某物理设备名称的功能,这非常类似于存储器管理中所介绍的逻辑地址和物理地址的概念。在应用程序中所使用的是逻辑地址,而系统在分配和使用内存时,必须使用物理地址

逻辑/物理设备名映射

使用逻辑设备表 LUT 建立物理设备名到逻辑设备名的映射

如果整个系统中只设置一张 LUT,则不允许具有相同的逻辑设备名,如果为每个用户设置一张 LUT,则允许

设备独立性的好处?

  • 方便用户编程

  • 便于程序移植

  • 易于实现 I/O 重定向(例如,在调试一个应用程序时,可将程序的所有输出送往屏幕显示;而在程序调试完后, 如需正式将程序的运行结果打印出来, 此时便须将逻辑设备表中的显示终端改为打印机,而不必修改应用程序)

设备驱动(处理)程序

请求 I/O 的进程与设备控制器之间的一个通信和转换程序

主要功能

  • 接收由设备独立性软件发来的命令和参数,并将命令中的抽象要求(read,write)转换为具体要求,发出 I/O 命令(发送给设备控制器,如果是通道,驱动程序根据用户的 I/O 请求,获得通道程序)
  • 将由设备控制器发来的信号传送给上层软件,及时响应由控制器或通道发来的中断请求

中断处理程序

见计组

缓冲管理

磁盘高速缓存

利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息

磁盘高速缓存逻辑上属于磁盘,物理上是驻留在内存中的盘块(数据)

缓冲区

引入缓冲区的原因

  • 缓和 CPU 与 I/O 设备间速度不匹配的矛盾
  • 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制
  • 解决发收两端数据单元大小不匹配的问题

实现方法

  • 硬件缓冲器,成本太高(Cache)
  • 采用位于内存中的缓冲区(磁盘高速缓存)

单缓冲

双缓冲

循环缓冲

缓冲池

设备分配与回收

在多道程序环境下,系统中的设备供所有进程共享。为防止诸进程对系统资源的无序竞争,特规定系统设备不允许用户自行使用,必须由系统统一分配。【I/O调度】每当进程向系统提出I/O 请求时,只要是可能和安全的,设备分配程序便按照一定的策略,把设备分配给请求用户(进程)。

根据共享属性/设备分配方式分类

  • 共享设备

    • 在一段时间内允许多个进程同时访问的设备(并发访问)

    • 一般采用动态分配

    • 分配共享设备不会引起进程死锁

    • 共享设备必须是可随机访问和可寻址的设备【我想这个要求是从效率考虑的。假设磁盘只能顺序访问,那么同时打开磁盘上的两个文件,这切换的代价也太大了】

  • 独占设备(属于临界资源)

    • 一段时间内只允许一个用户(进程)访问的设备
    • 可采用动态分配和静态分配,一般采用静态分配
    • 分配独占设备可能引起进程死锁(动态分配)
  • 虚拟设备

    • 以SPOOLing方式使用外部设备,通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户(进程)同时使用

设备分配策略

设备分配原则

既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备隔离开。

设备分配方式

静态分配(独享分配策略)

主要用于对独占设备的分配,一次分配,进程“死”前终身享用,不会造成死锁

是否会出现死锁?这里王道资料和教材上产生了冲突

教材上说会出现死锁,而王道书上说不会出现死锁。来探究下,死锁的四个必要条件是否满足。

**互斥条件:**独占设备,显然满足。

**不剥夺条件:**根据描述,进程撤销前始终持有该设备,所以满足。

**环路等待条件:**这个也是可以满足的

请求和保持条件:根据描述“执行前一次性分配”,那么显然这个条件是不满足的,所以我认为是不会出现死锁

动态分配

主要用于共享设备(虚拟设备是指一台物理设备在采用虚拟技术后,可变成多台逻辑上的虚拟设备,虚拟设备也是可共享的设备)

按需分配,用完释放,较高的设备利用率,但有可能造成进程死锁


设备分配安全性

安全分配方式

当进程发出 I/O 请求后,便进入阻塞状态,直到其 I/O 操作完成时才被唤醒

不安全分配方式

进程在发出 I/O 请求后仍继续运行, 可以发出新的 I/O 请求, 仅当进程所请求的设备已被另一进程占用时, 请求进程才进入阻塞状态

SPOOLing 技术

为了缓和 CPU 的高速性与 I/O 设备低速性间的矛盾而引入了脱机输入、 脱机输出技术

SPOOLing 技术是来模拟脱机输入、输出的一种技术,能够提高设备的整体利用率

SPOOLing 系统的组成

在这里插入图片描述

SPOOLing技术如何用空间换时间的?

SPOOLing技术是一种以空间换时间的技术,我们很容易理解它牺牲了空间,因为它开辟了磁盘上的空间作为输入井和输出井,但它又如何节省时间呢?

磁盘是一种高速设备,在与内存交换数据的速度上优于打印机、键盘、鼠标等中低速设备。试想一下,若没有 SPOOLing技术,CPU要向打印机输出要打印的数据,打印杋的打印速度比较慢,CPU就必须迁就打印机,在打印机把数据打印完后才能继续做其他的工作,浪费了CPU的不少时间。在 SPOOLing技术下,CPU要打印机打印的数据可以先输出到磁盘的输出井中(这个过程由输出进程控制),然后做其他的事情。若打印机此时被占用,则SPOOLing系统就会把这个打印请求挂到等待队列上,待打印机有空时再把数据打印出来。向磁盘输岀数据的速度比向打印机输出数据的速度快,因此就节省了时间。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值