第五章 输入输出

第五章 输入/输出

除了提供抽象(例如,进程、地址空间和文件)以外,操作系统还要控制计算机的所有I/O(输入/输出)设备。操作系统必须向设备发送命令,捕捉中断,并处理设备的各种错误。它还应该在设备和系统的其他部分之间提供简单且易于使用的接口。如果有可能,这个接口对于所有设备都应该是相同的,这就是所谓的设备无关性。I/O部分的代码是整个操作系统的重要组成部分。

5.1 I/O硬件原理

5.1.1 I/O设备

I/O设备大致可以分为两类: 块设备(block device) 和字符设备(character device) 。

请添加图片描述

块设备

块设备把信息存储在固定大小的块中, 每个块有自己的地址。 通常块的大小在512字节至32 768字节之间。 所有传输以一个或多个完整的(连续的) 块为单位。 块设备的基本特征是每个块都能独立于其他块而读写。
硬盘、 CD-ROM和USB盘是最常见的块设备。

字符设备

字符设备以字符为单位发送或接收一个字符流, 而不考虑任何块结构。 字符设备是不可寻址的, 也没有任何寻道操作。 打印机、 网络接口、 鼠标(用作指点设备) 、 老鼠(用作心理学实验室实验) , 以及大多数与磁盘不同的设备都可看作是字符设备。

5.1.2 设备控制器

**I/O设备一般由机械部件和电子部件两部分组成。**通常可以将这两部分分开处理,以提供更加模块化和更加通用的设计。电子部件称作设备控制器或适配器,在个人计算机上,它经常以主板上的芯片的形式出现,或者以插入(PCI)扩展槽中的印刷电路板的形式出现。机械部件则是设备本身。

**控制器的任务是把串行的位流转换为字节块,并进行必要的错误校正工作。**字节块通常首先在控制器内部的一个缓冲区中按位进行组装,然后再对校验和进行校验并证明字节块没有错误后,再将它复制到主存中。

5.1.3 内存映射I/O

每个控制器有几个寄存器用来与CPU进行通信。 通过写入这些寄存器, 操作系统可以命令设备发送数据、 接收数据、 开启或关闭, 或者执行某些其他操作。 通过读取这些寄存器, 操作系统可以了解设备的状态, 是否准备好接收一个新的命令等。

5.1.4 直接存储器存取

无论一个CPU是否具有内存映射I/O,它都需要寻址设备控制器以便与它们交换数据。CPU可以从I/O控制器每次请求一个字节的数据,但是这样做浪费CPU的时间,所以经常用到一种称为直接存储器存取(Direct Memory Access,DMA)

请添加图片描述

5.1.5 重温中断

当一个I/O设备完成交给它的工作时,它就产生一个中断(假设操作系统已经开放中断),它是通过在分配给它的一条总线信号线上置起信号而产生中断的。该信号被主板上的中断控制器芯片检测到,由中断控制器芯片决定做什么。

请添加图片描述

5.2 I/O软件原理

5.2.1 I/O软件的目标

  1. 设备独立性

    在设计I/O软件时一个关键的概念是设备独立性(device independence)。它的意思是应该能够编写出这样的程序:它可以访问任意I/O设备而无需事先指定设备。

  2. 错误处理

    一般来说,错误应该尽可能地在接近硬件的层面得到处理。

  3. 同步(synchronous)(即阻塞)和异步(asynchronous)(即中断驱动)传输

    大多数物理I/O是异步的——CPU启动传输后便转去做其他工作,直到中断发生。如果I/O操作是阻塞的,那么用户程序就更加容易编写——在read系统调用之后,程序将自动被挂起,直到缓冲区中的数据准备好。正是操作系统使实际上是中断驱动的操作变为在用户程序看来是阻塞式的操作。

  4. 缓冲(buffering)

    数据离开一个设备之后通常并不能直接存放到其最终的目的地。例如,从网络上进来一个数据包时,直到将该数据包存放在某个地方并对其进行检查,操作系统才知道要将其置于何处。

5.2.2 程序控制I/O

I/O的最简单形式是让CPU做全部工作,这一方法称为程序控制I/O(programmed I/O)。

