操作系统 输入输出系统

news2024/11/12 5:56:22

输入输出系统

I/O系统的功能、模型和接口

  • 功能

    • 隐藏物理设备的细节:仅向上层进程提供少量的、抽象的读/写命令

    • 与设备无关性:用户不仅可以使用抽象的I/O命令,还可使用抽象的逻辑设备名来使用设备

    • 提高处理机和I/O设备的利用率:尽可能让处理机和I/O设备并行操作

    • 对I/O设备进行控制

      • 采用轮询的可编程I/O方式

      • 采用中断的可编程I/O方式

      • 直接存储器访问方式

      • I/O通道方式

    • 确保对设备的正确共享

      • 独占设备:互斥使用,如打印机,磁盘

      • 共享设备:如磁盘

    • 错误处理

      • 临时性错误:重试操作纠正

      • 持久性错误:向上层汇报

I/O系统的层次结构和模型

  • I/O软件的层级结构

  • I/O系统的上下接口:

    • I/O系统接口

    • RW/HW(软件/硬件)接口

  • I/O系统的分层

    • 中断处理程序

    • 设备驱动程序

    • 设备独立性软件

I/O系统接口

  • 块设备接口

    • 块设备:如磁盘,光盘存储器

      • 数据的存取和传输以数据块为单位

      • 传输效率较高

      • 可寻址

    • 隐藏了磁盘的二维结构,改变为一种按扇区编号的线性序列

    • 将抽象命令映射为低层操作

  • 流设备接口(通常为独占设备,用互斥方式实现共享)

    • 字符设备:如键盘,打印机

      • 数据存取和传输以字符为单位

      • 传输效率低

      • 不可寻址

    • get/put操作:建立字符缓冲区,顺序存取

    • in-control指令:统一的方式处理有差异的不同设备

  • 网络通信接口

I/O设备和设备控制器

  • I/O设备类型:

    • 存储设备,I/O设备

    • 低速/中速/高速设备

  • 设备与控制器之间的接口

    • 数据信号线

    • 控制信号线

    • 状态信号线

设备控制器

  • 基本功能

    • 接受和识别命令:控制寄存器,用来存放接受CPU传来的命令和参数,并进行译码

    • 数据交换:CPU和控制器之间,控制器和设备之间,数据寄存器

    • 标识和报告设备的状态:状态寄存器

    • 地址识别:识别控制的每个设备的地址,地址寄存器

    • 数据缓冲区:协调I/O设备和CPU传输的效率

    • 差错控制:数据传输时进行差错检测,并向CPU报告错误信息

  • 基本组成

    • 设备控制器与处理机的接口

    • 设备控制器与设备的接口

    • I/O逻辑

  • 寄存器独立编制和内存映像I/O

    • 寄存器独立编址:为每个控制寄存器分配一个I/O接口,设置特定的I/O指令

    • 内存映像I/O:不区分内存单元地址和设备控制器中的寄存器地址,统一了对内存和控制器的访问方法

I/O通道

建立独立的I/O操作,是一种特殊的处理机,区别:

  • 指令类型单一,局限于与I/O有关的指令

  • 通道没有自己的内存,而是与CPU共享内存

CPU向通道发送I/O指令,通道收到指令后从内存取出要执行的通道程序并执行,完成任务后再向CPU发送中断信号

  • 通道类型

    • 字节多路通道: 多个子通道按时间片轮转方式共享主通道

    • 数组选择通道:按数组方式传送数据,速率快,但只有一个分配型子通道,一段时间内只能执行一道通道程序,独占,利用率较低

    • 数组多路通道:多个非分配型子通道,且数据传送按数组方式进行

  • 瓶颈问题:通道数量不足,I/O慢,系统吞吐量下降

    • 解决办法:增加设备到主机间的通路而不增加通道

      • 一个设备连接到多个控制器上,一个控制器连接到多个通道上

