操作系统 第七章 输入输出系统(下)

7.5 与设备无关的I/O软件

目的 :方便用户和提高OS的可适应性和可扩展性。

7.5.1 与设备无关软件的基本概念

1 通过物理设备名使用设备
早期OS应用程序使用物理设备名访问设备;应用程序与设备直接相关。 特点:程序不灵活,用户不方便,设备利用率低。
2 引入逻辑设备名
为实现设备无关性引入逻辑设备和物理设备概念;逻辑设备名是抽象的物理,如/dev/printer;应用程序使用逻辑设备名,该类设备只要有空闲就不阻塞;设备无关系软件还可以实现I/O重定向。
3 逻辑设备名到物理设备名的转换
使用逻辑设备名需要方便用户,但操作设备需要物理设备名;I/O系统具有将逻辑设备名转为具体物理设备名的功能;系统需要配置一张逻辑设备表(LUT)。

7.5.2 与设备无关软件的共有操作

1 提供设备驱动程序的统一接口
a. 添加新设备驱动程序变得很容易
b. 方便开发人员编写设备驱动程序
c. 要将抽象设备名转为具体物理设备名,再找到驱动程序入口
2 缓冲管理
a. 目的: 缓和CPU和I/O设备之间的矛盾,提高CPU利用率
b. 缓冲区形式:单缓冲区,双缓冲区,循环缓冲区,公用缓冲池
3 差错管理
a.设备有许多机械和电气部分,比CPU更容易出现故障,两类错误:
  • ①暂时性错误,重试操作纠正
  • ②持久性错误,向系统报错
b.多数错误由Driver处理,设备无关性软件只处理Driver无法处理的错误
4 独占设备的分配与回收
a. 两类设备:独占设备和共享设备
b. 独占设备必须由I/O系统统一分配:空闲则分配;忙则进程阻塞并放于设备后备队列,空闲时唤醒
5 提供独立于设备的逻辑数据块
a. 不同类型设备数据交换单位不同,如字符设备/块设备/扇区大小
b. 设备独立性软件应隐藏这些差异被逻辑设备使用

7.5.3 设备的分配与回收

1 设备分配中的数据结构
①设备控制表DCT
②控制器控制表COCT
③通道控制表CHCT
④系统设备表SDT
(1)设备控制表。 为每个设备都配备一张设备控制表,记录设备情况。
(2)控制器控制表。 每个设备控制器都配备一张设备控制器控制表。
(3)通道控制表。每个通道都有一个通道控制表。
(4)系统设备表。
a. 记录全部设备情况,整个系统一张
b. 每设备一个表目:设备类型,设备标识符,设备控制表及设备驱动程序入口
2 设备分配时应考虑的因素
(1)设备的固有属性。
①独占设备分配策略:一个设备分配一个进程,独占到释放
②共享设备分配策略:可同时分配多个进程,需合理调度
③虚拟设备分配策略:属于可共享设备,可同时分配多个进程
(2)设备分配算法。先来先服务算法;② 优先级高优先算法
(3)设备分配中的安全性。
①安全分配方式。a. 发出I/O请求即阻塞直到I/O完成,阻塞时不能再请求资源;b. 摒弃死锁"请求和保持"条件,系统不会发生死锁,CPU和I/O顺序发生,效率低
②安全分配方式。a. 发出I/O请求继续运行,仅当请求的设备被占用才阻塞;b. 优点: 一个进程可操作多个设备,进程推进迅速;c. 缺点:分配不安全,具备"具备请求和保持"条件,可能死锁。
3 独占设备的分配程序
① 分配设备:由物理设备名查SDT,找到对应DCT,根据设备状态处理
② 分配控制器:由DCT转到COCT,根据控制器状态处理
③ 分配通道:由COCT找到CHCT,根据通道状态处理
4 设备分配程序的改进
前例以物理设备名提出I/O请求,若指定设备忙则分配失败;前例设备分配程序不具有与设备无关性;为获得设备的独立性,进程应使用逻辑设备名请求I/O:
① 由逻辑设备名在SDT中找到一个该类设备DCT
② 若忙则找第二个DCT,依次类推,知道找到空闲设备表
③ 设备分配后再分配设备控制器和通道

7.5.4 逻辑设备名映射到物理设备名

1 逻辑设备表(LUT)
作用:将逻辑设备名映射为物理设备名
逻辑设备表:
表项:逻辑设备名,物理设备名,设备驱动程序入口地址
用逻辑名分配物理设备后,字LUT上建立新表目,填写相关信息
2 逻辑设备表(LUT)的设置
①整个系统只能有一张LUT
不允许有相同逻辑设备名,所有进程不能使用相同逻辑设备名,主要用于单用户系统
② 每个用户设置一张LUT
用户登陆时建立进程及LUT,LUT放于PCB中,LUT表目只有:逻辑设备名和系统设备表(SDT,多用户系统配置)指针

7.6 用户层的的I/O软件

7.6.1 系统调用与库函数

