【操作系统】IO管理

简介: IO管理

一、I/O控制器

1、主要功能

接受和识别CPU发出的命令(控制寄存器)

向CPU报告设备的状态(状态寄存器)

数据交换(数据寄存器,暂存输入/输出的数据)

地址识别(由I/O逻辑实现)

2、组成

CPU与控制器之间的接口:实现控制器与CPU之间的通信

I/O逻辑:负责识别CPU发出的命令,并向设备发出命令

控制器与设备之间的接口:实现控制器与设备之间的通信

一个I/O控制器可能会对应多个设备

数据寄存器、控制寄存器、状态寄存器可能有多个

3、寄存器编址方式

1)内存映射I/O

控制器中的寄存器与内存统一编制

可以采用对内存进行操作的指令来对控制器进行操作

2)寄存器独立编制

控制器中的寄存器独立编制

需要设置专门的指令来操作控制器

二、I/O控制方式

[计算机组成原理-IO系统]

三、I/O软件层次结构

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

设备独立性软件

  1. 向上层提供统一的调用接口(如 read/write 系统调用)
  2. 设备的保护
  3. 差错处理
  4. 设备的分配与回收
  5. 数据缓冲区管理
  6. 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序

设备驱动程序:设置设备寄存器、检查设备状态

中断处理程序:进行中断处理

硬件:执行I/O操作,有机械部件、电子部件组成

直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的

没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的

四、I/O核心子系统

1、概述

2、假脱机技术

脱机技术:解决设备与CPU的速度矛盾,实现预输入缓输出

假脱机技术:又叫SPOOLing技术,用软件的方式模拟脱机技术

  1. 输入井和输出井:模拟脱机输入/输出时的磁带
  2. 输入进程和输出进程:模拟脱机输入/输出时的外围控制机
  3. 输入缓冲区和输出缓冲区:内存中的缓冲区,输入、输出时的"中转站"

3、设备的分配与回收

1)考虑的因素

  1. 固有属性 :独占设备、共享设备、虚拟设备(SPOOLing)
  2. 分配算法:先来先服务、优先级高者优先、短任务优先等
  3. 安全性:安全分配方式、不安全分配方式

2)静态分配与动态分配

静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源

动态分配:进程运行过程中动态申请设备资源

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

一个通道可控制多个设备控制器,每个设备控制器可控制多个设备。

设备控制表(DCT):每个设备对应一张DCT,关键字段:类型/标识符/状态/指向COCT的指针/等待队列指针

控制器控制表(COCT):每个控制器对应一张COCT,关键字段:状态/指向CHCT的指针/等待队列指针

通道控制表(CHCT):每个控制器对应一张CHCT,关键字段:状态/待队列指针

系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目,关键字段:设备类型/标识符/DCT/驱动程序入口

4)设备分配的步骤

  1. 根据进程请求的物理设备名查找SDT
  2. 根据SDT找到DCT并分配设备
  3. 根据DCT找到COCT并分配控制器
  4. 根据COCT找到CHCT并分配通道

只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送

缺点:用户编程时必须使用"物理设备名",若换了一个物理设备,则程序无法运行。若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待

5)设备分配步骤的改进

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

用户编程时使用逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过LUT)

  • 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复
  • 每个用户一张LUT:各个用户的逻辑设备名可重复

4、缓冲区管理

1)缓冲区的概念

一般利用内存作为缓冲区

缓冲区作用

  1. 缓解CPU与设备的速度矛盾
  2. 减少对CPU的中断频率
  3. 解决数据粒度不匹配的问题
  4. 提高CPU与I/O设备之间的并行性

2)单缓冲

当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出。

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

T > C,因此CPU处理完数据后暂时不能将下一块数据传送到工作区,必须等待缓冲区中冲满数据

T < C,因此缓冲区中冲满数据后暂时不能继续冲入下一块数据,必须等待CPU处理结束后将数据从缓冲区传送到工作区

处理一块数据平均耗时 Max(C, T)+M

分析问题的初始状态:工作区满,缓冲区空

3)双缓冲

T > C + M

T < C + M

处理一块数据平均耗时 Max(T, C+M)

分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空

4)循环缓冲

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

5)缓冲池

三个队列:空缓冲队列、输入队列、输出队列

四个缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区

目录
相关文章
|
6月前
|
Linux 编译器 C语言
【Linux】基础IO_4
【Linux】基础IO_4
31 3
|
6月前
|
存储 Linux
【Linux】基础IO_2
【Linux】基础IO_2
29 0
|
6月前
|
Linux Windows
【Linux】基础IO_3
【Linux】基础IO_3
29 0
|
6月前
|
存储 Linux 调度
【Linux】基础IO_1
【Linux】基础IO_1
32 0
|
7月前
|
存储 缓存 Linux
Linux基础IO
Linux基础IO
44 2
|
小程序 Linux C语言
【Hello Linux】基础IO(一)
【Hello Linux】基础IO
66 0
|
7月前
|
存储 算法 安全
非常详细!操作系统【IO核心子系统】
非常详细!操作系统【IO核心子系统】
|
Linux C语言 C++
【Hello Linux】基础IO(二)
【Hello Linux】基础IO(二)
123 0
|
存储 Linux C++
【Hello Linux】基础IO(三)
【Hello Linux】基础IO(三)
58 0
|
Unix Linux C语言