【操作系统】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)缓冲池

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

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

目录
相关文章
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
1104 18
|
12月前
|
人工智能 自然语言处理 运维
干货|AI赋能教学开发-利用AI生成教案、课件和讲义
本文分享了高校教师利用AI工具设计课程方案和课件的经验,分为两部分。第一部分详细介绍使用GPT4o生成高质量课程大纲的过程,包括客户需求分析、提示词设计及优化调整。第二部分展示如何借助AIPPT快速制作精美课件,并介绍AIPPT的长文档解读和链接生成PPT等功能。此外,文章还分享了多个实用的AI工具、智能体和提示词技巧,助力提升教学效率与质量。
1963 3
|
存储 算法 Unix
操作系统(13)-----文件管理3
操作系统(13)-----文件管理
821 0
操作系统(13)-----文件管理3
|
数据采集 分布式计算 Kubernetes
Apache Flink 实践问题之ZooKeeper 网络瞬断时如何解决
Apache Flink 实践问题之ZooKeeper 网络瞬断时如何解决
258 4
|
存储 负载均衡 应用服务中间件
LVS负载均衡群集——NAT模式实操
LVS负载均衡群集——NAT模式实操
1513 0
|
小程序 JavaScript Java
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
294 0
|
PyTorch 算法框架/工具 Python
PyTorch中的forward的理解
PyTorch中的forward的理解
433 0
|
存储 安全 Nacos
使用KMS为MSE-Nacos敏感配置加密的最佳实践
本文主要介绍通过KMS密钥管理服务产生的密钥对敏感的AK等数据进行加密之后可以有效解决泄漏带来的安全风险问题,其次通过KMS凭据托管的能力直接将MSE的主AK进行有效管理,保障全链路无AK的业务体验,真正做到安全、可控。
93829 5
|
存储 编解码 Java
视频渲染的推荐8位YUV格式
视频渲染的推荐8位YUV格式
372 0
|
jenkins Java 持续交付
Jenkins Pipeline 流水线方式部署 SpringBoot 项目1
Jenkins Pipeline 流水线方式部署 SpringBoot 项目
912 0