1 系统调用
① 不允许用户态应用进程去直接调用核心态(系统态)的OS进程
② 应用进程在运行时又必须取得OS所提供的服务
③ 应用程序通过系统调用间接调用OS的中I/O进程,对I/O设备进行操作
OS向用户提供的功能都必须通过系统调用获取;系统调用是应用程序获取OS服务的唯一途径;汇编语言用系统调用,C语言用库函数调用。
2 系统调用的执行过程
① 调用时将CPU状态改为核心态
② 执行具体I/O操作
③ 返回时将CPU状态改回用户态
3 库函数
UNIX中C语言的系统调用与库函数一一对应;微软定义WIN32 API应用程序接口,利用API取得OS服务,API与实际系统调用并不一一对应;通过系统调用时,库函数与调用程序一一链接,嵌入可执行程序中。
内核与库函数的关系:
① 内核提供OS基本功能
② 库函数提供OS扩展功能,用户通过库函数获取OS服务

7.6.2 假脱机系统

1 假脱机技术
多道系统利用一道程序模拟脱机系统外围控制机功能,实现磁盘与低速I/O设备的传输, 把在联机情况下实现的同时外围操作技术,称为 SPOOLing技术 ,称为 假脱机技术
通过假脱机技术可以将一台物理I/O设备虚拟为多台逻辑I/O设备,这样就可以允许多个用户共享一台物理I/O设备。
2 假脱机系统的组成
(1) 输入输出井:磁盘上开辟,井文件,连接成队列
(2) 输入输出缓冲区:内存中开辟,CPU与磁盘速度矛盾
(3) 输入进程和输出进程:预输入,缓输出
(4) 井管理程序:向输入井读信息或向输出井写信息
3 假脱机系统的特点
(1) 提高了I/O的速度 对低速设备操作转换为对磁盘缓冲区操作。
(2) 将独占设备改造为共享设备 没有为进程分配设备,只是在磁盘缓冲区分配空闲盘块和I/O请求表。
(3) 实现了虚拟设备功能 例如假脱机打印。
4 假脱机打印机系统
利用假脱机技术可 将打印机改造为共享设备,共享打印机技术广泛用于多用户系统和局域网络。
组成:
(1) 磁盘缓冲区:暂存用户输出数据,按队列来组织
(2) 打印缓冲区:内存中,暂存从磁盘缓冲区来的数据
(3) 假脱机管理进程:为用户建立假脱机文件,放入队列
(4) 假脱机打印进程:读取假脱机文件队列中文件打印
5 守护线程
将独占设备改造成共享设备都需要 一个守护进程假脱机文件队列守护进程是打印机唯一使用进程;其他进程把设备使用要求放于假脱机文件队列,由守护进程依次完成进程请求。

7.7 缓冲区管理

OS中所有I/O设备与CPU交换数据时都用的是缓冲区。
缓冲区实现方式:
(1)专门的硬件存储器组成,成本较高、容量小,速度快。
(2)利用内存做缓冲区,如Redis。
缓冲区管理主要功能:组织缓冲区,提供申请释放缓冲区的手段

7.7.1 缓冲的引入