中断机构和中断处理程序

  • 中断:CPU对I/O设备发来的中断信号的一种响应

    • 外中断:(CPU外部)外部设备引起,如I/O设备(字符设备,块设备,通信设备)

    • 陷入trap:内中断,CPU内部事件引起

  • 中断向量表

    • 为每种设备配以相应的中断处理程序,程序入口地址放在中断向量表的一个表项中

  • 中断优先级

  • 对多中断源的处理方式:

    • 屏蔽(禁止)中断

    • 嵌套中断

  • 中断处理程序

      一个进程请求I/O操作时,该进程被挂起,直到I/O设备完成I/O操作后,设备控制器向CPU发送一个中断请求,CPU响应后转向中断处理程序,中断处理程序处理完后解除相应进程的阻塞状态

        中断处理程序的处理过程

    1. 测定是否有未响应的中断信号:程序每执行完当前指令后,处理机都要测试是否有未响应的中断信号

    2. 保护被中断进程的CPU环境(若发现有未响应的中断信号)

      1. 保存处理机状态字PSW,下一条指令地址,CPU寄存器数据(压栈保存)

    1. 转入相应的设备处理程序:确定引起本次中断的I/O设备,发出确认信号,装入中断处理程序的入口地址

    2. 中断处理

      1. 正常完成中断

      2. 异常结束中断

    3. 恢复CPU现场并退出中断

      1. 屏蔽中断方式:回到被中断的进程,并恢复现场

      2. 中断嵌套方式:(若有)处理更高优先级的中断请求

  • I/O操作完成后,设备驱动程序必须检查本次I/O操作是否发生错误,并向上层软件报告,最终向调用者报告本次I/O执行情况

设备驱动程序

亦即设备处理程序,接受上层软件的抽象I/O要求化为具体要求,传送下层设备控制器发来的信号

  • 功能

  • 特点

    • 驱动程序是实现与设备无关的软件和设备控制器之间通信和转换的程序

    • 对于不同类型的设备,应配置不同的驱动程序,但相同的多个终端应设置一个终端驱动程序

    • 驱动程序与I/O设备采用的I/O控制方式紧密相关

    • 驱动程序与硬件紧密相关,其中一部分需用汇编语言编写

    • 驱动程序应允许可重入,即驱动程序可能一段时间内被多次调用

  • 处理过程

    • 将抽象要求转换为具体要求

    • 对服务请求进行校验

    • 检查设备的状态,如设备控制器的状态寄存器

    • 传送必要的参数

    • 启动I/O设备

对I/O设备的控制方式

四种方式

  • 轮询:CPU一直询问,忙等

  • 中断:CPU等中断期间可以做其他事

  • 直接存储器访问方式DMA:频率,数据按块中断,读或写连续的数据块

    • DMA控制器

  • 通道控制方式

    • 数据块可以离散

    • 通道程序(任务清单)

与设备无关的I/O软件

  • 物理设备名和逻辑设备名

  • I/O重定向:用于I/O操作的设备可以更换,而不必改变应用程序

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

  • 与设备无关的软件

设备分配

  • 考虑因素

    • 设备固有属性:独占设备,共享设备,虚拟设备

    • 设备分配算法:先来先服务,优先级高者服务

    • 设备分配中的安全性:安全分配方式,不安全分配方式

  • 数据结构:

    • 设备控制表DCT

    • 通道控制表CHCT

    • 系统设备表SDT

    • 改进:物理设备名换为逻辑设备名

          加入逻辑设备表LUT

    • LUT设置的两种方式

用户层的I/O软件

  • 系统调用(应用程序取得OS所有服务的唯一途径)和库函数

假脱机系统Spooling

simultaneous peripheral operating online

  • 假脱机技术:用软件模拟脱机(释放CPU)输入时的外围控制机功能,在联机情况下实现同时外围操作(输入输出)的技术

    • 通道技术,多道程序技术的基础上

  • 组成:

    • 输入井和输出井

    • 输入缓冲区和输出缓冲区

    • 输入进程和输出进程

    • 井管理程序:控制

  • 特点:

    • 提高I/O速度

    • 将独占设备改造为共享设备:共享打印机

    • 实现虚拟设备功能(逻辑上的设备)

假脱机打印系统

  • 磁盘缓冲区,打印缓冲区,假脱机管理进程和假脱机打印进程

    • 假脱机管理进程

      • 磁盘缓冲区中申请空闲盘块,并暂存要打印的数据

      • 为用户进程申请请求打印表,挂在假脱机文件队列上

    • 假脱机打印进程

      • 从假脱机文件队列的队首摘取一张请求打印表,按照要求将要打印的数据由输出井传送到内存缓冲区,再交付打印机打印

      • 重复该过程直至队列为空

  • 守护进程

    • 用户自己提供请求打印表,挂在文件队列上

