【操作系统·考研】I/O管理概述

news2024/10/5 17:32:26

1.I/O设备

1.1 块设备

信息交换以数据块为单位,它属于有结构设备。
块设备传输速率较高,可寻址,且可对该设备随机地的读写。
栗子🌰:磁盘。

1.2 字符设备

信息交换以字符为单位,属于无结构类型。
字符设备传输速率低,不可寻址,并且时长采用中断I/O方式。
栗子🌰:打印机。
image.png

分类

  1. 低速设备:传输速率仅为几B ~ 几百B。如键盘、鼠标等。
  2. 中速设备:传输速率为几KB ~ 几MB。如激光打印机等。
  3. 高速设备:传输速率为数百MB ~ 数十GB。如磁盘机、光盘机等。

字符设备属于独占设备,访问属于互斥访问。

2.I/O接口(设备控制器)

2.1 概述

I/O接口位于CPU与设备之间,它既要与CPU通信,又要与设备进行通信,具有按CPU发来的命令去控制设备工作的功能。

2.2 结构

  • 设备控制器与CPU的接口
    • 三类信号线:数据线、地址线、信号线。
    • 两个寄存器
      • 数据寄存器:存放从设备送来的输入数据或从CPU送来的输出数据。
      • 控制/状态寄存器:存放从CPU送来的控制信息或设备送来的状态信息。
  • I/O逻辑
    • 功能:用于实现对设备的控制。
    • 通过一组控制线对CPU送来的I/O命令进行译码,通过一组地址线对CPU送来的地址进行译码,然后相应地对所选设备进行控制。
  • 设备控制器与设备的接口
    • 由于一个设备控制器可能会与多个设备相连,因此一个设备控制器中可能有多个设备接口。
    • 每个设备接口中存在数据、状态、控制三种类型的信号。

为了便于上层软件的编制,设备控制器通常需要提供控制寄存器、状态寄存器和控制命令。

2.3 功能

  1. 接收和识别CPU送来的命令,如磁盘控制器能接收到读、写、控制等信号。
  2. 数据交换,实现主存 - 设备控制器 - 设备之间的数据传输。
  3. 标识和报告设备的状态,以供CPU处理。
  4. 地址识别。
  5. 数据缓冲。
  6. 差错控制。

3.I/O端口

3.1 概述

I/O端口是指设备控制器中可被CPU直接访问的寄存器。

3.2 分类

  1. 数据寄存器:实现CPU和外设之间的数据缓冲。
  2. 状态寄存器:获取执行结果和设备的状态信息,以告知CPU外设是否准备好了。
  3. 控制寄存器:由CPU写入,以便启动命令或更改设备模式。

3.3 与CPU通信的方式

image.png

  1. 独立编址:为每个端口分配一个I/O端口号,所有I/O端口形成一个I/O端口空间。普通用户不能对其进行访问,只有OS的特殊的I/O指令才能访问端口。
  2. 统一编址:每个端口被分配唯一的内存地址,且不会有内存被分配这一地址,通常分配给端口的地址靠近地址空间的顶端。

4.I/O控制方式

4.1 程序直接控制方式

4.1.1 概述

