【操作系统】输入/输出(I/O)管理

王道笔记

一、I/O管理描述

1.1 I/O设备的概念和分类

1.1.1 什么是I/O设备

       “I/O”就是“输入/输出”(Input/Output)

       I/O设备机会可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。下图就是将一些常见的输入输出设备进行举例:

       在UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。常见的操作有:Write操作和Read操作:

1.1.2 I/O设备的分类

1.1.2.1 I/O设备按使用特性分类

I/O设备按使用特性进行分类,分为人机交互外部设备,存储设备,网络通信设备。

  • 人机交互外部设备数据传输速度慢
  • 存储设备数据传输速度快
  • 网络通信设备数据传输速度介于两者之间

1.1.2.2 I/O设备按传输速率分类(不重要)

I/O设备按传输速率进行分类,分为低速设备,中速设备,高速设备。

  • 低速设备:鼠标、键盘等——传输速率为每秒几个到几百个字节
  • 中速设备:比如激光打印机等——传输速率为每秒数千到上万个字节
  • 高速设备:比如磁盘等——传输速率为每秒数千字节到千兆字节

1.1.2.3 I/O设备按信息交换的单位分类

I/O设备按信息交换的单位进行分类,分为块设备和字符设备。

  • 块设备:传输速率较高,可以寻址,即对这个设备可以进行随机地读写任意一块
  • 字符设备:传输速率较慢,不可寻址,在输入和输出时常采用中断驱动方式

1.1.3 总结

1.2 I/O控制器

1.2.1 I/O设备的机械部件

       I/O设备的机械部件主要用来执行具体I/O操作,比如我们看得见的鼠标、键盘的按钮,显示器的LED屏,移动硬盘的磁臂,磁盘盘面。

       电子部件通常是一块插入主板扩充槽的印刷电路板,作为实现CPU对设备控制的“中介”

1.2.2 I/O设备的电子部件

       CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。这个电子部件就是I/O控制器。CPU可以控制I/O控制器,又由I/O控制器来控制设备的机械部件。

1.2.3 I/O控制器的功能

       I/O控制器的功能总共有四个:接受和识别CPU发出的命令,向CPU报告设备的状态,数据交换,地址识别。

  • 接受和识别CPU发出的命令:比如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器来存放命令和参数
  • 向CPU报告设备的状态:I/O控制器中会有相应的状态寄存器,用于记录I/O设备的当前状态,比如:1表示空闲,0表示忙碌
  • 数据交换:I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据
  • 地址识别:类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。I/O控制器通过CPU提供的“地址”来判断CPU要读写的是哪个寄存器

1.2.4 I/O控制器的组成

  • I/O控制器分为三部分:CPU与控制器的接口I/O逻辑控制器与设备的接口
  • CPU与控制器的接口:用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据。
  • I/O逻辑负责接收和识别CPU的各种命令(如地址译码),并负责对设备发出命令
  • 控制器与设备的接口用于实现控制器与设备之间的通信

