操作系统快速入门笔记--5

这一节主要记录的是操作系统设备管理的知识

I/O设备

现代计算机系统通常配备大量的I/O设备,用于计算机系统与外部世界(如用户、其它计算机或电子设备等)进行信息交换或存储
I/O设备又称为外围设备或外部设备,简称外设
I/O操作:内存和I/O设备之间的信息传送操作

  • 不仅影响计算机的通用性和可扩充性,也是计算机
    系统综合处理能力和性价比的重要因素

分类

按信息传输方式分:
输入设备,输出设备,输入输出设备
按交互功能分:
人机交互设备,存储设备,机机通信设备
按设备管理分配:
字符设备
块设备:以固定大小的数据块进行信息交换
网络设备:用于与远程设备通信

设备管理的目标

克服设备和CPU速度的不匹配所引起的问题,使主机和设备并行工作,提高设备使用效率。
对设备进行抽象,屏蔽设备的物理细节和操作过程,配置驱动程序,提供统一界面,供用户或高层软件使用。

  1. 抽象位文件系统的结点,统一管理
  2. 裸设备:不被操作系统直接管理,由应用程序读写,I/O效率更高

设备管理的功能

  1. 设备中断处理
  2. 缓冲区管理
  3. 设备的分配和去配
  4. 设备驱动调度
  5. 实现虚拟设备

设备管理的层次

  1. I/O硬件 I/O设备及其接口线路,控制部件,通道
  2. I/O软件 系统I/O软件 用户空间I/O软件

设备控制器

为达到模块化和通用性的设计目标,通常将I/O设备中的机械部件和电子部件分开处理。
其中,电子部件称为设备控制器。
设备控制器又称为设备适配器、I/O控制器、I/O
控制接口,简称I/O模块或I/O接口。
操作系统与控制器交互,而非与设备交互。

设备控制器的功能

设备控制器是CPU与设备之间的接口,功能如下:

  1. 接受和识别CPU或通道发来的命令
  2. 实现数据交换
  3. 发现和记录设备及自身的状态信息,供CPU处理使用
  4. 当连接多台设备时,设备地址识别。

设备控制器的组成
操作系统快速入门笔记--5_第1张图片
设备控制器的组成部分.png

轮询方式

  1. 处理器向控制器发送一个I/O命令。
  2. 如果设备未就绪,则重复测试过程,直至设备就绪。
  3. 执行数据交换。
  4. 等待I/O操作完成后,才可以继续其它操作。


    操作系统快速入门笔记--5_第2张图片
    轮询方式.png

    特点:

  5. 处理I/O请求会终止原程序的执行
  6. CPU需要等待I/O设备就绪
  7. CPU需要参与数据传送
  8. CPU和设备只能串行工作,效率低下。

中断方式

流程:

  1. 处理器向控制器发出一个I/O命令,然后继续执行后续指令
  • 如果该进程不需要等待I/O完成,后续指令可以仍是该进程中的指令
  • 否则,该进程在这个中断上挂起,处理器执行其他工作
  1. 控制器检查设备状态,就绪后发起中断
  2. CPU响应中断,转向中断处理程序
  3. 中断处理程序执行数据读写操作
  4. 恢复执行原先程序


    操作系统快速入门笔记--5_第3张图片
    中断方式.png

    特点:

  5. 响应终端后会终止源程序的执行
  6. CPU不需要等待I/O设备就绪
  7. CPU需要参与数据传送
  8. CPU与设备部分并行操作,效率有所提高

直接存储器访问(DMA)方式

DMA模块:模拟处理器来访问主存和设备控制器之间的数据交换。

流程:

  1. 处理器向DMA模块发出I/O命令
  2. 处理器继续执行其它工作,DMA模块负责传送
    全部数据
  3. 数据传送结束后,DMA中断处理器。


    操作系统快速入门笔记--5_第4张图片
    DMA.png

特点:

  1. CPU不会终止源程序的执行
  2. CPU只在数据传送的开始和结束时参与
  • 开始时,CPU需要对DMA模块进行初始化
  • 结束时,CPU响应中断,但不必保存现场

DMA方式中的周期窃取

当DMA和CPU同时经总线访问内存时,CPU总是将总线的占有权让给DMA一个或几个主存周期
周期窃取对延迟CPU与主存的数据交换影响不大

  1. 数据传送过程是不连续的和不规则的
  2. CPU大部分情况下与Cache进行数据交换,直接访

    问内存较少。
    操作系统快速入门笔记--5_第5张图片
    CPU在IO控制中的作用.png

I/O通道

又称为通道控制器、I/O处理器
设备控制器包含自身专用的处理器和通道程序

  1. I/O指令不再由处理器执行,而是存在主存中,由I/O通道所包含的处理器执行
  2. 采用四级连接:处理器,通道,控制器,设备
    可控制多台同类或不同类的设备

流程:

  1. CPU在遇到I/O请求的时候启动制定通道。
  2. 一旦启动成功,通道开始控制I/O设备进行操作,CPU执行其他任务
  3. I/O操作完成后,I/O通道发出中断,CPU停止当前工作,转向处理I/O操作结束事件

CPU与通道并行工作。