计算机从外设读取的每个字,C{I都需要对外设状态进行循环检查,知到确定该字已经在I/O控制器的数据寄存器中。
image.png

4.1.2 优点

简单,易于实现。

4.1.3 缺点

在该方式中,由于CPU的高速性和I/O设备的低速性,导致CPU的绝大部分时间都在处于等待I/O设备完成数据I/O的循环测试中,造成了CPU资源的极大浪费,导致CPU的利用率极低。

4.2 中断驱动方式

4.2.1 概述

该方式的思想是允许I/O设备主动打断CPU的运行并请求服务,从而“解放”CPU。

4.2.2 工作过程

CPU向I/O控制器发出一个读命令,保存当前运行环境的上下文,然后就可以干其他事情去了,它将在每条指令的执行默认检查有无中断产生,I/O控制器这边在接收到CPU的指令后,便开始启动I/O工作,从外部读取数据到I/O控制器的数据寄存器中,待数据准备好后,便向CPU发出一个I/O中断,告知其本次数据已经准备好了,CPU执行到当条指令的执行末尾时,开始检查有无中断,发现有个I/O中断,于是CPU便保存当前执行环境的上下文,然后去执行中断处理程序,处理该I/O中断,将数据从I/O控制器那里读到CPU这边的寄存器中,然后继续向I/O控制器发出下一次的读写请求,然后继续忙其他事情去了,如此反复。
image.png

4.2.3 评估

该方式比程序直接控制方式有效,但由于每个字的传输还需要经过CPU,这就导致该方式仍要消耗较多的CPU时间。

4.3 DMA方式

4.3.1 概述

该方式的思想是直接在内存外设之间开辟一条直接的数据通路,彻底“解放”CPU!!!

这条数据通路只是逻辑上的,实际并未建立一条真正的物理通路,而通常是通过总线进行数据传送的。

4.3.2 特点

  1. 基本的传送单位是块。
  2. 所传送的数据是直接从外设送入内存,或者相反。
  3. 仅在传送一个或多个数据的开始和结束阶段,才需CPU干预,整块数据的传送是在DMA控制器的控制下完成的。

4.3.3 DMA控制器(DMAC)的组成

image.png

  • 命令/状态寄存器(CR):接收CPU送来的I/O命令、有关控制信息以及设备的状态信息。
  • 内存地址寄存器(MAR):在输入时,它存放数据从设备传送到内存的起始目标地址,在输出时,它存放从内存到设备的内存源地址。
  • 数据寄存器(DR):存放从设备到内存或从内存到设备的数据。
  • 数据计数器(DC):存放本次要传送的字(节)数。

4.3.4 工作过程

CPU接收到I/O设备的DMA请求时,它给DMAC发出一条命令并设备MAR和DC的值后,启动DMAC,然后忙其他事情去了,后面的数据传送及其控制将交由DMAC全权处理,待这一批数据传送完成后,DMAC将发送一个中断信号给CPU,告知其本次数据传送完成,CPU则根据该中断执行中断处理逻辑,执行一些本次数据传送的善后工作,收个尾。

系统将数据从磁盘读到内存的过程:

4.3.5 评估

DMA方式在一批数据全部传送完成后才中断CPU,而中断方式需要每传送一个数据就中断一次CPU;DMA方式的数据传送是在DMA控制器的控制下完成的,而中断方式则是在中断处理时由CPU完成。

4.4 通道控制方式

4.4.1 概述

I/O通道是指专门负责I/O的处理机,他可以进一步减少CPU的干预,将对一个数据读写为单位的干预转为对一批数据读写为单位的干预。同时,它可以实现CPU、通道、I/O设备三者的并行工作,从而整体上进一步提升系统的资源利用率。

通道又称I/O处理机,它用于实现内存外设之间的数据传送。

通道是一种特殊的处理器(不是软件),因此通道技术是一种硬件机制。
编制好的通道程序存放在内存中。
来自通道的中断将由设备管理负责处理。

通道控制设备控制器,设备控制器控制设备工作。三者是层层递进的关系。

4.4.2 工作过程

当CPU要完成一批数据的读写操作时,向I/O通道发出一条I/O指令,以给出要执行的I/O通道程序的首地址和要访问的I/O设备,然后通道接收到该命令后将执行通道程序以完成CPU分配的任务,数据传送完成后将向CPU发出中断请求。

4.4.3 评估

  • I/O通道的指令类型单一,没有自己的内存,通道所执行的程序是放在自己内存中的,与CPU共享内存。
  • 通道控制方式下,传输的数据块的大小、内存位置将由通道自己控制,此外,一个通道可以控制多条设备与内存进行数据交换,而DMAC只能对应一台设备与内存进行数据交换。

字节多路通道含有很多非分配型的子通道,其数量可达几十甚至数百个,每个通道可连接一个设备并控制该设备的I/O操作,这些子通道按照时间片轮转的方式使用主通道,各个通道每完成其I/O设备的一个字节的交换,便让出主通道的使用权,因此,字节多路通道适合于低速或中速I/O设备。


5.I/O软件的层次结构

image.png

5.1 用户层I/O软件

5.1.1 概述

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

一般而言,大部分的I/O软件都在OS内部,只有小部分处在用户层。
用户层软件必须通过一组系统调用来获取OS服务。

5.2 设备独立性软件

5.2.1 概述

用于实现用户程序与设备驱动器的统一接口、设备命令、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。

设备独立性又称设备无关性,即使得应用程序独立于具体使用的物理设备。在应用程序中,使用逻辑设备来请求使用某类设备,而在系统实际执行时,需要将逻辑设备通过设备映射表(DMT)映射成物理设备名使用。
使用逻辑设备名的优势:

  1. 增加设备分配的灵活性。
  2. 易于实现I/O的重定向,指用于I/O操作的设备可以更换而不必更换应用程序。

5.2.2 功能

  1. 执行所有设备的公用操作。比如:对设备的分配与回收、将逻辑设备名映射为物理设备名、对设备进行保护、缓冲管理、差错控制、屏蔽设备之间信息交换单位大小和传输速率的差异等。
  2. 向用户层或文件层提供统一接口。无论何种设备,它们向用户提供的接口是相同的。比如,在对各种设备的读/写操作,在应用程序中都统一使用read/write命令。

5.3 设备驱动程序

5.3.1 概述

与硬件直接相关,负责具体实现OS对设备发出的操作命令,驱动I/O设备工作的驱动程序。
它是I/O进程与设备控制器之间的通信程序,通常以进程的形式存在。
设备驱动程序向上层用户程序提供一组标准接口以屏蔽不同设备之间的差异,同时这还用于接收上层软件发来的抽象I/O要求,然后将抽象要求转换为具体命令发送给设备控制器。控制I/O设备工作。当然,它也接收设备控制器发过来的信号,然后将其传递给上层软件。

一个设备驱动程序对应同一类型的设备(一类设备),而不对应特定类型的特定设备。

5.4 中断处理程序

5.4.1 概述

用于保存被中断进程的CPU环境,然后转入相应的中断处理程序进行处理,处理完毕后再恢复原来的CPU现场,然后返回到被中断进程。

5.4.2 功能

进行进程的上下文切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。

由于中断处理与硬件密切相关,因此置于OS的底层。

6.应用程序I/O接口

6.1 字符设备接口

get:从缓冲区(由于字符设备不可寻址,只能顺序读取,因此通常为字符设备健康一个字符缓冲区)中获取一个字符。
put:往缓冲区输入一个字符。
in-control:包含了许多参数,每个参数表示一个与具体设备相关的特定功能。(由于字符设备种类繁多,因而设立该命令来处理这种情况)
互斥共享:由于字符设备属于独占设备,因此还需要提供加锁与解锁指令,以实现互斥访问。

6.2 块设备接口

隐藏磁盘的二维结构:将每个扇区的地址用磁道号和扇区号表示。

计算柱面号、磁道号、扇区号的工作是由设备驱动程序负责完成的。

抽象命令映射为低级命令:将上层发来的对文件或设备的打开、读、写等相关抽象命令转换为设备能够识别的较低层的具体操作。
内存映射接口通过内存的字节数来访问磁盘,而不提供读/写磁盘的操作。映射文件到内存的系统调用将返回一个包含文件副本的虚拟内存地址,只需要在访问内存映像时,才由虚拟存储器调页。

6.3 网络设备接口

许多OS提供的网络设备接口上网络套接字接口,套接字接口的系统调用使应用程序能够创建本地的套接字连接到远程的应用程序创建的套接字,从而借此发送和接收数据。

OS中的I/O接口还分为:阻塞与非阻塞I/O接口。
阻塞I/O:进程进行I/O操作时,将被阻塞,需要等待I/O操作完成。(大多数OS提供的I/O接口)
非阻塞I/O:进程进行I/O操作时,不被阻塞,进程需要通过轮询的方式来查询I/O操作是否完成。

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

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

相关文章

扩展鸿蒙textinput组件

扩展鸿蒙textinput组件,支持快速扩展展性,标题文本等,文本内容双向绑定、文本组件快速复用。 组件代码 /*** 单选文本*/ Component export default struct DiygwInput{//绑定的值Link value:string;//未选中图标State labelImg: Resource …

《热辣滚烫》预售狂潮来袭,贾玲、马丽、杨紫三大女神联袂出演。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 《热辣滚烫》预售票房一日破1300万,燃爆春节档&am…

自定义Dockerfile构建运行springboot

自定义Dockerfile构建运行springboot 通过dockerfile生成自定义nginx镜像 !!!docker 必须在linux环境下才能进行如果你是window则需要装虚拟机 新建一个文件名字为Dockerfile,无需后缀 文件完整名就是Dockerfile,也可以自定义d…

有向图的拓扑排序-BFS求解

题目 给定一个n个点m条边的有向图,图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。 若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称…

linux中的makefile

(码字不易,关注一下吧w~~w) makefile文件是用来管理项目文件,通过执行make命令,make就会解析并执行makefile文件。 命名:makefile或者Makefile 规则: 目标文件:依赖文件 (tab)命…

Narrative Visualization: Telling Stories with Data

作者:Edward Segel、Jeffrey Heer 发表:TVCG, 机构:UW Interactive Data Lab 【原斯坦福可视化组】 1.概述 静态可视化:在一大串的文本描述中,可视化作为提供证据和细节的图表出现新兴可视化&#xff1a…

设计模式学习笔记(一):基本概念;UML

文章目录 参考面向对象的设计原则创建型模式结构型模式行为型模式 UML视图图(Diagram)模型元素(Model Element)通用机制类之间的关系关联关系复杂!!聚合关系组合关系 依赖关系泛化关系接口与实现关系 参考 https://github.com/fa…

ubuntu开机报错/dev/nume0n1p2:clean

本来是开机卡在这个界面,经过以下操作,变成这种了 现在的问题变成linux卡在 failed to start NVIDIA Persistence Daemon 按照下面的操作方法,可以有开机界面了。但是输入密码后,一直在登录界面 1.方式一:重新安装显…

回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制) 目录 回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制&…

Python爬虫实战 | 京东平台电商API接口采集京东商品京东工业商品详情数据

item_get-获得JD商品详情API测试 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cac…

C++多线程学习[六]: 多线程之间的同步

一、同步问题 实际开发场景中有很多需要同步的情况,例如,音频和视频的同步输出、或者通讯能够第一时间同步接受处理… 二、多线程同步demo 可以看到cond可以阻塞等待(wait)可以通知一个线程(notify_one)也可以通知所有的线程&am…

SQL Server数据库日志查看若已满需要清理的三种解决方案

首先查看获取实例中每个数据库日志文件大小及使用情况,根据数据库日志占用百分比来清理 DBCC SQLPERF(LOGSPACE) 第一种解决方案: 在数据库上点击右键 → 选择 属性 → 选择 文件,然后增加数据库日志文件的文件大小。 第二种解决方案 手动…

如何使用VS Code编写小游戏并实现公网游玩本地游戏【内网穿透】

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程,我们将通过VS Code实现远程开发MENJA小游戏,并通过cpolar内网穿透发布到公网,分…

细说开源软件的影响力分析

开源软件的影响力分析 一、开源软件如何推动技术创新 开源软件以其开放源代码的特性,极大地推动了全球软件技术的创新和发展。这种开放性不仅使得开发者能够自由地查看、修改和使用源代码,还促进了全球开发者之间的深度协作和交流。 1.1 促进全球协作&…

C/C++内存管理的底层调用逻辑

✨Blog:🥰不会敲代码的小张:)🥰 🉑推荐专栏:C语言🤪、Cpp😶‍🌫️、数据结构初阶💀 💽座右铭:“記住,每一天都是一個新的開始&#x1…