借助于例子来说明程序控制I/O是最简单的。考虑一个用户进程,该进程想在打印机上打印8个字符的字符串“ABCDEFGH”。它首先要在用户空间的一个缓冲区中组装字符串,如图5-7a所示。

请添加图片描述

操作系统相继采取的操作总结在图5-8中。首先,数据被复制到内核空间。然后,操作系统进入一个密闭的循环,一次输出一个字符。在该图中,清楚地说明了程序控制I/O的最根本的方面,这就是输出一个字符之后,CPU要不断地查询设备以了解它是否就绪准备接收另一个字符。这一行为经常称为轮询(polling)或忙等待(busy waiting)。

请添加图片描述

程序控制I/O十分简单但是有缺点,即直到全部I/O完成之前要占用CPU的全部时间。

5.2.3 中断驱动I/O

允许CPU在等待打印机变为就绪的同时做某些其他事情的方式就是使用中断。

5.2.4 使用DMA的I/O

中断驱动I/O的一个明显缺点是中断发生在每个字符上。中断要花费时间,所以这一方法将浪费一定数量的CPU时间。这一问题的一种解决方法是使用DMA。

本质上,DMA是程序控制I/O,只是由DMA控制器而不是主CPU做全部工作。这一策略需要特殊的硬件(DMA控制器),但是使CPU获得自由从而可以在I/O期间做其他工作。

5.3 I/O软件层次

I/O软件通常组织成四个层次,如图5-11所示。每一层具有一个要执行的定义明确的功能和一个的定义明确的与邻近层次的接口。

请添加图片描述

5.3.1 中断处理程序

当中断发生时,中断处理程序将做它必须要做的全部工作以便对中断进行处理。然后,它可以将启动中断的驱动程序解除阻塞。

**中断处理远不是无足轻重的小事。它要花费相当多的CPU指令,特别是在存在虚拟内存并且必须设置页表或者必须保存MMU状态(例如R和M位)的机器上。**在某些机器上,当在用户态与核心态之间切换时,可能还需要管理TLB和CPU高速缓存,这就要花费额外的机器周期。

5.3.2 设备驱动程序

每个连接到计算机上的I/O设备都需要某些设备特定的代码来对其进行控制。这样的代码称为设备驱动程序(device driver),它一般由设备的制造商编写并随同设备一起交付。

请添加图片描述

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

虽然I/O软件中有一些是设备特定的,但是其他部分I/O软件是与设备无关的。

请添加图片描述

5.3.4 用户空间的I/O软件

尽管大部分I/O软件都在操作系统内部,但是仍然有一小部分在用户空间,包括与用户程序连接在一起的库,甚至完全运行于内核之外的程序。

请添加图片描述

5.4 磁盘

磁盘具有读写速度同样快的特点,这使得它们适合作为辅助存储器(用于分页、文件系统等)

磁盘被组织成柱面,每一个柱面包含若干磁道,磁道数与垂直堆叠的磁头个数相同。磁道又被分成若干扇区,软盘上大约每条磁道有8~32个扇区,硬盘上每条磁道上扇区的数目可以多达几百个。磁头数大约是1~16个。

5.4.1 磁盘的硬件

  1. 磁盘

    请添加图片描述

  2. RAID
    廉价磁盘冗余阵列

    请添加图片描述

  3. CD-ROM

  4. 可刻录CD

5.4.2 磁盘格式化

硬盘由一叠铝的、合金的或玻璃的盘片组成,直径为5.25英寸或3.5英寸(在笔记本电脑上甚至更小)。

请添加图片描述

在每个盘片上沉积着薄薄的可磁化的金属氧化物。

5.4.3 磁盘臂调度算法

