输入/输出(I/O)管理(操作系统笔记六)

输入/输出(I/O)管理(操作系统笔记六)


I/O 设备的概念和分类

I/O设备 就是可以将数据传入到计算机,或者可以接收计算机输出数据的外部设备, 属于计算机中的硬件部件

I/O设备的分类

I/O 控制器

I/O 设备机械部件电子部件 。机械部件主要用来执行具体的 I/O 操作,如我们看到的键盘鼠标等;电子部件通常是一块插入主板扩充槽的印刷电路板。

CPU无法直接控制 I/O 设备的机械部件,因此 I/O 设备还要有一个电子部件作为CPU和 I/O 设备机械部件间的媒介,用于实现CPU对设备的控制。这个电子部件就是 I/O 控制器,又称 设备控制器

I/O控制器

I/O 控制方式

I/O控制方式

DMA方式 仅在传送一个或多个数据块的 开始和结束 时,才需要CPU干预 ,整块数据的传送 是在DMA控制器 的控制下完成的。

  • DMA控制器中有如下4类寄存器
    • 命令/状态寄存器(CR) :用于接收从CPU发来的 I/O 命令或有关控制信息,或设备的状态
    • 内存地址寄存器(MAR) :输入时,它存放把数据从设备传送到内存的起始目标地址;输出时,它存放由内存到设备的内存源地址
    • 数据寄存器(DR) :用于暂存从设备到内存或从内存到设备的数据
    • 数据计数器(DC) :存放本次要传送的字节数

DMA控制方式与中断驱动方式的主要区别 :中断驱动方式在每个数据需要传输时中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时才中断CPU;且中断驱动方式数据传送是在中断处理时由CPU控制完成,而DMA控制方式是在DMA控制器的控制下完成的。

通道控制方式实现CPU、通道和I/O设备三者的并行操作

通道所执行的通道程序时放在主机的内存中的,所以 通道与CPU是共享内存的

I/O通道与DMA方式的区别 :DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的;另外,每个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。

I/O 软件层次结构

I/O子系统的层次结构

  1. 用户层软件 :实现与用户交互的接口,用户可直接调用在用户层提供的、与 I/O 操作有关的库函数,对设备进行操作。

  2. 设备独立性软件(又称系统调用处理层、设备无关性软件) :与设备的硬件特性无关的功能几乎都在这一层实现,实现的功能如下图

    设备独立性软件的作用

    逻辑设备表(LUT) 主要包括逻辑设备名、物理设备名、驱动程序入口。操作系统可以采用 两种方式管理逻辑设备表(LUT)

    • 整个系统只设置一张LUT :这意味着所有用户不能使用相同的逻辑设备名,因此只适用于单用户操作系统
    • 为每个用户设置一张LUT :各个用户使用的逻辑设备名可以重复,适用于多用户操作系统
  3. 设备驱动程序 :与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。不同的设备因内部硬件的不同,也有自己的驱动程序。

  4. 中断处理程序 :用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断进程。主要任务有:进行进程上下文的切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。(与硬件最近的一层)

  5. 硬件设备 :I/O 设备通常包括一个 机械部件 和一个 电子部件 。机械部件是设备本身,电子部件称为 设备控制器(或适配器) ,通常是一块插入主板扩充槽的印制电路版。

I/O 核心子系统

I/O核心子系统

假脱机技术(SPOOLing技术) 需要请求 “磁盘设备” 的设备独立性软件的服务,因此一般来说假脱机技术是在 用户层软件 实现的。但在 408考纲中归为I/O子系统需要实现的功能

假脱机技术(SPOOLing技术)

SPOOLing系统的组成如下图

SPOOLing技术的组成

SPOOLing技术

共享打印机使用的就是SPOOLing技术将独占式设备改造成了共享设备

设备的分配与回收

设备的固有属性可分为三种 : 1. 独占设备, 2. 共享设备 3. 虚拟设备

  • 从进程运行的安全性上考虑,设备分配有两种方式:
    1. 安全分配方式 :为进程分配一个设备后将进程阻塞,本次 I/O 操作完成后才将进程唤醒。(优点:破坏了 “请求和保持” 条件,不会死锁)(缺点:对于一个进程来说,CPU和 I/O 设备只能串行工作)
    2. 不安全分配方式 :进程发出 I/O 请求后,系统为其分配 I/O 设备,进程可继续执行,之后还可以发出新的 I/O 请求,只有某个 I/O 请求得不到满足时才将进程阻塞。(优点:进程的计算任务和 I/O 任务可以并行处理,使进程迅速推进)(缺点:有可能发生死锁)

之前还学过 静态分配(进程运行前为其分配全部所需资源,运行结束后归还)动态分配(进程运行过程中动态申请设备资源)

设备控制器通道之间的关系

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

设备分配的步骤

  • 以上分配方式的 缺点
    1. 用户编程时要提供 “ 物理设备名 ”,底层细节对用户不透明,不方便编程
    2. 若更换物理设备后,则程序无法运行
    3. 若用户请求的物理设备正在忙碌中,即使系统中有同类型的设备处于空闲中,进程也要阻塞等待
  • 改进方法 :建立 逻辑设备名(设备类型) 与物理设备名的映射机制,用户编程时只需要提供逻辑设备名

设备分配步骤的改进

逻辑设备表(LUT)建立了逻辑设备与物理设备名之间的映射关系

  • 逻辑设备表设置问题
    • 整个系统只有一张LUT :各用户所用的逻辑设备名不允许重复,适用于但用户操作系统
    • 每个用户一张LUT :不同用户的逻辑设备名可重复,适用于多用户操作系统

缓冲区管理

缓冲区 是一各存储区域,有 硬件 作为缓冲区的成本较高,容量也小,所以一般使用 内存 作为缓冲区。

缓冲区的作用

单缓冲区 :操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。

  • 采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M

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

双缓冲区 :操作系统会在主存中为其分配两个缓冲区。

  • 采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)

若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。

若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。

注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道

循环缓冲区 :将多个大小相等的缓冲区链接成一个循环队列。

  • in 指针,指向下一个可以冲入数据的空缓冲区
  • out 指针,指向下一个可以取出数据的满缓冲区

缓冲池 :由系统中共用的缓冲区组成

缓冲池的工作方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值