您的当前位置:首页正文

【操作系统】五、输入输出(I/O)管理:1. I/O 管理概述(I/O控制器、I/O 控制方式、I/O 软件层次结构、层次间接口)

2024-11-26 来源:个人技术集锦

输入输出(I/O)管理

十、I/O 管理

“I/O”就是“输入/输出”(Input/Output)。

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

系统为每台设备确定一个编号以便区分和识别设备,这个编号叫设备的绝对号

UNIX系统将外部设备抽象为一种特殊文件,用户可以使用与文件操作相同的方式对外部设备进行操作。

1.设备分类

  • 1)按使用特性分类:
  • 2)按传输速率分类:
  1. 低速设备
  2. 中速设备
  3. 高速设备
  • 3)按信息交换的单位分类
  1. 块设备

    数据传输的基本单位是。传输速率较高,可寻址,即对它可随机地读/写任一块。如磁盘。

    • 特征:可寻址
    • I/O控制方式主要采用DMA
  2. 字符设备

    数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式。如鼠标键盘。

2. I/O 控制器

I/O设备分为机械部件、电子部件。

  • 机械部件

    机械部件主要用来执行具体I/O操作。

    如:我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏;移动硬盘的磁臂、磁盘盘面。

  • 电子部件I/O控制器、设备控制器)

    电子部件通常是一块插入主板扩充槽的印刷电路板。

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

注:在计组中也叫“I/O接口”。

CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。

2.1功能

I/O控制器的功能:

  1. 接受和识别CPU发出的命令;

    如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器来存放命令和参数。

  2. 向CPU报告设备的状态;

    I/O控制器中会有相应的状态寄存器,用于记录l/O设备的当前状态。如:1表示空闲,0表示忙碌。

  3. 数据交换;

    I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据。

2.2组成

I/O控制器的组成:

【注意】

  1. 一个I/O控制器可能会对应多个设备
  2. 数据寄存器控制寄存器状态寄存器可能有多个。(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。
    • 有的计算机会让这些寄存器占用内存地址的一部分,与内存地址编址连续,称为内存映像I/O
      • 内存映像I/O优点:简化了指令。可以采用对内存进行操作的指令来对控制器进行
        操作
    • 另一些计算机则采用I/O专用地址,就是内存是内存的编码,控制器寄存器从0开始有新编址,即寄存器独立编址
      • 寄存器独立编址缺点:需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号。

❗3. I/O 控制方式

详见: - 3. I/O控制方式

3.1 程序直接控制方式

CPU会 轮询 检查控制器状态。

  • CPU干预的频率

很频繁,I/O操作开始之前、完成之后需要CPU介入,并且在等待l/O完成的过程中CPU需要不断地轮询检查。

  • 数据传送的单位

每次读/写一个

  • 数据的流向

读操作(数据输入):I/O设备→CPU(指CPU寄存器)→内存。

写操作(数据输出):内存→CPU→I/O设备。

每个字的读/写都需要CPU的帮助。

  • 主要缺点和主要优点

优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)。

缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。

【注意】它不会进入阻塞态。

3.2 中断驱动方式

引入 中断机制 。流程描述:

  1. 由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。
  2. 当I/O完成后,控制器会向CPU发出中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。
  3. 处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。
  4. 接着,CPU恢复等待l/O的进程(或其他进程)的运行环境,然后继续执行。

【注意】

  1. CPU会在每个指令周期的末尾检查中断;
  2. 中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。

  • CPU干预的频率

每次I/O操作开始之前、完成之后需要CPU介入。等待I/O完成的过程中CPU可以切换到别的进程执行。

  • 数据传送的单位

每次读/写一个字

  • 数据的流向

读操作(数据输入):I/O设备→CPU→内存。

写操作(数据输出):内存→CPU→I/O设备。

  • 主要缺点和主要优点

优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。

缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间

❗3.3 DMA方式