磁盘臂调度算法:默认实际硬盘的虚拟几何规格和实际相同

  1. 读写时间影响因素

    1. 寻道时间(主导地位)
    2. 旋转延迟
    3. 实际数据传输时间
  2. 寻道时间优化算法

    1. 最短寻道优先SSF:处理与磁头最近的请求

      请添加图片描述

      1. 优点:效率高
      2. 缺点:两边的区域请求得到的服务较差,不公平
    2. 电梯算法:磁盘臂向一个方向移动并处理沿途请求,到达尽头后转向

      请添加图片描述

      1. 优点:公平,且对于任意一组请求,移动长度的上界都是柱面数的两倍
    3. 电梯算法改:处理完最高编号的请求后磁盘臂移动到最低编号的请求并继续向上

    4. 如果软件可以检查磁头下方的扇区号:驱动程序发出请求读写下一次要通过磁头的扇区

  3. 旋转时间优化算法:未完成的请求用扇区号排序

  4. 多驱动器优化算法:为每个驱动器维护一个请求表,空闲下来的驱动器立刻发寻道请求,当传输结束时检查是否有驱动器在正确柱面上

    1. 在:开始读写
    2. 不在:发出新的寻道命令
  5. 整体优化:一次读出多个扇区并缓存

    ​ 硬盘缓冲区:独立于操作系统,通常保存没有实际请求的块

5.4.4 错误处理

  1. 坏块处理

    1. 控制器处理
      1. 坏块映射到新块
      2. 坏块映射到下一块,所有之后的数据块向后顺移
        1. 优点:一次读写可以读出整个扇区
        2. 缺点:扇区包含数据时开销较大:重写前导码和所有数据
    2. 操作系统处理:必须有坏扇区列表,或者自己测试硬盘
      1. 创建一个包含坏扇区列表的文件
      2. 对应用软件隐藏坏块
  2. 机械臂故障:驱动程序发出重校准命令,让磁盘臂向最外面移动

    其他:控制器在芯片置起一个引脚,使自身当前动作清除并复位

    需要均匀位留时不能校准:AV盘,不会重新校准

请添加图片描述

5.4.5 稳定存储器

稳定存储器使用一对完全相同的磁盘,对应的块一同工作以形成一个无差错的块。当不存在错误时在两个驱动器上对应的块是相同的,读取任意一个都可以得到相同的结果。为了达到这一目的,定义了下述三种操作:稳定写;稳定读;崩溃恢复

请添加图片描述

5.5 时钟

时钟(clock)又称为定时器(timer),由于各种各样的原因决定了它对于任何多道程序设计系统的操作都是至关重要的。

5.5.1 时钟硬件

比较简单的时钟被连接到110V或220V的电源线上,这样每个电压周期产生一个中断,频率是50Hz或60Hz。

请添加图片描述

另一种类型的时钟由三个部件构成:晶体振荡器、计数器和存储寄存器,如图5-32所示。当把一块石英晶体适当地切割并且安装在一定的压力之下时,它就可以产生非常精确的周期性信号,典型的频率范围是几百兆赫兹,具体的频率值与所选的晶体有关。

5.5.2 时钟软件

**时钟硬件所做的全部工作是根据已知的时间间隔产生中断。涉及时间的其他所有工作都必须由软件——时钟驱动程序完成。**时钟驱动程序的确切任务因操作系统而异,但通常包括下面的大多数任务:

请添加图片描述

  1. 维护日时间。
  2. 防止进程超时运行。
  3. 对CPU的使用情况记账。
  4. 处理用户进程提出的alarm系统调用。
  5. 为系统本身的各个部分提供监视定时器。
  6. 完成概要剖析、监视和统计信息收集。

5.6 用户界面:键盘、鼠标和监视器

5.6.1 输入软件

键盘:包含一个微处理器,键被按下/释放时候发出中断并由驱动程序收集数据

  1. 键盘软件
    1. 非规范模式:驱动程序接受输入并原封不动地向上层传递
    2. 规范模式:驱动程序处理所有行内编辑,只把矫正后的行传给上级
  2. 回显:在显示器上显示输入的字符
  3. 特殊处理:折行,制表符和回车(UNIX),回车换行(Windows)

请添加图片描述

鼠标

  1. 橡皮球鼠标:通过橡皮球滚动定位
  2. 光学鼠标
  3. 鼠标步mickey:最小的移动单位