原因
(1)缓解CPU与I/O设备之间速度不匹配
(2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制
(3)解决数据粒度不匹配问题
(4)提高CPU与I/O设备之间的并行性

7.7.2 单缓冲区和双缓冲区

1 单缓冲区
只有一个缓冲区。
2 双缓冲区
有两个缓冲区供通信。
双机通信单缓冲和双缓冲区

7.7.3 环形缓冲区

双方速度接近双缓冲区效果较好;速度相差甚远时双缓冲区效果不好,可增加缓冲区数量解决;环形缓冲区由多个缓冲区组成,并且构成环形。
1 环形缓冲区的组成
(1) 多个大小相同缓冲区:输入缓冲区分类:空缓冲区R,满缓冲区G,当前缓冲区C。
(2) 多个指针:用于指示计算 进程下次可用缓冲区G的指针Nextg,用于指示 输入进程下次可用空缓冲区R的指针Nexti,用于指示计算 进程正在使用的缓冲区C的指针Current。
2 环形缓冲区的使用
(1) Getbuf过程
(2) Releasebuf过程
3 环形缓冲区同步问题
使用输入循环缓冲区,可使输入进程和计算进程并行执行。这就可能存在下述两种情况:
(1) Nexti指针追赶上Nextg指针 。空缓冲区完,输入进程阻塞。
(2) Nextg指针追赶上Nexti指针 。满缓冲区完,计算进程阻塞。

7.7.4 缓冲池

缓冲池与缓冲区的区别: 缓冲区 仅是一组内存块的 链表 ;而缓冲池则是包含了一个用于管理自身的 数据结构 和一组 操作函数的管理机制 ,用于管理多个缓冲区。
1 缓冲池的组成
缓冲池管理者多个缓冲区,每个缓冲区由 缓冲首部和缓冲体组成。 首部:缓冲区号,设备号,数据块数量,信号量,队列链接指针。
(1)空白缓冲队列emq。
(2)输入队列inq。
(3)输出队列outq。
2 Getbuf过程和Putbuf过程
缓冲池是互斥资源,内含信号量操作。
Getbuf过程 从缓冲池获得一个缓冲区
Putbuf 过程: 将缓冲区还给缓冲池
3 缓冲池的工作方式
工作方式有4种:收容输入;提取输入;收容输出;提取输出。

7.7.5 缓存

缓存(cache)是 保存数据副本 的高速内存区域。
缓存和缓冲的区别 :缓冲可以保存数据项的唯一的现有版本;而缓存只提供一个位于其他地方的数据项的更快存储脚本。

7.8 磁盘性能概述和磁盘调度

7.8.1 磁盘性能概述

磁盘是复杂机电设备,最重要存储设备,有大量文件;磁盘性能及可靠性极大影响系统性能。
改善磁盘系统性能的途径:
① 选择好磁盘调度算法
② 提高磁盘I/O速度,提高文件访问速度
③ 采取冗余技术,提高磁盘系统可靠性,建立可靠文件系统
1 数据的组织与格式
(1)磁盘结构:盘片,盘面,磁道,扇区,柱面
(2)一个扇区称为一个盘块,各扇区间保留一定间隙
(3)磁盘信息存储在扇区中,读写以扇区为单位,每个盘面都有磁头
(4)每条磁道存储相同容量的信息,内磁道比外磁道存储密度大
(5)磁盘数据块数目由盘块数,每面磁道数和每磁道扇区数决定
(6)不同盘面上相同编号磁道构成一个柱面
(7)现在磁盘每道扇区数可不同,OS提高虚拟逻辑扇区映射关系
2 磁盘的格式化
(1)磁盘格式化后才能存储数据
(2)格式化分为高级格式化和低级格式化
(3)低格式化后要对磁盘分区,每个分区就是一个独立逻辑磁盘
(4)磁盘第0面0道0扇区为主引导记录分区表,记录各分区起始扇区及大小,活动分区可引导操作系统
(5)高级格式化给分区设置一个引导块,空闲存储管理,根目录和一个空文件系统,并在为主引导记录分区表标记分区文件系统类型
3 磁盘类型
(1)硬盘和软盘,单片盘和多片盘,固定头磁盘和活动头(移动头)磁盘
(2)固定头磁盘:每条道有磁头,并行读写,速度快,用于大容量磁盘
(3)移动头磁盘:每个磁盘一个磁头,需寻道,串行方式读写,简单,用于中小型计算机如微机
4 磁盘的访问时间
(1)磁盘在工作时以恒定速率旋转
(2)磁盘访问时间Ta=寻道时间TS+旋转延迟时间Td+传输时间TT
(3)传输时间Tt,与磁盘转速和数据量有关
(4)读写b字节数据平均访问时间Ta=TS+1/(2r)+b/(rN)
(5)每秒转数r;读写数据字节b;每条磁道字节数N
(6)寻道时间与旋转延迟和数据量无关,占大头
(7)集中数据利于提高磁盘传输率

7.8.2 早期的磁盘调度算法

磁盘调度的目标是 使磁盘的平均寻道时间最短 。目前常用的磁盘调度算法有:FCFS调度算法、最短寻道时间优先(SSTF)调度算法。
1 FCFS调度算法
FCFS算法是最简单的调度算法;根据进程访问磁盘的先后次序进行调度;FCFS适合请求I/O较少的场合。
优点:公平,简单,不会出现进程长期得不到满足情况
缺点:算法未优化,平均寻道时间长
2 SSTF调度算法
要求访问磁道与当前磁头所在的磁道距离最近。
特点:使每次寻道时间最短,但不能保证总的平均寻道时间短;平均寻道时间低于FCFS;可能有进程长期得不到服务。

7.8.3 基于扫描的磁盘调度算法

1 SCAN调度算法
(1)SSTF算法是基于优先级的调度算法,使低优先级进程“饥饿”
(2)SCAN算法不仅考虑访问磁道与当前磁道距离,更优先考虑磁头移动方向
(3)选择进程标准:当前移动方向上距离当前磁头位置最近的请求
(4)也称为“电梯算法”,特点:不会有“饥饿”现象
2 CSCAN调度算法 循环扫描
(1)SCAN性能好,无饥饿现象,广泛用于大中小型机器和网络中的磁盘调度
(2)存在问题:个别进程请求会被大大地推迟
(3)CSCAN算法规定磁头只能单向移动,最小磁道号与最大磁道号构成循环,进行循环扫描
3 NStep SCAN调度算法和FSCAN调度算法
(1) NStep SCAN调度算法 。N步SCAN调度算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS调度算法依次处理这些子队列。每处理一个子队列时又采用SCAN调度算法。
(2) FSCAN调度算法 FSCAN算法实质上是N步SCAN算法的简化。
FSCAN算法只将磁盘请求队列分为两个子队列
①由当前所有请求磁盘I/O的进程形成的服务队列,按SCAN算法处理
②在扫描期间新出现的磁盘请求队列请求放入等待队列,新请求被推迟到下次扫描时处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值