当前位置: 首页 > news >正文

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

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操作是否完成。

相关文章:

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

1.I/O设备 1.1 块设备 信息交换以数据块为单位,它属于有结构设备。 块设备传输速率较高,可寻址,且可对该设备随机地的读写。 栗子🌰:磁盘。 1.2 字符设备 信息交换以字符为单位,属于无结构类型。 字符…...

Linux实验记录:使用vsftpd服务传输文件

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: 为了解决在多样复杂的设备之间解决传…...

实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)

实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 (1)管理员登录 (2)实训方向管理 (3)公告信息管理 (4&#xff0…...

商品介绍和规则参数图片映射和IP设置

虚拟路径映射配置: registry.addResourceHandler("/image/productIntroImgs/**").addResourceLocations("file:D:\\java1234-mall-v3\\productIntroImgs\\");registry.addResourceHandler("/image/productParaImgs/**").addResourceL…...

【React】前端React 代码中预览展示excel文件

封装了ExcelView来展示excel文件,支持显示loading 1.安装依赖 npm i js-preview/excel源码 import React, { useEffect, useRef, useState } from react import jsPreviewExcel, { JsExcelPreview } from js-preview/excel import js-preview/excel/lib/index.cs…...

QButtonGroup使用介绍

一、简介 QButtonGroup是PyQt5库中的一个组件,主要用于组织和管理一组按钮。通过QButtonGroup,可以方便地实现单选框或多选框功能,统一处理按钮的信号,并且可以为按钮分组设定ID以进行识别。 1、原始工程 from PyQt5.Qt import …...

最近nvm安装报错的原因找到了——npm原淘宝镜像正式到期!

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 目录 背景 错误原因 问题排查 淘宝镜像 证书到期 问题解决 结语 背景 我们…...

docker面试问题二

如何防止Docker容器中的漏洞和攻击? 防止Docker容器中的漏洞和攻击是一个多层次、多方面的任务,涉及从镜像构建、容器运行到网络安全的整个生命周期。以下是一些关键措施: 使用官方和受信任的镜像: 总是从官方源或受信任的第三方…...

嵌入式中C 语言中的三块技术难点

C 语言在嵌入式学习中是必备的知识,甚至大部分操作系统都要围绕 C 语言进行,而其中有三块技术难点,几乎是公认级别的“难啃的硬骨头”。 今天就来带你将这三块硬骨头细细拆解开来,一定让你看明白了。 0x01 指针 指针是公认最难理…...

基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xf…...

[React源码解析] Fiber (二)

在React15及以前, Reconciler采用递归的方式创建虚拟Dom, 但是递归过程不可以中断, 如果组件的层级比较深的话, 递归会占用线程很多时间, 那么会造成卡顿。 为了解决这个问题, React16将递归的无法中断的更新重构为异步的可中断更新, Fiber架构诞生。 文章目录 1.Fiber的结构2…...

Nginx 多项目部署,vue刷新404 解决方案

网上找的资料大多都解决不了,废话不多说直接告诉你解决方法。 环境是 TP6 VUE前端官网 VUE 后台管理 部署 两个项目 刷新 404 解决方案 Nginx 配置 直接贴图 如果解决了,给我顶起来,让更多人 快速的解决。...

[C++]类和对象(中)

一:类的六个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中并不是什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为…...

Kubernetes operator(五)api 和 apimachinery 篇

云原生学习路线导航页(持续更新中) 本文是 Kubernetes operator学习 系列第五篇,主要对 k8s.io/api 和 k8s.io/apimachinery 两个项目 进行学习基于 kubernetes v1.24.0 代码分析Kubernetes operator学习系列 快捷链接 Kubernetes operator&a…...

接口自动化测试中解决接口间数据依赖

在实际的测试工作中,在做接口自动化测试时往往会遇到接口间数据依赖问题,即API_03的请求参数来源于API_02的响应数据,API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时,需要预先请求API_02接口&a…...

七、测试计划(软件工程)

1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.任务概述 2.1目标 2.2运行环境 2.3需求概述 2.4条件与限制 3.计划 3.1测试方案 3.2测试项目 3.3测试准备 3.4测试机构及人员 4.测试项目说明…...

ElementUI Form:Checkbox 多选框

ElementUI安装与使用指南 Checkbox 多选框 点击下载learnelementuispringboot项目源码 效果图 el-checkbox.vue &#xff08;Checkbox 多选框&#xff09;页面效果图 项目里el-checkbox.vue代码 <script> const cityOptions [上海, 北京, 广州, 深圳] export def…...

如何统一监听Vue组件报错

window.onerror 全局监听所有JS错误&#xff0c;包括异步错误但是它是JS级别的&#xff0c;识别不了Vue组件信息&#xff0c;Vue内部的错误还是用Vue来监听捕捉一些Vue监听不到的错误 errorCaptured生命周期 监听所有下级组件的错误返回false会阻止向上传播到window.onerror …...

python爬虫4

#1.练习 # &#xff08;1&#xff09; 获取网页的源码 # &#xff08;2&#xff09; 解析 解析的服务器响应的文件 etree.HTML # (3) 打印 import urllib.request urlhttps://www.baidu.com/ headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…...

【算法】约数之和(数论)

题目 给定 n 个正整数 ai&#xff0c;请你输出这些数的乘积的约数之和&#xff0c;答案对 1097 取模。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数 ai。 输出格式 输出一个整数&#xff0c;表示所给正整数的乘积的约数之和&#xff0c;答案需…...

走进CSS过渡效果的奇妙世界:详解CSS Transition

你是否曾在网页上看到一些酷炫的元素在状态变化时平滑而流畅地过渡&#xff1f;这就是CSS过渡效果的魔力所在&#xff01;在这篇博客中&#xff0c;我们将深入探讨CSS Transition&#xff0c;揭示其神奇的原理和如何在你的网页中运用这项技术。 什么是CSS Transition&#xff…...

C++入坑基础知识点

当学习了C语言之后&#xff0c;很多的小伙伴都想进一步学习C&#xff0c;但两者有相当一部分的内容都是重叠的&#xff0c;不知道该从哪些方面开始入门C&#xff0c;这篇文章罗列了从C到C必学的入门知识&#xff0c;学完就算是踏入C的大门了。 1. 命名空间 写C的时候&#xff…...

RabbitMQ面试

1. 什么是消息中间件 消息中间件是在分布式系统中传递消息的软件服务。它允许不同的系统组件之间通过消息进行通信&#xff0c;而无需直接连接到彼此。消息中间件通常用于解耦系统的各个部分&#xff0c;提高系统的可扩展性、灵活性和可维护性。 2. 消息中间件解决了什么问题…...

计算机网络(第六版)复习提纲21

SS4.6 互联网的路由选择协议 1 关于路由选择协议的基本概念 A 理想的路由算法&#xff08;路由选择协议的核心&#xff09;157 1 算法是正确和完整的 2 计算上简单 3 能适应通信量和网络拓扑的变化&#xff08;自适应性&#xff09; 4 稳定性 5 公平性 6 应当最佳&#xff08;特…...

2路DIN2路DO2路AIN远程4GRTU模块钡铼技术S270

钡铼技术的S270远程4G RTU模块是一款高性能的工业级远程终端单元&#xff0c;它支持2路数字输入(DIN)、2路数字输出(DO)以及2路模拟输入(AIN)&#xff0c;并通过4G网络实现数据的远程传输。这种模块的设计旨在满足各种工业自动化和监控需求&#xff0c;特别适用于那些位于偏远地…...

从经典到创新,盘点情人节最受欢迎的五款新潮礼物

随着情人节的到来&#xff0c;许多情侣们开始考虑为心爱的人挑选一份特别的礼物。而在这个充满爱意的日子里&#xff0c;我们不仅可以看到经典的礼物款式&#xff0c;也能发现许多新颖、时尚的新潮礼物。以下是今年情人节最受欢迎的五款新潮礼物&#xff0c;每一件都充满了浪漫…...

数据库管理-第141期 DG PDB - Oracle DB 23c(20240129)

数据库管理141期 2024-01-29 第141期 DG PDB - Oracle DB 23c&#xff08;20240129&#xff09;1 概念2 环境说明3 操作3.1 数据库配置3.2 配置tnsname3.3 配置强制日志3.4 DG配置3.5 DG配置建立联系3.6 启用所有DG配置3.7 启用DG PDB3.8 创建源PDB的DG配置3.9 拷贝pdbprod1文件…...

MySQL原理(二)存储引擎(3)InnoDB

目录 一、概况&#xff1a; 1、介绍&#xff1a; 2、特点&#xff1a; 二、体系架构 1、后台线程 2、内存池&#xff08;缓冲池&#xff09; 三、物理结构 1、数据文件&#xff08;表数据和索引数据&#xff09; 1.1、作用&#xff1a; 1.2、共享表空间与独立表空间 …...

基于Springboot的高校心理教育辅导设计与实现(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校心理教育辅导设计与实现(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…...

jenkins pipeline配置maven可选参数

1、在Manage Jenkins下的Global Tool Configuration下对应的maven项添加我们要用得到的不同版本的maven安装项 2、pipeline文件内容具体如下 我们maven是单一的&#xff0c;所以我们都是配置单选参数 pipeline {agent anyparameters {gitParameter(name: BRANCH_TAG, type: …...