5.6.2 输出软件

  1. 文本窗口

    请添加图片描述

    ​ 转义序列:移动光标并在光标处插入/删除字符的命令集

  2. X窗口系统:非常好的移植性、灵活性和拓展性,运行在用户空间

    请添加图片描述

    1. X客户:运行程序,收发命令
    2. X服务器:收集键盘鼠标数据并将输出写在键盘上(必须运行在本机)
    3. X是一个窗口系统而不是GUI:编写窗口需要Xlib
    4. 窗口管理不是X系统的一部分
    5. 高度事件驱动
    6. 资源:保存一定信息的数据结构,可共享,生命周期短。
  3. GUI:WIMP窗口、图表、菜单和指向设备

    1. 输出送往特殊的电路板:图形适配器
    2. 面向消息:键盘或鼠标的输入被系统捕获并转化成消息,送到正在被访问的窗口所属于的程序
    3. 两种调用程序的方法
      1. 发送消息到窗口
      2. 投递消息到消息队列
    4. 总结:windows程序创建窗口,每个窗口有一个类对象,与每个程序相关联的是一个消息队列和一组处理过程,最终程序的行为由到来的事件驱动
  4. 位图

    1. windows元文件:聚集一组对GDI过程的调用,描述一个复杂的图画适用于windows程序之间传输图画
    2. DIB:解决位图不能跨设备缩放等问题
  5. 字体:TrueType字体

    1. 不是位图而是轮廓,每个点都是相当于原点,所以容易进行缩放:只需要每个坐标乘以比例因子
    2. 栅格化:以任何的期望率把字体转化成位图

5.7 瘦客户机

  1. 分布式机器的不便之处

​ 1. 必须维护大容量的硬盘和复杂的软件

​ 2. 定期备份

​ 3. 不容易资源共享

  1. 基本思想:从客户端剥离一切智能和软件,只将其作为显示器

  2. 五条命令

​ 1. Copy:显示器从视频RAM的一个部分移动数据到另一个部分

​ 2. sfill:单一像素值填充一个区域

​ 3. pfill:复制一个模式到某区域

​ 4. bitmap:由前景色和后景色的区域

5.8 电源管理

5.8.1 硬件问题

将硬件设置成多种状态——工作,睡眠,休眠和关闭,每一个状态都比前一个耗能少,但是唤醒时间和耗能多

5.8.2 操作系统问题

  1. 显示器:背光照明

    解决方法:显示器有若干区域组成,能够独立开启关闭

  2. 硬盘:维持高速旋转

    1. 一段时间不用后关闭:重新启动硬盘耗能较多
    2. 在RAM里维护大容量的高速缓存
    3. 操作系统发送硬盘状态消息给程序,使它们自由决定写操作时间
  3. CPU

    1. 降低电压:慢速运行更有效率
  4. 内存

    1. 刷新或者关闭高速缓存
    2. 将主存写进磁盘,然后关闭主存:较长加载时间
  5. 无线通信

    解决方法:计算机关闭无线设备时发消息给基站,让基站缓存信息

  6. 热量管理:风扇

    解决方法:操作系统监视温度,达到阈值后启动风扇

  7. 电池管理

    解决方法:操作系统持续监控电池,并改变其工作参数

  8. 应用程序接口

    解决方法:Windows使用ACPI高级电源管理接口给驱动程序发送命令,减少他们的能耗

5.8.3 应用程序问题

退化用户体验

操作系统发送硬盘状态消息给程序,使它们自由决定写操作时间

  1. CPU

    1. 降低电压:慢速运行更有效率
  2. 内存

    1. 刷新或者关闭高速缓存
    2. 将主存写进磁盘,然后关闭主存:较长加载时间
  3. 无线通信

    解决方法:计算机关闭无线设备时发消息给基站,让基站缓存信息

  4. 热量管理:风扇

    解决方法:操作系统监视温度,达到阈值后启动风扇

  5. 电池管理

    解决方法:操作系统持续监控电池,并改变其工作参数

  6. 应用程序接口

    解决方法:Windows使用ACPI高级电源管理接口给驱动程序发送命令,减少他们的能耗

5.8.3 应用程序问题

退化用户体验

例子:彩色视频使用黑白等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值