缓冲区管理

  • 引入原因

    • 缓和CPU与I/O设备速度不匹配的矛盾

    • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制

    • 解决数据粒度不匹配的问题

    • 提高CPU与I/O设备之间的并行性

单缓冲区和双缓冲区

  • 单缓冲区

    • 磁盘把一块数据送到缓冲区时间:T

    • OS将缓冲区的数据送到用户区的时间:M

    • CPU对该块数据的计算时间:C

    • T和C之间可以并行

  • 双缓冲区

  • 单缓冲区任意时刻只能单向通信

  • 环形缓冲区

    • 使用:Getbuf,Releasebuf,计算进程,输入进程

    • 进程同步问题:系统受计算限制(Nexti 赶上Nextg),系统受I/O限制(Nextg 赶上Nexti)

缓冲池

  • 三个缓冲区队列

  • 四种工作缓冲区

  • 多个进程对缓冲区队列应互斥同步地使用

  • 工作过程

磁盘

  • 磁盘有多个磁盘片,每个磁盘片有一个或两个磁盘面surface

  • 每个磁盘面:

    • 磁道track,扇区sector(盘块、物理块)

  • 柱面,物理地址(柱面号,盘面号,扇区号)

  • 存储(读/写)以扇区为单位

  • 温切斯特盘低级格式化方式

    • 标识符字段ID Field,数据字段Data Field

  • 磁盘类型:固定头磁盘,移动头磁盘

  • 磁盘访问时间

    • 寻道时间

    • 延迟时间

    • 传输时间

磁盘调度算法

  • 先来先服务算法FCFS

    • 公平,平均寻道时间较长

  • 最短寻道时间优先SSTF

    • 平均寻道时间短,可能出现饥饿现象

  • 基于扫描的磁盘调度算法

    • 扫描算法SCAN

      • 也叫电梯算法

      • 基于磁头移动方向,直至最外层/最内层才掉头

      • 响应频率不平均

    • LOOK调度算法

      • 边移动边观察,若该方向上已经没有别的请求,可以立即掉头

    • 循环扫描算法C-SCAN

      • 只处理某个特定方向上的请求

      • 响应频率平均

    • C-LOOK调度算法

      • C-SCAN和LOOK结合

  • NStepSCAN算法和FSCAN算法

    • 处理由于某些具有较高访问频率磁道带来的“磁臂黏着“现象:磁臂停留某处不动

    • 将磁盘请求队列分成若干个子队列,队列之间用FCFS算法处理,每个子队列用SCAN处理

    • 处理某子队列时,若出现新的I/O请求,则将该请求放入其他队列

    • 只将队列分为当前队列和扫描期间新出现的请求组成的队列两个队列的是FSCAN算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1934019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA SpringBoot实现定时任务(保姆级教程,超详细!!!)

目录 1. 前言 2. 创建SpringBoot项目 3. Maven依赖引入 4. 创建定时任务 5. 问题:执行时间延迟和单线程执行 5.1 问题原因 5.2 解决方式 1. 前言 在现代化应用中,定时任务(Scheduled Tasks)是不可或缺的一部分&#xff…

pytorch学习(五)tensorboard使用

1. 创建环境 首先创建一个环境: conda create -n pytorch conda activate pytorch 然后安装tensorboard pip install tensorboard 安装opencv pip install opencv-python 2. 简单的案例 标量和图像的显示: 2.1标量实现的方法是add_scalar,第一个参数是给显…

Stable Diffusion:质量高画风清新细节丰富的二次元大模型二次元插图

今天和大家分享一个基于Pony模型训练的二次元模型:二次元插图。关于该模型有4个不同的分支版本。 1.5版本:loar模型,推荐底模型niji-动漫二次元4.5。 xl版本:SDXL模型版本 mix版本:光影减弱,减少SDXL版本…

21天学通C++:第十三、十四章节

