操作系统设备管理

操作系统实现对外接设备的管理功能,主要是I/O设备,unix适用将外部设备抽象为特殊文件,用户用与外部文件相同的方法操作外部设备,具体又可以分为:
人机交互类外部设备,如鼠标键盘等,这类设备数据传输速度慢;
存储设备,传输速度快,
网络通信设备,速度介于二者之间,
也可以根据信息交换的单位分类,分为字符设备和块设备,字符设备传输慢,不可寻址,常采用中断驱动方式,块设备传输快,可寻址。

设备组成

设备由机械部件,电子部件组成,电子部包括I/O控制器和设备控制器,用于实现cpu对设备的控制,具体实现过程如下:

I/O控制器有相应的控制寄存器,用于接收和识别cpu发出的命令,寄存器中存放来自cpu的命令和参数
状态寄存器记录当前设备的状态,向cpu报告设备状态
数据寄存器用于暂存数据,实现cpu和设备的数据交换
cpu判断区分各寄存器,实现地址识别

I/O控制器

组成

cpu与控制器的接口,cpu由控制线发出命令,用地址线指明操作设备,数据线输入输出数据
I/O逻辑,接收识别cpu命令,对设备发出命令
控制器与设备的接口,实现控制器与设备的通信

一个I/O控制器可能对应多个设备,为了简化指令,与内存统一编址;寄存器可能有多个需要编址,可用内存映像I/O,使对设备的操作与内存一致,也可采用寄存器独立编址,采用I/O专用地址进行单独编址,该方法需要设置专门指令来实现对控制器的操作。

I/O控制方式

即采取什么样的方式来控制I/O设备的数据读写。

程序直接控制方式
1,cpu向控制器发指令,设备启动
2,cpu轮询检查状态寄存器状态,1为未就绪
3,设备准备好后,报告自身状态,将数据传送给控制器
4,控制器将输入的数据放到数据寄存器中,状态改为0就绪状态
5,cpu发现设备已就绪,将数据寄存器中的内容读入cpu寄存器,再放入内存
该方法cpu不断轮询检查,干预频繁,每次只能读写一个字,每个字的读写都需要cpu控制,好处是实现简单,软件即可实现,但cpu和I/O设备只能串行工作,cpu需要一致检查,利用率低。

中断驱动方式
cpu发出I/O指令后,将等待I/O的进程阻塞,切换进程执行,I/O完成后控制器向cpu发出中断信号,cpu检测后保存当前进程运行环境信息,转去执行中断处理程序,从I/O控制器读一个字的数据传送到cpu寄存器,再写入内存,cpu恢复等待进程的运行环境后继续执行。
cpu在每个周期末尾检查中断,中断保存恢复运行环境有性能开销,cpu只在I/O操作的开始完成阶段介入,等待过程可以切换过程执行,解放cpu效率,但每次只能读写一个字,大量传输时中断处理的开销大,读写还需要经过cpu寄存器中转,浪费空间。

直接存储器存储器存取DMA
主要用于块设备,数据传送的单位是块,数据直接在内存和设备交互,仅在传输开始和结束时需要cpu干预,只能读写连续的块,存入的内存也连续,cpu指挥DMA执行读写操作,具体构成如下:

数据寄存器DR,暂存数据
内存地址寄存器MAR,表示输入输出位置
数据计数器DC,剩余读写字节数
命令/状态寄存器CR,存放cpu发来的I/O指令或设备状态信息

该方法传输单位大,cpu介入频率低,传输不需要经过cpu,并发性能得到提升,但cpu一次指令只能读写连续的块。

通道控制方式
适用硬件实现,可识别执行一系列通道指令。
1,cpu向通道发出I/O指令,指向程序需要的I/O设备
2,通道执行内存中的通道程序,指明数据量和读写位置
3,通道执行完任务后,向cpu发出中断指令,cpu进行处理
有I/O任务时cpu只要给通发指令让其执行即可,通道自身与程序交互,通道程序自己有任务清单,相当于简易cpu,cpu干预极低,完成一组数据块才发出中断,并行工作资源利用率高,但实现复杂,需要专门通道硬件支持。

I/O软件层次结构

用户层,实现用户交互的接口,如库函数,适用系统调用,请求操作系统内核的服务
设备独立性软件,也称设备无关性软件,与设备硬件特性无关的功能在此实现,实现设备保护,差错处理,设备分配回收,数据缓冲区管理,
设备驱动程序,向上提供统一的调用接口,负责对硬件设备的具体控制,因为不同硬件特征不同,运行方式也不同,需要厂商提供特定驱动完成
中断处理程序,I/O任务完成时,I/O控制器发送一个中断信号,系统根据中断信号类型和硬件直接交互,找到相应中断处理程序并执行

