【操作系统】输入/输出(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

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

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

相关文章

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III309.买卖股票的最佳时机含冷冻期

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习?-CSDN博客 本次题解参考自灵神的做法,大家也多多支持灵神的题解 买卖股票的最佳时机【…

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter,一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同,返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…

opencv(c++)----图像的读取以及显示

opencv(c)----图像的读取以及显示 imread: 作用:读取图像文件并将其加载到 Mat 对象中。参数: 第一个参数是文件路径,可以是相对路径或绝对路径。第二个参数是读取标志,比如 IMREAD_COLOR 表示以彩色模式读取图像。 返回值&#x…

git config是做什么的?

git config是做什么的? git config作用配置级别三种配置级别的介绍及使用,配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级? 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

【计算机网络】【传输层】【习题】

计算机网络-传输层-习题 文章目录 10. 图 5-29 给出了 TCP 连接建立的三次握手与连接释放的四次握手过程。根据 TCP 协议的工作原理,请填写图 5-29 中 ①~⑧ 位置的序号值。答案技巧 注:本文基于《计算机网络》(第5版)吴功宜、吴英…

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路

文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路: 这是一个二叉树的布尔评估问题。树的每个节点包含一个值,其中叶子节点值为 0 或 1&#xff0…

2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 A题 量子计算机在信用评分卡组合优化中的应用 原题再现: 在银行信用卡或相关的贷款等业务中,对客户授信之前,需要先通过各种审核规则对客户的信用等级进行评定,通过评定后的客户才能…

嵌入式开发套件(golang版本)

1. watchdog(软件看门狗:守护升级) 2. gate(主程序) 3. web(api版本 升级包) OTA 升级流程 watchdog启动后检查守护进程gate是否正在运行,如果没有,api对比版本号&am…

解压专家 2.4.12| 多功能解压缩工具,支持密码共享、音乐播放和歌词匹配。

解压专家是一款功能强大的解压缩软件,提供了类似于WIFI万能钥匙的密码分享功能,帮助用户快速获取共享的解压密码。作为专业的解压缩工具,它支持多种常见和不常见的压缩包格式,如ZIP、RAR、7z、TAR.GZ和ISO等,并且还支持…

并发编程(10)——内存模型和原子操作

文章目录 十、day101. 内存模型基础1.1 对象和内存区域1.2 改动序列 2. 原子操作及其类型2.1 原子操作2.2 原子类型2.3 内存次序2.4 std::atomic_flag2.4.1 自旋锁 2.5 std::atomic&#xff1c;bool&#xff1e;2.6 std::atomic<T*>2.7 标准整数原子类型2.8 std::atomic&…

【Flink】-- flink新版本发布:v2.0-preview1

目录 1、简介 2、非兼容变更 2.1、API 2.2、连接器适配计划 2.3、配置 2.4、其它 3、重要新特性 3.1、存算分离状态管理 3.2、物化表 3.3、批作业的自适应执行 3.4、流式湖仓 4、附加 4.1、非兼容性的 api 程序变更 4.1.2、Removed Classes # 4.1.3、Modified Cl…

ffmpeg+D3D实现的MFC音视频播放器,支持录像、截图、音视频播放、码流信息显示等功能

一、简介 本播放器是在vs2019下开发&#xff0c;通过ffmpeg实现拉流解码功能&#xff0c;通过D3D实现视频的渲染功能。截图功能采用libjpeg实现&#xff0c;可以截取jpg图片&#xff0c;图片的默认保存路径是在C:\MYRecPath中。录像功能采用封装好的类Mp4Record实现&#xff0c…

webpack指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack-指南 概念 中文&#xff1a; webpack | webpack中文文档 | webpack中文网 英文&…

把越南语翻译成中文一般用什么翻译工具?《越南语翻译通》App或许能满足你的技术痛点需求!

在多语言交流日益频繁的今天&#xff0c;掌握越南语对于商务、旅游或学术交流都是一项重要技能。《越南语翻译通》App应运而生&#xff0c;旨在通过技术手段简化越南语学习和翻译过程&#xff0c;满足用户在不同场景下的需求。 核心技术 《越南语翻译通》App采用了先进的自然语…

Android Framework AMS(16)进程管理

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读AMS 进程方面的知识。关注思维导图中左上侧部分即可。 我们本章节主要是对Android进程管理相关知识有一个基本的了解。先来了解下L…

Rust Struct 属性初始化

结构体是用户定义的数据类型&#xff0c;其中包含定义特定实例的字段。结构有助于实现更容易理解的抽象概念。本文介绍几种初始化结构体对象的方法&#xff0c;包括常规方法、Default特征、第三方包实现以及构建器模式。 Struct声明与初始化 struct Employee {id: i32,name: …

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址&#xff1a;utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

数据结构:队列

目录 概念与结构底层结构的选择队列的实现队列头文件&#xff08;queue.h&#xff09;队列初始化队列的销毁入队列检查队列是否为空出队列查询队列第一个数据查询队列末尾数据查询队列有效数据个数代码试运行 概念与结构 概念&#xff1a;只允许在⼀端进行插⼊数据操作&#x…

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;再其他节点下用户建本地表成功&#…

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…