操作系统-第五章
文章目录
I-O 设备的基本概念与分类
什么是I/O设备
将数据Input/Output(输入/输出)计算机的外部设备
按使用特性分类
- 人机交互类外部设备(鼠标,键盘,打印机等)
- 存储设备(移动硬盘,光盘等)
- 网络通信设备(调制解调器等)
按运输速率分类
- 低速设备(鼠标,键盘等)
- 中速设备(激光打印机等)
- 高速设备(磁盘等)
按信息交换的单位分类
- 块设备(传输快,可寻址)(磁盘等)
- 字符设备(传输慢,不可寻址,常采用终端驱动方式)(鼠标,键盘)
I/O控制器
主要功能
- 接收和识别CPU发出的命令(要有控制寄存器,(如CPU发来的read/write))
- 向CPU报告设备的状态(要有状态寄存器 ( 如:1表示忙碌,0表示空闲))
- 数据交换(要有数据寄存器,暂时输入/输出的数据)
- 地址识别(由I/O逻辑实现(为了区分设备控制器中的各个寄存器,需要给各个寄存器设置一个特定的“地址” ))
组成
- CPU与控制器之间的接口(实现控制器与CPU之间的通信)
- I/O逻辑(负责识别CPU发出的命令,并向设备发出命令)
- 控制器与设备之间的接口(实现控制器与设备组之间的通信)
值得注意的小细节:
- 一个I/O控制器可能会对应多个设备
- 数据寄存器,控制寄存器,状态寄存器可能有多个(每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有想应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用专用I/O专用地址,即寄存器独立编址
两种寄存器编址的方式
内存映射I/O
- 控制器中的寄存器与内存统一编址
- 可以采用对内存进行操作的指令来对控制器进行操作
寄存器独立编址
- 控制器中的寄存器独立编址
- 需要设置专门的指令来操作控制器(寄存器地址+编号)
I/O控制方式
程序直接控制方式
- CPU发出I/O命令后需要不断**轮询**
- CPU干预频率:极高
- 每次I/O的数据传输单位:字
- 数据流向:设备->CPU->内存 内存->PUC->设备
- 主要缺点和主要优点:实现简单。但CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低
中断驱动方式
- CPU发出I/O命令后可以做其他事,本次I/O完成后设备控制器发出中断信号
- CPU干预频率:高
- 每次I/O的数据传输单位:字
- 数据流向:设备->CPU->内存 内存->PUC->设备
- 注意:1.CPU会在每个指令周期的末尾检查中断 2.中断处理过程需要保存,恢复进程的运行环境,这个过程是需要一定时间开销的。如果中断发生的频率太高,也会降低系统性能
- CPU和I/O设备可并行工作
DMA方式
- CPU发出I/O命令后可以做其他事,本次I/O完成后DMA控制器发出中断信号
- CPU干预频率:中
- 每次I/O的数据传输单位:块
- 数据流向:设备->内存 内存->设备
- CPU要指明此次进行的操作(eg:读操作),并说明要读入多少数据,数据要放在内存的什么位置,数据在外部设备上的地址(eg:在磁盘上的地址)
- 缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块,如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成
通道控制方式
- CPU发出I/O命令后可以做其他事,通道会执行通道程序以完成I/O,完成后通道向CPU发出中断信号
- CPU干预频率:低
- 每次I/O的数据传输单位:一组块
- 数据流向:设备->内存 内存->设备
**优缺点:**每一阶段的优点都是解决了上一阶段的最大缺点。总体来说。整个发展过程就是要尽量减少CPU对I/O过程的干预,把CPU从繁杂的I/O控制事务中解脱出来,以便更多地去完成数据处理任务
I/O软件的层次
用户层软件
库函数
- 实现与用户交互的接口,向上提供方便易用的库函数
设备独立性软件
系统调用
- 向上层提供统一的调用接口(如read/write系统调用);
- 设备的保护
- 差错处理
- 设备的分配与回收
- 数据缓冲区管理
- 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
- 设备独立性软件需要通过“逻辑设备表(LUT)”来确定逻辑设备对应的物理设备,并且找到该设备对应的设备驱动程序
- 操作系统可以采用两种方式管理逻辑设备表(LUT)
-
- 整个系统只设置一张LUT,这就意味着所有拥护不能使用相同的逻辑设备名,这种方式只适用于单用户操作系统
- 为每一个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统,系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中
设备驱动程序
- 设置设备寄存器,检查设备状态
中断处理程序
- 进行中断处理
硬件
- 执行I/O操作,有机械部件,电子部件组成
输入/输出应用程序接口
I/O设备(硬件)
字符设备(eg:键盘,打印机,不可”寻址“每次读1个字符
块设备(eg:键盘,可”寻址“,每次读/写1个块)
网络设备(eg:网络控制器卡),数据该给谁?
用户I/O软件
-
字符设备接口
get/put系统调用:向字符设备读/写一个字符
-
块设备接口
read/write系统调用:向块设备的读写指针位置读/写多个字符;
seek系统调用:修改读写指针位置
-
网络设备接口
又称”网络套接字(socket)接口“
socket系统调用:创建一个网络套接字需要指明网络协议(TCP,UDP)
bind:将套接字绑定到某个本地”端口“
connect:将套接字连接到远程地址
read/write:从套接字读/写数据
阻塞/非阻塞I/O
阻塞I/O:应用程序发出I/O系统调用,进程需转为阻塞态等待
eg:字符设备接口一一从键盘读一个字符get
scanf()
非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待
eg:块设备接口一一往磁盘写数据write
用户态,核心态
统一标准的设备驱动程序接口
不同的操作系统,对设备驱动程序接口的标准各不相同
设备厂商必须根据操作系统的接口要求,开发相应的驱动设备程序,设备才能被使用
I/O核心子系统
设备独立性软件,设备驱动程序,中断处理程序
I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
如:磁盘调度
操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(eg:只读,读和写等)
在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有相应的FCB
假脱机技术/SPOOLing技术
脱机技术
- 外围控制机+更高速的设备------磁带
- 作用:缓解设备与CPU的速度矛盾,实现预输入,缓输出
假脱机技术
必须要有多道程序技术的支持
- 又叫SPOOLing技术,用软件的方式模拟脱机技术
- 输入井和输出井-----模拟脱机输入/输出时的磁带
- 输入进程和输出进程-----模拟脱机输入/输出时的外围控制机
- 输入缓冲区和输出缓冲区------内存中的缓冲区,输入,输出时的”中转站“
共享打印机
- 用SPOOLing技术将独占式的打印机”虚拟“成共享打印机
独占式设备一一只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求
共享设备一一允许多个进程”同时“使用设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求
SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备
设备的分配与回收
应考虑的因素
- 固有属性:独占设备(打印机),共享设备(磁盘),虚拟设备(SPOOLing)
- 分配算法:先来先服务,优先级高者优先,短任务优先等
- 安全性:安全分配方式(一个时段内每个进程只能使用一个设备 优点:破坏了“请求和保持”,不会死锁 缺点:对于一个进程来说,CPU和I/O设备只能串行工作),不安全分配方式(一个进程可以同时使用多个设备 优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进 缺点:有可能发生死锁(死锁避免,死锁检测和解除))
静态分配和动态分配
- 静态分配:进程运行前为其分配全部所需资源,进行结束后归还资源
- 动态分配:进程运行过程中动态申请设备资源
设备分配管理中的数据结构
设备控制表(DCT)
每个设备对应一张DCT,关键字段:类型/标识符/状态/指向COCT的指针等/待队列指针(一个通道控制多个控制器,一个控制器控制多个设备)
控制器控制表(COCT)
每个控制器对应一张COCT,关键字段:状态/指向CHCT的指针/等待队列指针
通道控制表(CHCT)
每个控制器对应一张CHCT,关键字段:状态/等待队列指针
系统设备表(SDT)
记录整个系统中所有设备的情况,每个设备对应一个标目,关键字段:设备类型/标识符/DCT/驱动程序入口
设备分配的步骤
- 根据进程请求的物理设备名称查找SDT
- 根据SDT找到DCT并分配设备
- 根据DCT找到COCT并分配控制器
- 根据COCT找到CHCT并分配通道
注:只有设备,控制器通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送
缺点:用户编程时必须使用“物理设备名”,若换了一个物理设备,则程序无法运行,若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
设备分配步骤的改进
-
用户编程时使用逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过LUT)
-
逻辑设备表的设置问题:
-
- 整个系统只有一张LUT:各用户所用的逻辑设备各不允许重复
- 每个用户一张LUT:各个用户的逻辑设备名可重复
-
根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)
-
查找SDT,找到用户进程指定类型,并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项
-
根据DCT找到COCT
-
根据COCT找到CHCT
如果之后用户进程再次通过相同的逻辑设备名请求设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的的驱动程序入口地址
缓冲区管理
缓冲区的概念
- 一般利用内存作为缓冲区
- 缓解CPU与设备的速度矛盾,减少对CPU的中断频率,解决数据粒度不匹配的问题,提高CPU与I/O设备之间的并行性
单缓冲
- 设备一(T)一缓冲区一(M)一工作区一(C)一处理
- 处理一块数据块平均耗时Max(C,T)+M
- 分析问题的初始状态:工作区满,缓冲区空
当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,才可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
双缓冲
- 处理一块数据平均耗时Max(T,C+M)
- 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空
循环缓冲
- 多个缓冲区连接成循环队列,in指针指向第一个空缓冲区,out指针指向第一个满缓冲区
缓冲池
-
三个队列:空缓冲队列,输入队列,输出队列
-
四种工作缓冲区
-
用于收容输入数据的工作缓冲区,用于提取输入数据的工作缓冲区
用于收容输出数据的工作缓冲区,用于提取输出数据的工作缓冲区
磁盘的结构
磁盘,磁道,扇区的概念
- 磁盘由表面涂有磁性物质的圆形盘片组成
- 每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区
如何在磁盘中读/写数据
- 磁头移动到目标位置,磁盘旋转,对应扇区划分磁道才能完成读/写
盘面,柱面的概念
- 磁盘有多个盘片“摞”起来,每个盘片有两个盘面
- 所有盘面中相对位置相同的磁道组成柱面
磁盘的物理地址
- (柱面号,盘面好。扇区号)
可根据该地址读取一个“块”
- 根据“柱面号”移动磁臂,让磁头指向指定柱面
- 激活指定盘面对应的磁头
- 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写
磁盘的分类
- 根据磁头是否可移动
固定头磁盘(每个磁道有一个磁头)
移动头磁盘(每个盘面只有一个磁头)
- 根据盘片是否可更换
固定盘磁盘
可换盘磁盘
磁盘调度算法
一次磁盘读/写操作需要的时间
- 寻址时间(寻道时间):启动磁臂,移动磁头所花的时间(磁盘调度算法影响的指标) TS=s+m*n
- 延迟时间:将目标扇区转到磁头下面所花的时间 TR=(1/2)*(1/r)=1/(2r)
- 传输时间:读/写数据花费的时间Tt=(1/r)*(b/N)=b/(rN)
磁盘调度算法
先来先服务(FCFS)
按访问请求到达的先后顺序进行处理
最短寻找时间优先(SSTF)
- 每次都优先响应距离磁头最近的磁道访问请求
- 贪心算法的思想,能保证眼前最优,但无法保证总的寻道时间最短
- 缺点:可能会导致饥饿
扫描算法(电梯算法,SCAN)
- 只有磁头移动到最边缘的磁道时才可以改变磁头移动方向
- 缺点:对各个位置磁道响应频率不平均
循环扫描算法(C-SCAN)
只有磁头朝某个方向移动时才会响应请求,移动到边缘后立即让磁头返回起点,返回途中不响应任何请求
LOOK算法
SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即改变磁头方向
C-LOOK算法
C-SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即让磁头返回
注意:若题目中无特别说明,则SCAN就是LOOK,C-SCAN就是C-LOOK
减少延迟时间的方法
交替编号
- 具体做法:让编号相邻的扇区在物理上不相邻
- 读取完一个扇区后需要一段时间处理才可以继续读入下一个扇区
错位命名
- 具体做法:让相邻盘面的扇区编号“错位”
- 原理:与“交替编号”的原理相同,“错位命名法”可降低延迟时间
磁盘地址结构的设计
- 理解为什么要用(柱面号,盘面号,扇区号)的结构
- 立即为什么不用(盘面号,柱面号,扇区号)的结构
- 原因:在读取地址连续的磁盘块时,前者不需要移动磁头
磁盘的管理
磁盘初始化
- 低级格式化/物理格式化:划分扇区
- 磁盘分区(C盘,D盘,E盘)
- 逻辑格式化:建立文件系统(建立根目录文件,建立用于存储空间管理的数据结构)
引导块
-
计算机启动时需要运行初始化程序(自举程序)来完成初始化
-
ROM中存放很小的自举装入程序,以后不能再修改(ROM一般是出厂时就集成在主板上)(开机时计算机先运行“自举装入程序”,通过执行该程序就可以找到引导块,并将完整的“自举程序”读入内存,完成初始化)
-
完整的自举程序存放在初始块(引导块)中,启动块位于磁盘的固定位置
坏块的管理
- 简单的磁盘:逻辑格式化时将坏块标记出来 对操作系统不透明
- 复杂的磁盘:磁盘控制器维护一个坏块链,并管理备用扇区坏块对操作系统透明
固态硬盘SSD
原理
基于闪存技术,属于电可擦除ROM,即EEROM
组成
- 闪存翻译层 ----负责翻译逻辑块号,找到对应页
- 存储介质:多个闪存芯片----每个芯片包含多个块----每个块包含多个页
读写性能特性
- 以页为单位读/写—相当于磁盘的“扇区”
- 以块为单位“擦除”,其中每页都可以写一次,读无限次
- 支持随机访问,系统给定逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
- 读快,写慢。要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
与机械硬盘相比的特点
- SSD读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
- SSD安静无噪音,能耗低,耐摔抗震,。造价更贵
- SSD的一个“块”被擦除次数过多可能会坏掉,机械硬盘的扇区不hi因为写的次数太多而坏掉
磨损均衡技术
- 思想:将“擦除”平均分布再各个块上,以提升使用寿命
- 动态磨损均衡—写入数据时,优先选择累计擦除技术少的新闪存块
- 静态磨损均衡—SSD监测并自动进行数据分配,迁移,让老旧的闪存块承担以读为主的存储任务,较新的闪存块承担更多的写任务