建立逻辑设备名到物理设备名的映射关系,根据设备类型选择用户相应的驱动程序,通过逻辑设备表LUT实现,具体有整个系统一张LUT和每个用户设置一张LUT两种方法。

I/O应用程序接口

用户层应用无法适用统一的系统调用接口完成所有类型设备的I/O,系统提供接口供底层硬件厂家实现,举例有:
字符设备接口,getput读写一个字符
块设备,readwriteseek
网络模块接口,socket套接字,bind绑定端口,connect建立远程地址,readwrite套接字读取数据,控制网卡,我们网络编程大多也要使用套接字实现,原来该方法这么底层,对应的计算机网络应该是运输层

设备驱动程序接口

不同硬件的驱动接口不统一,操作系统难以调用设备的驱动程序,所以操作系统要求统一标准驱动。

假脱机SPOOLING

为缓和手工操作输入输出的速度矛盾,批处理引入脱机输入输出技术,即脱离主机控制进行输入输出,假脱机就是适用软件方式模拟脱机技术,该技术在I/O的用户层实现,组成如下:

磁盘上开辟出两个存储区域,输入井和输出井,用于收容输入输出的数据
输入输出进程分别模拟脱机输入输出的外围控制机,作为数据中转站,与井交互

比如打印机为独占设备,可用SPOOLING技术改造为共享设备。

设备的分配回收

设备分配时硬考虑设备的固有属性,独立、共享、虚拟
分配算法有先进先出,优先级算法和短任务有限等
基于安全性考虑有两种策略:
安全分配,分配设备后进程阻塞,I/O完成后才唤醒,破坏请求和保持条件,不会死锁,cpu和I/O串行工作,利用率低
不安全分配,进程发出I/O请求后系统为其分配设备,进程可以继续执行,只有某个I/O请求得不到满足时才将进程阻塞,计算与I/O任务可并行处理,有可能发生死锁

静态分配,进程运行前分配全部所需资源,运行结束后归还资源
动态分配,运行进程中动态申请设备资源

设备分配管理中的数据结构

通道->控制器->设备
设备控制表DCT,每个设备配置一张,用于记录设备情况
控制器控制表COCT,每个设备控制器一张表,操作系统根据其对控制器进行操作和管理
通道控制表CHCT,操作系统用于管理通道
系统设备表SDT,记录操作系统中全部设备的情况,每个设备对应一个表项

设备分配的步骤

1,根据进程请求的物理设备名查找SDT,物理设备名是由进程请求时提供的参数
2,根据SDT找到DCT,若设备忙碌则将进程的PCB挂到设备的等待队列中,否则分配
3,根据DCT找到COCT,若设备忙碌则将进程的PCB挂到设备的等待队列中,否则分配
4,根据COCT找到CHCT,若设备忙碌则将进程的PCB挂到设备的等待队列中,否则分配
三次分配完成则设备分配成功

上述过程要求用户编程时适用物理设备名,更换物理设备会导致程序无法运行,请求的物理设备忙碌时,就算操作系统中有同类型设备,进程也需要阻塞等待,建立逻辑设备名与物理设备名的映射,再由操作系统进行映射可以极大提高效率,具体过程如下:
1,根据逻辑设备名查找SDT,确定设备类型
2,在SDT中找指定类型的空闲设备进行分配,操作系统在逻辑设备表LUT中新增表项
3,依次查找COCT和CHCT
上述过程会建立逻辑设备名和物理设备名的映射关系,再次请求时可直接找到对应物理设备,也可知驱动程序的入口地址

缓冲区管理

可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区,作用如下:
缓和cpu与I/O设备直接速度不匹配的矛盾
减少对cpu的中断频率,放宽对cpu中断响应时间的限制
解决数据粒度不匹配的问题,输入输出数据的大小不同
提高cpu与I/O设备的并行性

单缓冲区管理

操作系统在主存分配一个缓冲区,大小为一个块,缓冲区非空时只能取,空了才能写,为空时只能写,满了才能取。

双缓冲区管理

分配两个缓冲区,用设备换并行,相互通信的机器设置双缓冲区可同时通信

循环缓冲区