与“中断驱动方式”相比,DMA方式(Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:

  1. 数据的传送单位是“”。不再是一个字、一个字的传送;
  2. 数据的流向是从设备直接放入内存,或者从内存直接到设备。
  3. 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

  • CPU干预的频率

仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

  • 数据传送的单位

每次读/写一个或多个(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)

  • 数据的流向(不再需要经过CPU

读操作(数据输入):I/O设备→内存。

写操作(数据输出):内存→I/O设备。

  • 主要缺点和主要优点

优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升

多用于块设备(eg.磁盘)。

缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。

如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成。

3.3.1 DMA控制器

DMA控制器也是一种特殊的I/O控制器

3.4 通道控制方式

通道:一种硬件,可以理解为是“弱鸡版的CPU”。通道可以识别并执行一系列通道指令。

与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存

  • CPU干预的频率

极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。

  • 数据传送的单位

每次读/写一组数据块。

  • 数据的流向(在通道的控制下进行)

读操作(数据输入):I/O设备→内存。
写操作(数据输出):内存→I/O设备。

  • 主要缺点和主要优点

缺点实现复杂,需要专门的通道硬件支持

优点:CPU、通道、I/O设备可并行工作,资源利用率很高。

❗4. I/O 软件层次结构

  • 用户层软件
  • 设备独立性软件(设备无关性软件)
  • 设备驱动程序
  • 中断处理程序

4.1用户层软件

用户层软件实现的功能:

  1. 向上,实现了与用户交互的接口,用户可直接使用该层提供的、与l/O操作相关的库函数对设备进行操作。
  2. 向下,将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务。

eg:printf("hello, world!");会被翻译成等价的write系统调用,当然,用户层软件也会在系统调用时填入相应参数。

拓展:Windows操作系统向外提供的一系列系统调用,但是由于系统调用的格式严格,使用麻烦,因此在用户层上封装了一系列更方便的库函数接口供用户使用((Windows API)。

❗4.2设备独立性软件

设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。I/O系统的最高层软件(在往上就是用户)。

  • 什么是设备独立性?

设备独立性:是指操作系统把所有外部设备统一当作成特殊文件来看待,只要安装它们的驱动程序,任何用户都可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。

  • 为什么要引入设备独立性?(优点)

引入设备独立性后可以:

  1. 可以方便用户操作,易于实现IO重定向;
  2. 使程序运行不受具体机器的影响;
  3. 调高设备的利用率和分配时的灵活性;
  4. 提高系统的可适应性和可扩展性;

  • 设备独立性软件主要实现的功能(如何实现设备独立性):
  1. 向上层提供统一的调用接口(如read/write系统调用)。

    提供:

    • 控制寄存器
    • 状态寄存器
    • 控制命令
  2. 设备的保护

    原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。

  3. 差错处理

    设备独立性软件需要对一些设备的错误进行处理。

  4. 设备的分配与回收

  5. 数据缓冲区管理

    可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异。

  6. 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序

    用户或用户层软件发出l/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名。

    eg:去学校打印店打印时,需要选择打印机1/打印机2/打印机3,其实这些都是逻辑设备名

    设备独立性软件需要通过“逻辑设备表LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序。

    注:这个也是对设备进行分配的改进方法(见本章6.2.4设备分配的步骤)。

4.3设备驱动程序

设备驱动程序:主要负责对硬件设备的具体控制(写命令),将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等。

【注意】驱动程序一般会以一个独立进程的方式存在。

不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。

4.4中断处理程序

详见:计算机组成原理 - 7.输入输出系统 - 3.2程序中断方式

操作系统 - 1.操作系统 - 4.中断、异常

当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。

【考点】 理解并记住I/O软件各个层次之间的顺序,要能够推理判断某个处理应该是在哪个层次完成的。

最常考的是:设备独立性软件设备驱动程序这两层。

只需理解一个特点即可:

  • 直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;
  • 没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的。

5. 层次间接口

  • 用户层软件&设备独立软件之间有:输入输出 应用程序接口
  • 设备独立软件&设备驱动程序之间有:设备 驱动程序接口

5.1输入输出 应用程序接口

  • 字符设备接口

get/put系统调用:向字符设备读/写一个字符

  • 块设备接口

read/write系统调用:向块设备的读写指针位置读/写多个字符

seek系统调用:修改读写指针位置。

  • 网络设备接口

网络设备接口,又称"网络套接字(socket)接口”。

socket系统调用:创建一个网络套接字,需指明网络协议(TCP? UDP? )。

bind:将套接字绑定到某个本地“端口”。

read/write:从套接字读/写数据。

5.1.1阻塞、非阻塞I/O

阻塞I/O:应用程序发出I/O系统调用,进程需转为阻塞态等待。

eg:字符设备接口――从键盘读一个字符get、scanf。

非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待

eg:块设备接口――往磁盘写数据write。

5.2设备 驱动程序接口

类似虚拟文件系统(VFS)

显示全文