值得注意的是:

  1. 一个I/O控制器可能会对应多个设备
  2. 数据寄存器、控制寄存器、状态寄存器可能有多个(比如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要具有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。

1.2.5 内存映像I/O与寄存器独立编址

为了实现CPU和I/O端口进行通信,有两种方式,如图所示:

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

1.2.6 I/O端口

I/O端口是指设备控制器中可以被CPU直接访问的寄存器,主要有以下三类寄存器:

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

1.3 I/O控制方式

       设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入和输出控制方式有4种,下面分别加以介绍:

需要注意的问题是:

  1. 完成一次读写操作的流程
  2. CPU干预的频率
  3. 数据传送的单位
  4. 数据的流向
  5. 主要缺点和主要优点

1.3.1 程序直接控制方式

CPU向控制器发出读指令,

1.4 软件层次结构

1.4.1 用户层软件

提供用户方便操作的接口(比如:Windows API)

1.4.2 设备独立性软件

       设备独立性软件,又称为设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。这一层的主要功能是:

  1. 向上层提供统一的调用接口(比如 read/write 系统调用)。
  2. 设备的保护:原理类似与文件保护,设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对于设备的访问权限也是不一样的。
  3. 差错处理:设备独立性软件需要对一些设备的错误进行处理。
  4. 设备的分配和回收。
  5. 数据缓冲区管理:可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异。
  6. 建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序。

1.4.3 设备驱动程序 

为什么一般连接硬件-需要下载(安装)驱动程序?

       打印机、鼠标、键盘等等(都可能有自身的特性,需要安装自身提供的程序,供CPU使用)

       设备驱动程序主要负责对硬件设备的具体控制,将上层发出的一系列命令(比如 read/write )转化成特定设备“能听得懂”的一系列操作,包括设置设备寄存器;检查设备状态等。

       不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道,因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。 

驱动程序一般会以一个独立进程的方式存在。

1.4.4 中断处理程序

1.4.5 总结

1.5 输入/输出应用程序接口和驱动程序接口

1.5.1 输入输出应用程序接口

1.5.2 阻塞IO && 非阻塞IO

1.5.3 驱动程序

为了方便各自厂商开发自己的硬件,并且能够支持操作系统使用

【操作系统】就会【制定统一的标准】,厂商就会根据这个标准再进行封装一层(驱动程序)

让【操作系统】正常使用【硬件设备】

二、设备独立性软件

2.1 IO核心子系统

2.1.1 I/O调度

2.1.2 设备保护

2.1.3 假脱机技术

2.1.4 共享打印机原理分析

2.1.5 总结

2.2 设备的分配与回收

2.2.1 设备分配

2.2.2 分配管理——数据结构

2.2.3 设备分配的步骤

2.2.4 设备分配的改进

2.2.5 总结

2.3 缓冲区管理

2.3.1 什么是缓冲区

硬件实现的缓冲区——成本高,容量小(速度快!!!)【例:快表】

软件实现的缓冲区——成本低,速度较慢

IO设备和CPU的速度不匹配(需要缓冲区)

2.3.2 缓冲区的作用

2.3.3 单缓冲

缓冲区不为空时——不可加入数据

缓冲区满了——才可以拿取数据

两者速度不匹配的情况(如下图)

2.3.4 双缓冲

2.3.5 使用单、双缓冲在通信时的区别

2.3.5.1 单缓冲

2.3.5.2 双缓冲

2.3.5.3 循环缓冲区

2.3.5.4 缓冲池

2.3.6 总结

三、磁盘和固态硬盘

3.1 磁盘的结构

3.2 磁盘调度算法

3.2.1 先来先服务算法 

3.2.2 最短寻找时间优先 

3.2.3 扫描算法 

3.2.4 LOOK调度算法 

3.2.5 循环扫描算法 

3.2.6 C-LOOK调度算法

3.2.7 总结

3.3 减少磁盘延迟时间的方法

 

3.4 磁盘的管理

3.4.1 磁盘初始化

 

3.5 固态硬盘SSD

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS App 购物助手工具的开发与设计

文章目录 摘要引言功能需求分析技术方案与设计架构设计技术选型 代码示例Demo数据抓取模块数据存储模块历史价格查询和数据可视化模块完整界面布局和调用示例代码详解 QA环节总结参考资料 摘要 随着促销活动的增多,用户面临真假折扣的困惑,特别是在一些…

激活函数解析:神经网络背后的“驱动力”

神经网络中的激活函数(Activation Function)是其运作的核心组件之一,它们决定了神经元如何根据输入信号进行“激活”,进而影响整个模型的表现。理解激活函数的工作原理对于设计和优化神经网络至关重要。本篇博客将深入浅出地介绍各…

昇思大模型平台打卡体验活动:项目1基于MindSpore实现BERT对话情绪识别

基于MindSpore实现BERT对话情绪识别 1. 模型简介 BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年末开发并发布的一种新型语言模型,基于Transformer架构中的Encoder,并且具有双向编码的特性。…

【vue】echarts地图添加蒙版图片,多图层地图实现天气信息展示

实现原理&#xff1a;多层图层叠加实现复杂的信息展示。 <template><div class"wrapper"><el-drawertitle"天气信息":modal"iszz":visible.sync"weatherinfo":direction"direction"><drawer:labelnam…

6.584-Lab1:MapReduce

前置知识/概念 Raft 是一个基于“Leader”的协议&#xff0c;能够保证分布式网路的一致性。 RPC&#xff08;Remote Producer Call&#xff09; 参考链接1 参考链接2 Golang中regexp正则表达式的用法 https://gukaifeng.cn/posts/golang-zheng-ze-biao-da-shi-regexp-de-j…

Docker在微服务架构中的最佳实践

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Docker在微服务架构中的最佳实践 Docker在微服务架构中的最佳实践 Docker在微服务架构中的最佳实践 引言 Docker 概述 定义与原理…

大数据新视界 -- 大数据大厂之 Impala 性能优化:基于数据特征的存储格式选择(上)(19/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【C++】用红黑树封装set和map

在C标准库中&#xff0c;set容器和map容器的底层都是红黑树&#xff0c;它们的各种接口都是基于红黑树来实现的&#xff0c;我们在这篇文章中已经模拟实现了红黑树 ->【C】红黑树&#xff0c;接下来我们在此红黑树的基础上来看看如何封装set和map。 一、共用一颗红黑树 我…

Leetcode3345. 最小可整除数位乘积 I

Every day a Leetcode 题目来源&#xff1a;3345. 最小可整除数位乘积 I 解法1&#xff1a;枚举 至多循环 10 次&#xff0c;一定会遇到个位数为 0 的数字&#xff0c;数位乘积是 0&#xff0c;一定是 t 的倍数。 所以暴力枚举即可。 代码&#xff1a; /** lc appleetcod…

通过scrapy和Django登录、爬取和持久化数据

使用 Scrapy 和 Django 实现登录、爬取和持久化数据的完整流程&#xff0c;可以通过以下步骤完成&#xff1a; 创建 Django 项目和数据库模型&#xff1a;定义一个存储爬取数据的数据库模型。创建 Scrapy 项目&#xff1a;实现登录并抓取目标页面的数据。整合 Scrapy 和 Djang…

SpringMVC全面复习

Javaweb SpringMVC Spring MVC是Spring框架的一个模块&#xff0c;专门用于构建Web应用程序的模型-视图-控制器&#xff08;MVC&#xff09;架构。它通过清晰的分离关注点&#xff0c;简化了Web应用各部分的开发。Spring MVC提供了强大的绑定机制&#xff0c;能够将请求参数绑定…

【再谈设计模式】抽象工厂模式~对象创建的统筹者

一、引言 在软件开发的世界里&#xff0c;高效、灵活且易于维护的代码结构是每个开发者追求的目标。设计模式就像是建筑蓝图中的经典方案&#xff0c;为我们提供了应对各种常见问题的有效策略。其中&#xff0c;抽象工厂模式在对象创建方面扮演着重要的角色&#xff0c;它如同一…

【Linux】ELF可执行程序和动态库加载

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

SpringBootCloud 服务注册中心Nacos对服务进行管理

介绍 Nacos&#xff08;Naming and Configuration Service&#xff09;是一个开源的、动态的服务发现、配置管理和服务管理平台&#xff0c;特别适用于云原生应用和微服务架构。它可以作为服务注册中心&#xff0c;用于微服务的注册、发现、配置管理等。在微服务架构中&#x…

八款局域网监控软件优选|2024最新排行榜(企业老板收藏篇)

在当今数字化办公的时代&#xff0c;企业和组织对于局域网电脑监控的需求日益增长。无论是为了保障信息安全、提高员工工作效率&#xff0c;还是为了规范网络行为&#xff0c;一款优秀的局域网电脑监控软件都能发挥重要作用。市面上的监控软件种类繁多&#xff0c;功能各异&…

限价订单簿中的高频交易

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

丹摩征文活动|CogVideoX-2b:从0到1,轻松完成安装与部署!

丹摩征文活动 | CogVideoX-2b&#xff1a;从0到1&#xff0c;轻松完成安装与部署&#xff01; CogVideoX 介绍 CogVideoX的问世&#xff0c;标志着视频制作技术迈入了一个全新的时代。它不仅打破了传统视频制作在效率与质量之间的平衡难题&#xff0c;还通过其先进的3D变分自…

Creo 9.0 中文版软件下载安装教程

[软件名称]&#xff1a;Creo 9.0 [软件语言]&#xff1a;简体中文 [软件大小]&#xff1a;5.2G [安装环境]&#xff1a;Win11/Win10/ [硬件要求]&#xff1a;内存8G及以上 下载方法&#xff1a;电脑打开浏览器&#xff0c;复制下载链接&#xff0c;粘贴至浏览器网址栏&…

RT-DETR融合CVPR[2024]无膨胀多尺度卷积PKI模块及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Poly Kernel Inception Network for Remote Sensing Detection》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.06258 代码链接&#xff1a;https://github…

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)

ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法) 一、更新并安装基础软件 #切换root用户 sudo su -#更新 apt update #升级 apt upgrade#install vim apt install vim#install net-tools apt install net-tools二、安装ssh并设置…