多个大小相等的缓冲区链接成一个循环队列,in指针指向下一个可冲入数据的空缓冲区,out指针指向下一个可取出数据的满缓冲区。

缓冲池

系统中共用的缓冲区组成,根据使用状况可分为空缓冲队列和输入输出队列,根据功能不同分为收容输入,提取输入。

磁盘

磁盘结构

表面由磁性物质组成的用于记录二进制数据,盘面划分为磁道,磁道划分为扇区,各扇区存放数据量相同,内侧道扇面面积,数据密度大,读写数据时磁头移动到磁道,磁盘旋转,让目标扇区从磁头下划过,一个磁盘可以由多个盘片组成,多个磁头,一个盘片可能有两个盘面,所有磁头在一个磁臂,同时进退,所有盘面中位置相同磁道组成柱面,用(柱面号,盘面号,扇区号)定位地址。

分类可分为:
活动头磁盘,固定头磁盘
可换盘磁盘,固定盘磁盘

磁盘调度算法

一次读写的操作时长=寻道时间(启动磁头臂时间+移动磁头时间+旋转磁盘时长)+延迟时间+传输时间
其中延迟时间和传输时间操作系统无法优化,只有寻道时间可以影响。

先来先服务算法FCFS,公平,大量进程竞争使用磁盘,请求访问的磁道分散时性能较差

最短寻找时间有限SSTF,优先处理与当前磁头最近的磁道,保证每次时间最短,但整体未必最优,性能好,平均寻道时间短,可能产生饥饿

扫描算法SCAN,也称电梯算法,规定磁头移动到最外侧磁道才能向内,到最内磁道才能向外,防止饥饿
只有到最边上磁道才能改变方向,有时浪费,对各个磁道响应频率不平均

LOOK算法,磁头移动方向上没有别的请求,立即改变磁头方向

循环扫描,磁头朝特定方向移动处理访问请求,返回时直接移动至起始端不处理任何请求

C-LOOK算法,磁头移动方向无访问请求,返回到有访问请求的位置即可

减少延迟的方法

磁盘连续读取时需要时间处理,逻辑上相邻的扇面物理上应该间隔,故逻辑连续的盘面物理上应该交替编号,让连续的逻辑扇区所需延迟减小。

磁盘管理

初始化过程

1,低级(物理)格式化,将磁道划分为扇区,扇区分为头尾和数据区域,管理信息在头尾中存储
2,分区,分区由若干柱面组成
3,逻辑格式化,创建文件系统

引导块

初始化(自举)程序完成开机初始化的相关工作,该程序存在ROM只读存储器中,出厂写入不可修改,完整的自举程序在磁盘引导块上存放,硬盘的固定位置,有启动分区的盘称为启动磁盘。

坏块管理

无法正常使用的扇区且无法修复,应该标记出来避免错误使用,磁盘在FAT表上表明,对OS不透明,复杂的磁盘还会使用磁盘控制器维护坏块链表,出厂低级格式化时初始化,并管理备用扇区用于替换坏块。

固态硬盘SSD

基于闪存技术,使用电可擦除ROM,读快,写慢,支持随机访问,电路定位,安静,耐摔,能耗低。

组成如下:
闪存翻译层,将逻辑块映射到物理地址
闪存芯片,由数据块构成,数据块又可分为页,读写以页为单位,相当于机械硬盘的扇区,擦除以块为单位,擦除后的块每个页只能写一次,更新单个页时复制其他页,写入新更新的页,再重新映射。

一个块被擦除过多时会损坏,机械硬盘则不会因为写的次数多损坏,该问题有如下方法缓和:
磨损均衡技术,让擦除平均分布在每一个块
动态均衡技术,写入时优先选累计擦除次数少的新闪存块
静态均衡技术,监测块的读写状况,读多写少的数据迁移到老的块上,让较新的块承担更多写任务

那固态硬盘容易坏吗?我们来计算一下,一块1T的硬盘,每个块可擦除1K次,一天写入128G的数据,多久能写坏?
每个块都被擦一次需要1T/128=8天,而有了磨损均衡技术,需要8×1K=8千天,大概二十年才能损坏,而现在的固态硬盘可能支持到一万次的擦写,更不必担心硬盘数据损坏,大胆用就行了。

总结

本章介绍了操作系统管理外部设备的方法,I/O控制采用通道管理,相当于一个小cpu专门管理I/O设备,还介绍了缓冲区和磁盘相关内容,重要的是磁盘调度算法,但日常来说固态已经成为主流,传统磁盘调度以及不大需要了解了。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值