带有局部存储器的I/O通道
操作系统快速入门笔记--5_第6张图片

总线

解决I/O设备速度不匹配的问题。
要使得主机和设备充分并行,提高系统效率。

单总线结构模型

将CPU、主存和I/O模块连接到同一组总线上
优点:结构简单,易于扩充
缺点:主存需要和I/O模块共用总线;设备增多会造成总线变长,进而增加传输时延;无法适用于大量高速设备。

三级总线

主存和Cache通过主存总线传送数据,主存总线和扩展总线上的I/O设备之间传送数据通过扩展总线接口缓冲。

优点:主存与I/O之间的数据传送与处理器的活动分离;
可以支持更多的I/O设备。
缺点:不适用于I/O设备数据速率相差太大的情形。


操作系统快速入门笔记--5_第7张图片
三级总线.png

采用南北桥的多级总线

通过存储总线、PCI总线、E(ISA)总线分别连接主存、高速I/O设备和低速I/O设备
优点:可以支持不同数据速率的I/O设备


操作系统快速入门笔记--5_第8张图片
南北桥.png

采用I/O通道的多级总线

支持CPU、主存和多个I/O通道之间的数据传送

支持I/O通道和I/O控制器,以及I/O控制器和设备之间的数据传送。
操作系统快速入门笔记--5_第9张图片
采用I/O通道的多级总线.png

下面介绍I/O软件

I/O软件

设计目标:

  1. 高效率:改善设备效率,尤其是磁盘I/O操作的效率
  2. 通用性: 用统一的标准来管理所有设备

设计思路:把软件组织成层次结构,低层软件用来屏蔽硬件细节,高层软件向用户提供简洁友善的界面。

主要考虑的问题:

  1. 设备无关性:编写访问文件的程序与具体设备无关。
  2. 出错处理:低层软件能处理的错误不让高层软件感知。
  3. 同步/异步传输: 支持阻塞和中断驱动两种工作方式。
  4. 缓冲技术:建立数据缓冲区,提高吞吐率。

I/O软件的层次结构

操作系统快速入门笔记--5_第10张图片
IO软件的层次结构.png

I/O中断处理程序

位于操作系统底层,与硬件设备密切相关,与系统其余部分尽可能少地发生联系。
进程请求I/O操作时,通常被挂起,直到数据传输结束后并产生I/O中断时,操作系统接管CPU后转向中断处理程序。
当设备向CPU提出中断请求时,CPU响应请求并转入中断处理程序。

功能:
检查设备状态寄存器的内容,判断中断产生的原因,根据I/O操作的完成情况进行相应的处理。

  1. 若数据传输有错,向上层软件报告设备的出错信息,实施重新执行。
  2. 若正常结束,唤醒等待传输的进程,使其转换为就绪态。
  3. 若有等待传输的I/O命令,通知相关软件启动下一个I/O请求。

设备驱动程序

包括与设备密切相关的所有代码。
从独立于设备的软件中接收并执行I/O请求

  1. 把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行。
  2. 监督设备是否正确执行,管理数据缓冲区,进行必要的纠错处理。

功能:

  1. 设备初始化:在系统初次启动或设备传输数据时,预置设备和控制器以及通道状态。
  2. 执行设备驱动例程:负责启动设备,进行数据传送。对于具有通道方式,还负责生成通道指令和通道程序,启动通道工作。
  3. 调用和执行中断处理程序。负责处理设备和控制器及通道所发出的各种中断。

设备驱动程序的层次

每个设备驱动程序只处理一种设备,或者一类紧密相关的设备。
设备驱动程序分为整体驱动程序和分层驱动程序

  1. 整体驱动程序直接向操作系统提供接口和控制硬件
    :适用于功能简单的驱动程序,效率较高,但较难迁移
  2. 分层驱动程序将驱动程序分成多层,放在栈中,系统接到I/O请求时先调用栈顶的驱动程序,栈顶的驱动程序可以直接处理请求或向下调用更低层的驱动程序,直至请求被处理。适用于功能复杂、重用性要求较高的驱动程序,结构清晰且便于移植,会增加部分系统开销。

独立于设备的I/O软件

执行适用于所有设备的常用I/O功能,并向用户层软件提供一致性接口。
功能:

  1. 设备命名:通过路径名寻址设备
  2. 设备保护:检查用户是否有权访问所申请设备
  3. 提供与设备无关的数据单位:字符数量,块尺寸
  4. 缓冲技术:传输速率,时间约束,不能直接送达目的地
  5. 设备分配和状态跟踪:分配不同类型的设备错误
  6. 错误处理和报告:驱动程序无法处理的错误

用户空间的I/O软件

库函数

  1. 一小部分I/O软件不在操作系统中,是与应用程序链接在一起的库函数,甚至完全由运行于用户态的程序组成。
  2. 系统调用通常由库函数封装后供用户使用,封装函数只是将系统调用所用的参数放在合适位置,然后执行访管指令来陷入内核,再由内核函数实现真正的I/O操作。

** SPOOLing软件**
在内核外运行的系统I/O软件,采用预输入、缓输出和井管理技术,通过创建守护进程和特殊目录解决独占型设备的空占问题。

你可能感兴趣的:(操作系统快速入门笔记--5)