追觅发布多款旗舰新品,双机械臂扫地机器人X40领衔登场

2月2日,追觅科技全球首创仿生“双”机械臂新品发布会在苏州举行。会上,追觅科技中国区总裁郭人杰分享了追觅科技全球化发展的业绩成果。郭人杰称,2019-2023年,追觅科技5年复合年增长率超过100%,增速领跑智能清洁行业&a…

【leetcode题解C++】450.删除二叉搜索树中的节点 and 669.修剪二叉搜索树 and 108.将有序数组转换为二叉搜索树

450. 删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可…

超多制作模板的姓氏头像生成器微信小程序源码

超多制作模板的姓氏头像生成器微信小程序源码,这是一款姓氏头像制作小工具,内含丰富多样的模板提供制作。 以前的基本是固定位置生成,这款制作支持拖拽调整位置,自定义颜色,阴影等等。

2022年9月电子学会青少年软件编程 中小学生Python编程等级考试二级真题解析(判断题)

2022年9月Python编程等级考试二级真题解析 判断题(共10题,每题2分,共20分) 26、字典中的键是唯一的,不能重复。而值对应于键,值是可以重复的。 答案:对 考点分析:考查字典相关知识,字典中的键是唯一的,不允许出现重复;字典的值可以是任意类型的对象,可以是数字、…

(学习日记)2024.02.01:引用变量 / 默认实参 / 一元作用域运算符 / 函数重载

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…