码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
第5章 输入/输出(I/O)管理
5.1 I/O管理概述
5.1.1 I/O设备
I/O设备的分类(按使用特性分类)
I/O设备的分类(按传输速率分类)
I/O设备的分类(按信息交换的单位分类)
5.1.2 I/O控制方式
有4种:
1. 程序直接控制方式
2. 中断驱动方式
3. DMA方式
DMA方式的特点
(1)基本单位是数据块。
(2)所传送的数据,是从I/O设备直接送入内存,或者相反。
(3)仅在传送一个或多个数据块的开始和结束时,才需要CPU的干预,整块数据的传送是在DMA控制器下完成的。
DMA控制器的组成
(1)命令/状态寄存器(CR)。
(2)内存地址寄存器(MAR)。
(3)数据寄存器(DR)。
(4)数据计数器(DC)。
DMA方式与中断驱动方式的主要区别
4. 通道控制方式
I/O通道与DMA方式的主要区别
I/O通道与一般处理机的区别:通道指令的类型单一;没有自己的内存,通道所执行的通道程序放在主机的内存中(即通道与CPU共享内存)。
总结比较
5.1.3 I/O子系统的层次结构
I/O子系统的层次结构
(1)用户层I/O软件。实现与用户交互接口。
(2)设备独立性软件。用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护,以及设备分配与释放等,同时也为设备管理和数据传送提供必要的存储空间。
设备独立性软件的主要功能可分为以下两个方面:
①执行所有设备的公有操作。包括:对设备的分配与回收;逻辑设备名映射为物理设备名;对设备进行保护,禁止用户直接访问设备;缓冲管理;差错控制;提供独立于设备的大小统一的逻辑块, 屏蔽设备之间信息交换单位大小和传输速率的差异。
②向用户层(或文件层)提供统接口。 无论何种设备,它们向用户所提供的接口应是相同的。例如,对各种设备的读/写操作,在应用程序中都统使用read/write命令等。
(3)设备驱动程序。与硬件直接相关,负责具体实现系统对设备发出的操作指令。
(4)中断处理程序。用于处理中断相关事项。
(5)硬件设备。包括一个机械部件(设备本身)和一个电子部件(设备控制器或适配器)。
设备控制器的主要功能如下:
(1)接收和识别CPU或通道发来的命令,如磁盘控制器能接收读、写、查找等命令。
(2)实现数据交换,包括设备和控制器之间的数据传输;通过数据总线或通道,控制器和主存之间的数据传输。
(3)发现和记录设备及自身的状态信息,供CPU处理使用。
(4)设备地址识别。
设备控制器送来的必须包含以下组成部分:
①设备控制器与CPU的接口。该接口有三类信号线:数据线、地址线和控制线。数据线通常与两类寄存器相连:数据寄存器(存放从设备送来的输入数据或从CPU送来的输出数据)和控制/状态寄存器(存放从CPU送来的控制信息或设备的状态信息)。
②设备控制器与设备的接口。设备控制器连接设备需要相应数量的接口,一个接口连接一台设备。每个接口中都存在数据、控制和状态三种类型的信号。
③I/O控制逻辑。用于实现对设备的控制。它通过一组控制线与CPU交互,对从CPU收到的I/O命令进行译码。CPU启动设备时,将启动命令发送给控制器,同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对地址进行译码,并相应地对所选设备进行控制。
5.2 I/O核心子系统
5.2.1 I/O子系统概述
I/O核心子系统提供的服务主要有:I/O调度、缓冲与高速缓存、设备分配与回收、假脱机、设备保护和差错控制。
5.2.2 I/O调度概念
I/O调度就是确定一个好的顺序来执行这些I/O请求,减少I/O完成所需要的平均等待时间,提高计算机效率。
5.2.3 高速缓存与缓冲区
1. 磁盘高速缓存(Disk Cache)
引入目的:提高磁盘的I/O速度,对高速缓存复制的访问要比原始数据访问更加高效。
定义:磁盘高速缓存技术指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块种的信息。 因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存种的盘块。
高速缓存在内存中分为两种形式:
一种是在内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定。
另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享。
2. 缓冲区(Buffer)
引入目的:
(1)缓和CPU与I/O设备间速度不匹配的矛盾。
(2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
(3)解决基本数据单元大小不匹配的问题。
(4)提高CPU和I/O设备的并行性。
实现方法:
(1)采用硬件缓冲器,成本太高,只在一些关键部位采用。
(2)采用缓冲区(位于内存区域)
缓冲区特点:
缓冲区数据非空时,不能放入数据,只能传出数据;
缓冲区为空时,可以放入数据,但必须把缓冲区充满后,才能传出数据。
根据系统设备缓冲器的个数,缓冲技术分为以下几类:
(1)单缓冲。
思想:在设备和处理机之间设置一个缓冲区。设备和处理机交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据。
计算:单缓冲区处理每块数据的用时为MAX(C,T) + M。
T指的是将从磁盘将一块数据写入缓冲区的时间。
M是指将缓冲区的数据传送到用户区的时间。
C指的是CPU对这一块数据的处理时间。
图示
(2)双缓冲。
引入目的:根据单缓冲的特点,CPU在传送时间M内处于空闲状态,由此引入双缓冲。
思想:I/O设备写入数据时先装填到缓冲区1,在缓冲区1满后才开始装填缓冲区2,与此同时处理机可以从缓冲区1中取出数据放入用户进程处理,当缓冲区1的数据处理完成时,缓冲区2已经填满,则处理机又从缓冲区2取出数据放入用户进程处理,而I/O设备又可以装填缓冲区1。双缓冲机制提高了处理机和输入设备的并行操作的程度。
计算:双缓冲区处理一块数据的用时为MAX(C + M , T)。
T指的是将从磁盘将一块数据写入缓冲区的时间。
M是指将缓冲区的数据传送到用户区的时间。
C指的是CPU对这一块数据的处理时间。
图示
(3)循环缓冲。
思想:包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指向第一个缓冲区,多个缓冲区构成一个环形。
(4)缓冲池。
组成:由多个系统公用的缓冲区组成,缓冲区按使用情况可以形成三个队列:空缓冲队列、装满输入数据的缓冲队列(输入队列)和装满输出数据的缓冲队列(输出队列)。还应有4种缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区和用于提取输出数据的工作缓冲区。
思想:当输入进程需要输入数据时,便从空缓冲队列的队首摘下一个空缓冲区, 把它作为收客输入工作缓冲区,然后把输入数据输入其中,装满后再将它挂到输入队列队尼。当计算进程需要输入数据时,便从输入队列取得. 个缓冲区 作为提取输入 工作缓冲区,计算进程从中提取数据,数据用完后再将它挂到空缓冲队列尾。当计算进程需要输出数据时,便从空缓冲队列的队首取得一个空缓冲区,作为收容输出工作缓冲区,当其中装满输出数据后,再将它挂到输出队列队尾。当要输出时,由输出进程从输出队列中取得一个装满输出 数据的缓冲区,作为提取输出工作缓冲区,当数据提取完后,再将它挂到空缓冲队列的队尾。
3. 高速缓存与缓冲区的对比
图表
5.2.4 设备分配与回收
1. 设备分配概述
设备分配:是指根据用户的I/O请求分配所需的设备。
分类(从设备的特性来分):
(1)独占式设备(独占设备):指申请设备时,若设备空闲则将其独占,不再允许其他进程申请使用,一直等到该设备被释放才允许其他进程申请使用。如打印机。
(2)分时式共享使用设备(共享设备):当设备没有独占使用的要求时,可以通过分时共享使用提高利用率。如对磁盘的I/O操作。
(3)以SPOOLing方式使用外部设备(虚拟设备):SPOOLing技术即假脱机技术,实质上就是对I/O操作进行批处理。 是一种以空间换时间的技术,而请求分页系统种的页面调度算法是一种以时间换空间的技术。
2. 设备分配的数据结构
设备分配依据的主要数据结构:设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系统设备表(SDT)。
设备控制表(DCT):一个设备控制表就表示一个设备,控制表的表项就是该设备的各个属性。每个设备由机械部件和电子部件(控制器)组成,故每个DCT都需要一个表项来表示控制器(电子部件),即需要一个指向控制器控制表(COCT)的指针,因此DCT与COCT具有一一对应的关系。
控制器控制表(COCT):设备控制器控制设备与内存交换数据,而设备控制器又需要请求通道为它服务,故每个COCT必定有一个表项存放指向相应通道控制表(CHCT)的指针。
通道控制表(CHCT):一个通道可以为多个设备控制器服务,因此CHCT种必定又一个指针指向一个表,这个表上的信息就是CHCT提供服务的那几个设备控制器,因此CHCT与COCT是一对多的关系。
系统设备表(SDT):整个系统只有一张SDT,它记录已连接到系统中的所有物理设备的情况,每个物理设备占一个表目。
3. 设备分配的策略 设备分配主要考虑的因素有:I/O设备的固有属性、I/O设备的分配算法、I/O设备分配的安全性以及I/O设备的独立性。对于独占设备,既可以采用动态分配方式又可以采用静态分配方式,往往采用静态分配方式。对于共享设备,一般采用动态分配方式,通常采用先请求先分配和优先级高者优先的分配算法。
(1)设备分配原则。
分配的总原则:既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序与具体设备隔离开。
(2)设备分配方式
设备分配方式有静态分配和动态分配两种。
(3)设备分配算法
常用的动态分配算法有:先请求先分配、优先级高者优先等。
4. 设备分配的安全性
设备分配的安全性:是指分配中应防止发生进程死锁。
5. 逻辑设备名到物理设备名的映射
设备独立性:是指应用程序独立于具体使用的物理设备。 即用户在编程时使用的设备与实际设备无关,在用户程序中只需指明I/O使用的设备类型即可。
设备独立性的优点
(1)方便用户编程。
(2)使程序运行不受具体机器环境的限制。
(3)便于程序的移植。
如何实现设备独立性:在应用程序中使用逻辑设备名来请求使用某类设备,在系统中设置一张逻辑设备表(LUT),用于将逻辑设备名映射为物理设备名。
LUT表项:包括逻辑设备名、物理设备名和设备驱动程序入口地址。
具体使用:当进程用逻辑设备名来请求分配设备时,系统为它分配相应的物理设备,并在LUT中建立一个表项,以后进程再利用逻辑设备名请求I/O操作时,系统通过查找LUT来寻找相应的物理设备和驱动程序。
系统中采用两种方式建立逻辑设备表(LUT)
(1)整个系统只设置一张LUT。所有进程的设备分配情况都记录在这张表中,因此不允许有相同的逻辑设备名,主要适用于单用户系统。
(2)为每个用户设置一张LUT。
5.2.5 SPOOLing技术(假脱机技术)
引入目的:为了缓和CPU的高速性与I/O设备低速性直接的矛盾。
SPOOLing技术:该技术利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上(或者相反),是操作系统中采用的一项将独占设备改造成共享设备的技术。
SPOOLing系统的组成
1. 输入井和输出井
输入井:指在磁盘上开辟出的一个存储区域,模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。
输出井:指在磁盘上开辟出的一个存储区域,模拟脱机输出时的磁盘,用于收容用户程序输出的数据。
2. 输入缓冲区和输出缓冲区
输入缓冲区:是在内存中开辟的一个缓冲区,用于暂存由输入设备送来的数据,以后再传送到输入井。
输出缓冲区:是在内存中开辟的一个缓冲区,用于暂存由输出井送来的数据,以后再传送到输出设备。
3. 输入进程和输出进程
输入进程:模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。当CPU需要输入数据时,直接将数据从输入井读入内存。
输出进程:模拟脱机输出时的外围控制机,将用户要求输出的数据从内存传送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区传到输出设备。
SPOOLing系统的主要特点:
提高了I/O的速度;
将独占设备改造为共享设备;
实现了虚拟设备功能。
SPOOLing技术是如何以时间换空间的?
牺牲空间:在内存划出一片作为输入/输出缓冲区,在磁盘划出一块作为输入/输出井。
节省时间:磁盘是一种高速设备,与内存交换数据的速度优于打印机等中低速I/O设备,如果不采用SPOOLing技术,那么CPU要向打印机大于数据,打印机的速度比较慢,故CPU必须迁就打印机,等打印机把数据打印完才能做其他工作,浪费了CPU时间。但在SPOOLing技术下,CPU把打印机要输出的数据先输出到磁盘的输出井中(这个过程由输出进程控制),然后做其他事情,若打印机被占用,SPOOLing系统会把这个打印请求挂到等待队列上,待打印机空闲时把数据打印出来,向磁盘输出数据的速度比向打印机输出数据的速度快,故节省了时间。
相关阅读:
maven父工程
CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)
跳动爱心代码-李峋同款爱心代码1(完整代码)
365天深度学习训练营-第5周:运动鞋品牌识别
c++超详细引用篇【c++】
ubuntu 18.04 LTS交叉编译opencv 3.4.16并编译工程[全记录]
P1017 [NOIP2000 提高组] 进制转换
测试覆盖率 之 Cobertura的使用
【opencv】计算机视觉:停车场车位实时识别
(附源码)基于微服务架构的餐饮系统的设计与实现-计算机毕设 86393
原文地址:https://blog.csdn.net/weixin_39345003/article/details/127976793
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号