第十三章:类型转换运算符 类型转换是一种机制,让程序员能够暂时或永久性改变编译器对对象的解释。注意,这并不意味着程序员改变了对象本身,而只是改变了对对象的解释。可改变对象解释方式的运算符称为类型转换运算符。 为何需要…

数据库端口LookUp功能:从数据库中获取并添加数据到XML

本文将为大家介绍如何使用知行之桥EDI系统数据库端口的Lookup功能,从数据库中获取数据,并添加进输入的XML中。 使用场景:期待以输入xml中的值为判断条件从数据库中获取数据,并添加进输入xml中。 例如:接收到包含采购…

Linux 06-01:简易shell编写

考虑一下这个与shell典型的互动:ls、ps 用下图的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell建立一个新的进程,然后在那个进程中运…

Three.js 实战【2】—— 船模型海上场景渲染

停止了好久没有更新three这方面的文章了,从上两年还是vue2,一下子都换到vue3了,下面这些three都是基于vue3来进行开发的哈,先看一下这篇文章实现的效果哈。其中关于模型什么的资源都放在Git上了 初始化场景 安装three就直接通过n…

Java——集合(Queue)

1.Queue 接口的常用功能 除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在 两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值( null 或 false &#xff…

RPA鼠标按键使用技巧

RPA鼠标按键使用技巧 Mouse.MouseAuto.Action命令出错,调用的目标发生了异常,Exception in Mouse.Action元素不可用怎么解决 出现问题 1.想要实现的效果鼠标移动到录屏工具的小球上2.点击开始按钮开始录屏现象,鼠标没有移动痕迹&#xff0c…

爬虫案例(读书网)(下)

上篇链接: CSDN-读书网https://mp.csdn.net/mp_blog/creation/editor/139306808 可以看见基本的全部信息:如(author、bookname、link.....) 写下代码如下: import requests from bs4 import BeautifulSoup from lxml import etreeheaders{…

SSD实现

一、模型 此模型主要由基础网络组成,其后是几个多尺度特征块。基本网络用于从输入图像中提取特征,因此它可以使用深度卷积神经网络。 单发多框检测选用了在分类层之前截断的VGG,现在也常用ResNet替代;可以设计基础网络&#xff0c…

【LeetCode】162. 寻找峰值

1. 题目 2. 分析 这道题的难点有二:第一,知道用二分法求解;第二,二分判断的标准是什么?传统的题目的二分标注都是跟某个固定的值做比较,但是此题不然。此题的比较对象是相邻的元素。 不要硬凭自己的脑子…

spring是如何解决循环依赖的,为什么不是两级

1. Spring使用三级缓存来解决循环依赖问题 Spring使用三级缓存来解决循环依赖问题,‌而不是使用两级缓存。‌ 在Spring框架中,‌解决循环依赖的关键在于正确地管理Bean的生命周期和依赖关系。‌循环依赖指的是两个或多个Bean相互依赖,‌如果…

FastApi地理坐标数据存取实践

说明: 应用Pydantic Model 验证/出入 数据, SqlAlchemy Model数据实体,Fastapi提供API机制支持。数据表的坐标字段采用Mysql的GEOMETRY类型目前还没成功使用Pydantic的Coordinate类型,待后续改良 要点: 输出的结果是…

多级表头固定列问题

父级的width,是需要固定的列的width的总和 参考: el-table 多级表头下对应列的固定

Android Studio 不再支持windows 7

Android Studio 一打开就报错: 无法找到入口 无法定位程序输入点 CreateAppContainerProfle 于动态链接库USERENV.dII 上。 截图如下: 经调查,是因为系统版本不兼容。 我目前的电脑环境:windows 7,但是现在的Android Studio要…

leetcode145. 二叉树的后序遍历,递归法+迭代法,全过程图解+步步解析,一点点教会你迭代法后序遍历

leetcode145. 二叉树的后序遍历,递归法迭代法 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出&#…

Java学习高级四

JDK8开始,接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…

H264解码器实现-帧间预测之MV预测

1.前言 本文章所说的MV预测是指计算当前块MV向量的预测值,该值与码流中传输的MV残差值相加即可得到实际的MV向量。请注意,在某些宏块类型的某种情况下是不需要进行MV预测的,他们的MV可以通过其他方法得出,本文只介绍MV预测过程。…

21.x86游戏实战-实现注入器

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…