操作系统-第五章

操作系统-第五章

文章目录

I-O 设备的基本概念与分类

什么是I/O设备

将数据Input/Output(输入/输出)计算机的外部设备

按使用特性分类

  • 人机交互类外部设备(鼠标,键盘,打印机等)
  • 存储设备(移动硬盘,光盘等)
  • 网络通信设备(调制解调器等)

按运输速率分类

  • 低速设备(鼠标,键盘等)
  • 中速设备(激光打印机等)
  • 高速设备(磁盘等)

按信息交换的单位分类

  • 块设备(传输快,可寻址)(磁盘等)
  • 字符设备(传输慢,不可寻址,常采用终端驱动方式)(鼠标,键盘)

I/O控制器

主要功能

  • 接收和识别CPU发出的命令(要有控制寄存器,(如CPU发来的read/write))
  • 向CPU报告设备的状态(要有状态寄存器 ( 如:1表示忙碌,0表示空闲))
  • 数据交换(要有数据寄存器,暂时输入/输出的数据)
  • 地址识别(由I/O逻辑实现(为了区分设备控制器中的各个寄存器,需要给各个寄存器设置一个特定的“地址” ))

组成

  • CPU与控制器之间的接口(实现控制器与CPU之间的通信)
  • I/O逻辑(负责识别CPU发出的命令,并向设备发出命令)
  • 控制器与设备之间的接口(实现控制器与设备组之间的通信)

值得注意的小细节:

  1. 一个I/O控制器可能会对应多个设备
  2. 数据寄存器,控制寄存器,状态寄存器可能有多个(每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有想应的地址,才能方便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软件的层次

用户层软件

库函数

  • 实现与用户交互的接口,向上提供方便易用的库函数

设备独立性软件

系统调用

  1. 向上层提供统一的调用接口(如read/write系统调用);
  2. 设备的保护
  3. 差错处理
  4. 设备的分配与回收
  5. 数据缓冲区管理
  6. 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
    • 设备独立性软件需要通过“逻辑设备表(LUT)”来确定逻辑设备对应的物理设备,并且找到该设备对应的设备驱动程序
    • 操作系统可以采用两种方式管理逻辑设备表(LUT)
      1. 整个系统只设置一张LUT,这就意味着所有拥护不能使用相同的逻辑设备名,这种方式只适用于单用户操作系统
      2. 为每一个用户设置一张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:各个用户的逻辑设备名可重复
  1. 根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”

  2. 查找SDT,找到用户进程指定类型,并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项

  3. 根据DCT找到COCT

  4. 根据COCT找到CHCT

如果之后用户进程再次通过相同的逻辑设备名请求设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的的驱动程序入口地址

缓冲区管理

缓冲区的概念

  • 一般利用内存作为缓冲区
  • 缓解CPU与设备的速度矛盾,减少对CPU的中断频率,解决数据粒度不匹配的问题,提高CPU与I/O设备之间的并行性

单缓冲

  • 设备一(T)一缓冲区一(M)一工作区一(C)一处理
  • 处理一块数据块平均耗时Max(C,T)+M
  • 分析问题的初始状态:工作区满,缓冲区空

当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,才可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出

双缓冲

  • 处理一块数据平均耗时Max(T,C+M)
  • 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空

循环缓冲

  • 多个缓冲区连接成循环队列,in指针指向第一个空缓冲区,out指针指向第一个满缓冲区

缓冲池

  • 三个队列:空缓冲队列,输入队列,输出队列

  • 四种工作缓冲区

  • 用于收容输入数据的工作缓冲区,用于提取输入数据的工作缓冲区

    用于收容输出数据的工作缓冲区,用于提取输出数据的工作缓冲区

磁盘的结构

磁盘,磁道,扇区的概念

  • 磁盘由表面涂有磁性物质的圆形盘片组成
  • 每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区

如何在磁盘中读/写数据

  • 磁头移动到目标位置,磁盘旋转,对应扇区划分磁道才能完成读/写

盘面,柱面的概念

  • 磁盘有多个盘片“摞”起来,每个盘片有两个盘面
  • 所有盘面中相对位置相同的磁道组成柱面

磁盘的物理地址

  • (柱面号,盘面好。扇区号)

可根据该地址读取一个“块”

  1. 根据“柱面号”移动磁臂,让磁头指向指定柱面
  2. 激活指定盘面对应的磁头
  3. 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写

磁盘的分类

  • 根据磁头是否可移动

固定头磁盘(每个磁道有一个磁头)

移动头磁盘(每个盘面只有一个磁头)

  • 根据盘片是否可更换

固定盘磁盘

可换盘磁盘

磁盘调度算法

一次磁盘读/写操作需要的时间

  • 寻址时间(寻道时间):启动磁臂,移动磁头所花的时间(磁盘调度算法影响的指标) 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监测并自动进行数据分配,迁移,让老旧的闪存块承担以读为主的存储任务,较新的闪存块承担更多的写任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值