导图社区 输入输出(I O)管理-计算机操作系统第5章
数据/控制/状态寄存器可能有多个,且这些寄存器要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
编辑于2022-10-18 23:39:50 江苏省第五章 输入输出(I/O)管理 计算机操作系统 王道考研系列
I/O设备基础
概念和分类
什么是I/O设备
将数据Input/Output(输入/输出)计算机的外部设备
按使用特性分类
人机交互类外部设备
存储设备
网络通信设备
按传输速率分类
低速设备
中速设备
高速设备
按信息交换的单位分类
块设备(传输速率高,可寻址)
字符设备(传输速率较慢,不可寻址,常采用中断驱动方式)
I/O控制器
I/O设备的电子部件
主要功能
接受和识别CPU发出的命令(要有控制寄存器)
向CPU报告设备的状态(要有状态寄存器)
数据交换(要有数据寄存器,暂存输入/输出的数据)
地址识别(由I/O逻辑实现,为了区分各个寄存器)
组成
CPU与控制器之间的接口(实现控制器与CPU之间的通信)
I/O逻辑(负责接收和识别CPU发出的命令,并向设备发出命令)
控制器与设备之间的接口(实现控制器与设备之间的通信)
注意
1.一个I/O控制器可能会对应多个设备
2.数据/控制/状态寄存器可能有多个,且这些寄存器要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址
两种寄存器编址方式
内存映射I/O
控制器中的寄存器与内存统一编址
可以采用对内存进行操作的指令来对控制器进行操作
寄存器独立编制
控制器中的寄存器使用单独的地址
需要设置专门的指令来操作控制器
I/O控制方式
程序直接控制方式
Keyword:轮询
完成一次读/写操作的流程
CPU干预频率
很频繁,1/O操作开始之前、完成之后需要CPU介入,并且在等待l/O完成的过程中CPU需要不断地轮询检查
数据传输的单位
每次读/写一个字
数据的流向
读操作(数据流入):I/O设备→CPU(指CPU的寄存器)→内存
主要优缺点
优点
实现简单,在读/写指令之后,加上实现循环检查的一系列操作即可
缺点
CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低
中断驱动方式
引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待l/O的进程(或其他进程)的运行环境,然后继续执行
注意
1.CPU会在每个指令周期的末尾检查中断
2.中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定的时间开销的,可见,如果中断的发生频率太高,也会降低系统性能
完成一次读/写操作的流程
CPU干预频率
每次I/O操作开始之前、完成之后需要CPU介入,等待I/O完成的过程中CPU可以切换到别的进程执行
数据传输的单位
每次读/写一个字
数据的流向
读操作(数据流入):I/O设备→CPU→内存
主要优缺点
优点
与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询,CPU和I/O设备可并行工作,CPU利用率得到明显提升
缺点
每个字在I/O设备与内存之间的传输,都需要经过CPU,而频繁的中断处理会消耗较多的CPU时间
直接存储器存取/DMA方式
DMA控制器
注意
DMA设备从磁盘读入数据时候还是一个字一个字读入的
完成一次读/写操作的流程
CPU干预频率
仅在传送一个或多个数据的开始和结束时,才需要CPU干预
数据传输的单位
每次读/写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)
数据的流向
读操作(数据流入):I/O设备→内存
主要优缺点
优点
数据传输以“块”为单位,CPU介入频率进一步降低,数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升
缺点
CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块
通道控制方式
通道
一种硬件,可以理解为是“弱鸡版的CPU”
通道程序可以识别并执行一系列通道指令
完成一次读/写操作的流程
CPU干预频率
极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预
数据传输的单位
每次读/写一组数据块
数据的流向
读操作(数据流入):I/O设备→内存
主要优缺点
优点
CPU、通道、I/O设备可并行工作,资源利用率很高
缺点
实现复杂,需要专门的通道硬件支持
I/O软件层次结构
用户层软件
实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作
用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务
设备独立性软件
又被称为设备无关性软件
主要实现的功能
1.向上层提供统一的接口(如read/wirte系统调用)
2.设备的保护
原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样
3.差错处理
对一些设备的错误进行处理
4.设备的分配与回收
5.数据缓冲区管理
可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
6.建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序
两种方式管理逻辑设备表
整个系统只设置一张LUT,只适用于单用户操作系统
为每个用户设置一张LUT,适用于多用户操作系统,系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中
设备的驱动程序
主要负责对硬件设备的具体控制,将上层发出的一系列命令转化为特定设备“能听得懂”的一系列操作
注:驱动程序一般会以一个独立进程的方式存在
中断处理程序
当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行
理解并记住I/O软件各个层次之间的顺序,要能够推理判断某个处理应该是在哪个层次完成的(最常考的是设备独立性软件、设备驱动程序这两层。只需理解一个特点即可:直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的)
输入/输出应用程序接口&设备驱动程序接口
输入/输出应用程序接口
字符设备接口
get/put系统调用:向字符设备读/写一个字符
块设备接口
read/write系统调用:向块设备的读写指针位置读/写多个字符
seek系统调用:修改读写指针位置
网络设备接口
又称“网络套接字(socket)接口”
socket系统调用:创建一个网络套接字,需指明网络协议(TCP?UDP?)
bind:将套接字绑定到某个本地端口
connect:将套接字连接到远程地址
read/write:从套接字读/写资源
什么是阻塞/非阻塞I/O
阻塞I/O
应用程序发出I/O系统调用,进程需转为阻塞态等待
Eg:字符设备接口——从键盘读入一个字符get
非阻塞I/O
应用程序发出I/O系统调用,系统调用后可迅速返回,进程无需阻塞等待
Eg:块设备接口——往磁盘写数据write
设备驱动程序接口
I/O核心子系统
知识总览
I/O调度
用某种算法确定一个好的顺序来处理各个I/O请求
Eg:磁盘调度...
设备保护
操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限
在UNIX系统中,设备被看作是一种特殊的文件
假脱机技术
基本概念
引入了脱机输入/输出技术(用磁带完成)
外围控制机+更高速的设备——磁带
作用:缓解设备与CPU的速度矛盾,实现预输入、缓输出
“假脱机技术”,又称“SPOOLing技术”是用软件的方式模拟脱机技术
实现原理
输入和输出并
模拟脱机输入/输出时的磁带
输入进程和输出进程
模拟脱机输入/输出时的外围控制机
输入缓冲区和输出缓冲区
内存中的缓冲区,输入、输出时的“中转站”
共享打印机的原理分析
独占式设备——只允许各个进程串行使用的设备,一段时间上只能满足一个进程的需求
共享设备——允许多个进程“同时”使用的设备,可以同时满足多个进程的需求
用SPOOLing技术将独占式的打印机“虚拟”成共享打印机
设备的分配与回收
设备分配时应考虑的因素
设备的固有属性
独占设备
一个时段只能分配给一个进程
共享设备
可同时分配给多个进程使用,各进程往往是宏观上同时共享使用设备,而微观上交替使用
虚拟设备
采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用
设备分配算法
先来先服务
优先级高者优先
...
设备分配中的安全性
安全分配方式
为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒
优点
破坏了“请求和保持”条件,不会死锁
缺点
对于一个进程来说,CPU和I/O设备只能串行工作
不安全分配方式
进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求,只有某个I/O请求得不到满足时才将进程阻塞
优点
进程的计算任务和I/O任务可以并行处理,使进程迅速推进
缺点
有可能发生死锁
静态分配与动态分配
静态分配
进程运行前为其分配全部所需资源,运行结束后归还资源
动态分配
进程运行过程中动态申请设备资源
设备分配管理中的数据结构
设备控制表(DCT)
每个设备对应一张DCT,用于记录设备情况
关键字段
设备类型
设备标识符
设备状态
指向控制器表的指针
重复执行次数或时间
设备队列的队首指针
控制器控制表(COCT)
每个设备控制器对应一张COCT
关键字段
控制器标识符
子主题3
指向通道表的指针
控制器队列的队首指针
控制器队列的队尾指针
通道控制表(CHCT)
每个通道对应一张CHCT
关键字段
通道标识符1
通道状态
与通道连接的控制器表首址
通道队列的队首指针
通道队列的队尾指针
系统设备表(SDT)
记录整个系统中全部设备的情况,每个设备对应一个表目
关键字段
设备类型
设备标识符
DCT(设备控制表)
驱动程序入口
设备分配的步骤
1.根据进程请求的物理设备名查找SDT
2.根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙则将设备分配给进程
3.根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙则将控制器分配给进程
4.根据COCT找到CHCT并分配通道,若通道忙碌则将进程PCB挂到通道等待队列中,不忙则将通道分配给进程
注︰只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送
缺点
1.用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程
2.若换了一个物理设备,则程序无法运行
3.若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
设备分配步骤的改进方法
建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名
步骤
1.根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)
2.查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程,操作系统在逻辑设备表(LUT)中新增一个表项
3.根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙则将控制器分配给进程
4.根据COCT找到CHCT并分配通道,若通道忙碌则将进程PCB挂到通道等待队列中,不忙则将通道分配给进程
逻辑设备表的设置问题
整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统
每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统
缓冲区管理
什么是缓冲区?有什么作用?
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区
使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合
缓冲区的作用
缓和CPU与I/O设备之间速度不匹配的矛盾
减少对CPU的中断频率,放宽对CPU中断响应时间的限制
解决数据粒度不匹配的问题
提高CPU与I/O设备之间的并行性
常考题型
计算每处理一块数据平均需要多久
解题技巧
假定一个初始状态,分析下次到达相同状态需要多少时间,这就是处理一块数据的平均时间
单缓冲
操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)
注意
当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
块设备→输入(T)→缓冲区→传送(M)→用户进程的工作区→处理(C)→CPU
采用单缓冲策略,处理一块数据平均耗时Max(C,T)+M
双缓冲
操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)
采用双缓冲策略,处理一块数据平均耗时Max(C+M,T)
循环缓冲
将多个大小相等的缓冲区链接成一个循环队列
in指针指向下一个可以冲入数据的空缓冲区
out指针指向下一个可以取出数据的满缓冲区
缓冲池
三个队列
空缓冲队列
输入队列
输出队列
四种工作缓冲区
用于收容输入数据的工作缓冲区(hin)
用于提取输入数据的工作缓冲区(sin)
用于收容输出数据的工作缓冲区(hout)
用于提取输出数据的工作缓冲区(sout)