5-2输入/输出管理-I/O核心子系统

news2025/1/19 10:27:11

文章目录

  • 一.I/O调度
  • 二.设备保护
  • 三.SPOOLing技术(假脱机技术)
  • 四.设备的分配与回收
    • 1.设备分配时应该考虑的因素
    • 2.静态分配和动态分配
    • 3.设备分配管理中的数据结构
      • (1)设备控制表DCT(Device Control Table)
      • (2)控制器控制表COCT(Controller control table)
      • (3)通道控制表CHCT(Channel Control Table)
      • (4)系统设备表SDT(System Device Table)
    • 4.设备分配的步骤
    • 5.设备分配步骤的改进方法
  • 五.缓冲区管理
    • 1.什么是缓冲?为什么要引入缓冲
    • 2.单缓冲
    • 3.双缓冲
    • 4.循环缓冲
    • 5.缓冲池

I/O核心子系统主要提供的服务:I/O调度、缓冲与高速缓存、设备分配与回收、假脱机、设备保护、差错处理
在这里插入图片描述

一.I/O调度

用某种算法确定一个好的顺序来处理各个I/O请求,使进程之间公平的共享设备访问,减少I/O完成所需要的平均等待时间

如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法、C-LOOK算法)。当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序。
同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调度顺序。

二.设备保护

操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。

三.SPOOLing技术(假脱机技术)

在手工操作阶段,主机直接从l/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备。

为了缓和CPU的高速性和I/O设备低速性之间的矛盾,批处理阶段引入了脱机输入/输出技术(用磁带完成)。在外围控制机的控制下,慢速输入设备的数据先被输入到更快速的磁带上。之后主机可以从快速的磁带上读入数据,从而缓解了速度矛盾。
在这里插入图片描述
在这里插入图片描述

SPOOLing技术是用软件的方式模拟脱机技术,是操作系统中采用的一项将独占设备改造成共享设备的技术。

(1)SPOOLing系统组成

在这里插入图片描述
(2)共享打印机原理分析
打印机是独占设备,通过SPOOLing技术可以将其改造成共享打印机。

当多个用户申请使用打印机时,假脱机管理进程在磁盘输出井中为进程申请一个空闲缓冲区,并将要打印的数据送入其中。然后为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中,再将该表挂到假脱机文件队列上。

在这里插入图片描述

当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务。

虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。

四.设备的分配与回收

1.设备分配时应该考虑的因素

(1)设备特性
①独占式设备(独占设备)
②分时式共享使用设备(共享设备)
③以SPOOLing方式使用外部设备(虚拟设备):将独占设备改造成虚拟的共享设备

(2)设备分配算法
先来先服务、优先级高者优先、短任务优先等

(3)设备分配中的安全性
①安全分配方式
每当进程发出I/O请求后便进入阻塞态,直到其I/O操作完成时才被唤醒。
优点:设备分配安全
缺点:CPU和I/O设备是串行工作的
②不安全分配方式
进程在发出I/O请求后继续运行,需要时又发出第二个、第三个I/O请求。仅当进程所请求的设备已被另一进程占用时,才进入阻塞态
优点:进程的计算任务和I/O任务可以并行处理,一个进程可以同时操作多个设备,从而迅速推进进程
缺点:可能产生死锁

2.静态分配和动态分配

(1)静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
(2)动态分配:进程运行过程中动态申请设备资源

3.设备分配管理中的数据结构

一个通道可控制多个设备控制器,每个设备控制器可控制多个设备。
在这里插入图片描述
用于设备分配的数据结构:
设备控制表DCT(Device Control Table)
控制器控制表COCT(Controller control table)
通道控制表CHCT(Channel Control Table)
系统设备表SDT(System Device Table)

(1)设备控制表DCT(Device Control Table)

每个设备有一张DCT,系统为每个设备配置一张DCT,以记录本设备的情况。DCT中的每个表目有一个指向COCT的指针。

在这里插入图片描述

(2)控制器控制表COCT(Controller control table)

每个控制器有一张COCT,系统为每个控制器都设置一张用于记录本控制器情况的COCT。
设备控制器控制设备与内存交换数据,设备控制器又需要请求通道为它服务,因此COCT中有一个CHCT指针。

在这里插入图片描述

(3)通道控制表CHCT(Channel Control Table)

系统为每个通道配置一张CHCT,以记录通道情况。
一个通道可为多个设备控制器服务,因此CHCT中必有一个指针指向一个表,这个表上的信息表达的是CHCT提供服务的那几个设备控制器,因此CHCT中有一个COCT指针

在这里插入图片描述

(4)系统设备表SDT(System Device Table)

SDT整个系统中只有一张,它记录系统中全部设备的情况,是系统范围内的数据结构。SDT中有一个DCT指针。

在这里插入图片描述

4.设备分配的步骤

①根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程。
③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/0设备进行数扩据传送

缺点:
①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程
②若换了一个物理设备,则程序无法运行
③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待

5.设备分配步骤的改进方法

为了解决上述缺点,可以建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名

①根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”)
②查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项。
③根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
④根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

在这里插入图片描述
逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系。某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项。如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址。

五.缓冲区管理

1.什么是缓冲?为什么要引入缓冲

(1)缓冲是一种为了使通信双方的速度匹配而引入的一种中间层次的技术,这个中间层次的速度介于通信双方之间。
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)。但更多的是使用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区

在这里插入图片描述

(2)引入缓冲
①缓解CPU和I/O设备间速度不匹配的矛盾
②减少对I/O的中断频率,放宽对CPU中断响应时间的限制
③解决基本数据单元大小不匹配的问题。输出进程每次生成一整块的数据,而I/O设备每次只能输出一个字符,采用缓冲区,输出进程将一整块数据放入缓冲区,I/O设备可以从缓冲区中逐个字符取。
④提高CPU和I/O设备之间的并行性

  • 当处理机和外部设备速度差距较大时,并且此时不想让其中一方等待,有什么办法可以解决问题?
    可以采用缓冲技术来缓解处理机与外部设备速度上的矛盾,即在某块地方设立一片缓冲区,外部设备与处理机的输入/输出都经过缓冲区,这样外部设备和处理机就都不用互相等待。

2.单缓冲

在设备和处理机之间设置一个缓冲区。设备和处理机交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据。

满可取,空可冲(入数据)

设从磁盘把一块数据输入缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,CPU对这一块数据处理的时间为C

在这里插入图片描述
假设初始工作区满,缓冲区空。

若T>C,则当工作区数据处理完成后(时间C),缓冲区还没充满。又经过T-C的世界,缓冲区充满,此时停止冲入数据。然后缓冲区向工作区传送数据。工作区满后缓冲区正好为空,用时M。整个过程用时T+M

若T<C,整个过程用时C+M

因此单缓冲区处理每块数据用时为 max{T,C}+M

3.双缓冲

假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)

假设初始工作区空,其中缓冲区1满,缓冲区2空
在这里插入图片描述
若T>C+M,缓冲区1开始向工作区传送数据,缓冲区2开始冲入数据,当工作区充满数据并处理完后,用时C+M,又过了T-(C+M)缓冲区2充满。整个过程用时T

若T<C+M,缓冲区1开始向工作区传送数据,缓冲区2开始冲入数据。当工作区充满数据后,缓冲区1为空,时间为M,然后工作区开始处理数据,缓冲区2继续冲入数据。因为此时只有一个I/O设备,因此此时缓冲区1为空但不能冲入数据。当缓冲区2充满数据后,设备空闲。再过(C+M)-T工作区数据处理完毕,但在这期间设备也向缓冲区1冲入了一部分数据。此时并不能很好的找到下一个初始状态。整个过程用时C+M

双缓冲区处理每块数据用时为 max{T,C+M}

可以看出,当M+C<T时,可使块设备连续输入;当M+C>T时可使CPU不必等待设备输入

【单缓冲和双缓冲在通信时的区别】
两台机器之间通信时,可以配置缓冲区用于数据的发送和接受。

若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。
在这里插入图片描述
若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。
在这里插入图片描述

4.循环缓冲

将多个大小相等的缓冲区链接成一个循环队列。

橙色表示已充满数据的缓冲区,绿色表示空缓冲区
在这里插入图片描述

5.缓冲池

缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)

在这里插入图片描述

根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)

在这里插入图片描述

①某输入进程请求输入数据,系统从空缓冲队列的队头取下空缓冲区,做为用于作为用于收容输入数据的缓冲区,当缓冲区充满之后挂到输入队列的队尾。
②计算进程要想取得一块输入数据,操作系统会从输入队列的队头取下一个缓冲区,把它作为提取输入的工作缓冲区。该缓冲区中的数据被传送到计算进程的工作区中,当缓冲区数据取空后,挂到空缓冲队列的队尾。
如果此时计算进程想要将准备好的数据冲入缓冲区,系统会从空缓冲队列的队头取下一个空闲缓冲区,作为收容进程想要输出数据的工作缓冲区,该缓冲区被充满,被挂到输出队列的队尾。
④某输出进程请求输出数据,系统会从输出队列的队头取下一块缓冲区,把他作为提取输出数据的工作缓冲区,当缓冲区被取空之后,将其挂到空缓冲区队列的队尾

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

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

相关文章

MySQL进阶篇之Linux安装MySQL8.0.26

Linux安装MySQL 需要更多安装MySQL的教程&#xff0c;请查阅Linux学习笔记——MySQL数据库管理系统安装部署 1、MySQL下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 2、在FinalShell中输入rz&#xff0c;然后选择下载好的MySQL安装包&#xff0c;进行上…

【数据质量】一起聊聊数据质量

Garbage In, Garbage Out ​ 数据质量关注的是数据的健康&#xff0c;数据健康和人的健康很相似&#xff0c;人的健康会影响人的生活品质&#xff0c;同样数据的健康会影响数据的使用品质。为了保证我们健康&#xff0c;我们需要养成良好的生活习惯&#xff0c;膳食平衡&#x…

Open3D DBSCAN聚类(Python版本)

文章目录 一、简介二、算法步骤三、实现代码四、实现效果参考资料一、简介 DBSCAN算法,全称为“Density-Based Spatial Clustering of Applications with Node”,也就是“基于密度的聚类”。此类算法是假设聚类结构能通过样本分布的紧密程度确定,从样本密度的角度来考察样本…

亿发浅析:财务一体化功能与管理流程

在信息时代的背景下&#xff0c;企业信息化已成为中小企业降低成本、提高效率、提高竞争力的重要手段&#xff0c;也是中小企业实现长期可持续发展的有效途径。 信息化对企业管理的好处是显而易见的&#xff0c;如加快信息流&#xff0c;提高信息资源利用率&#xff0c;促进企业…

STM32使用FSMC驱动LCD

关于FSMC驱动LCD的函数LCD_WR_REG的理解首先你需要理解使用结构体LCD_BASE若有错误&#xff0c;请各位师兄师姐指点原理框图重要的函数理解关于LCD_BASE和函数LCD_WR_REG&#xff08;u16 regval&#xff09;的理解至于0X6C00 0802地址也是一样的。首先要说的是这是我个人的理解…

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (五)位拆分与运算

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 &#xff08;五&#xff09;位拆分与运算 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN博客 &#x1f9e8;未经作者允许&#xff0c;禁止转载 &#x1f511;系列专栏&#xff1a;牛客Veri…

Burp Suite Professional 2023.1 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接&#xff1a;https://sysin.org/blog/burp-suite-pro-2023&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org Burp Suite Professional&a…

《后端技术面试 38 讲》学习笔记 Day 07

《后端技术面试 38 讲》学习笔记 Day 07 21丨分布式架构&#xff1a;如何应对高并发的用户请求 原文摘抄 当同时访问系统的用户不断增加的时候&#xff0c;需要消耗的系统计算资源也不断增加&#xff0c;需要更多的 CPU 和内存去处理用户的计算请求&#xff0c;需要更多的网络…

二叉树、平衡二叉树、红黑树、B树、B+树、B*树的区别

二叉树 如下图&#xff0c;是一个二叉树的结构图片&#xff1a; 可以看到无论是对象“9”、还是“5”、“13”、“2”、“7”、“11”、“15”它们的下面分别都叉了两个其他的对象。而且这两个对象都是左边的数值要小一些&#xff0c;右边的数值要大一些。 所以这就是二叉树的…

Qt+C++堆叠多窗口界面切换

程序示例精选 QtC堆叠多窗口界面切换 如需安装运行环境或远程调试&#xff0c;见文章底部个人微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC堆叠多窗口界面切换>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读…

停车系统源码-基于springboot+uniapp开源项目

Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统&#xff0c;支持封闭车场和路边车场&#xff0c;支持微信支付宝多种支付渠道&#xff0c;支持多种硬件&#xff0c;涵盖了停车场管理系统的所有基础功能。技术栈Springboot,Mybatis Plus,B…

聚观早报 | 推特将释放15亿用户名售卖;微信回应切断抖音外链

今日要闻&#xff1a;比亚迪摘得国内汽车年度销量冠军&#xff1b;推特将释放15亿用户名进行售卖&#xff1b;微信回应切断抖音外链&#xff1b;原阿里云盘负责人、Teambition 创始人齐俊元加入飞书&#xff1b;辉瑞CEO称新冠药不能太便宜推特将释放15亿用户名进行售卖 1 月 12…

直播回顾 | 如何运用数智化助力光伏上游产业节能降碳(下)——企业降碳篇

1月12日&#xff0c;始祖科技【始祖双碳研习社】行业解决方案第二期顺利结束&#xff0c;在第一期的基础上为大家带来了“双碳”政策对光伏上游企业提出的新要求&#xff0c;数智技术在光伏领域发挥双碳赋能作用&#xff0c;数智技术实现光伏领域“双碳”赋能的路径等多个维度的…

PMP证书获取指南来了

为什么考PMP证书是值得的&#xff1f;甚至对于管理人员来说是必须的&#xff1f; 1、个人能力的提高 考取PMP证书是一个系统的学习过程&#xff0c;让你的管理思维更加清晰&#xff0c;可能很多人都是从野路子&#xff0c;自己从实践中摸索管理经验&#xff0c;但是学完PMP证…

功率放大器在体外构建工程化心肌组织研究中的应用

实验名称&#xff1a;多功能明胶复合水凝胶的制备及体外构建工程化心肌组织的研究 研究方向&#xff1a;生物医学 测试目的&#xff1a; 制备一种基于GelMA的三维各向异性的电磁功能复合水凝胶支架&#xff08;GelMA-PDA-rGO-Fe3O4&#xff09;&#xff0c;由Fe3O4纳米颗粒修饰…

Python内存管理与垃圾回收

Python内存管理与垃圾回收引用计数器标记清除分代回收缓存机制※※引用计数器为主&#xff0c;标记清除和分代回收为辅缓存机制 引用计数器 1.1 c语言中的环状双向链表refchain.&#xff1a; 在Python的C源码中有一个refchain的环状双向链表&#xff0c;Python程序当中一旦创…

一个.Net简单、易用的配置文件操作库

在我们日常项目开发中&#xff0c;操作INI/CFG配置文件&#xff0c;往往会通过调用WinAPI来实现&#xff0c;WinAPI接口参数只支持字符串&#xff0c;而我们项目中&#xff0c;往往数据类型是多种多样的&#xff0c;在保存和获取配置值&#xff0c;我们就要进行类型的转换。 今…

【 uniapp - 黑马优购 | 购物车页面(3)】结算页面组件封装与渲染 (超详细代码讲解)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️***个人主页&#x1f947;&#xff1a;***小新爱学习. &#x1f43c;***个人WeChat&#xff1a;见文末*** &#x1f54a;️***系列专栏&#xff1…

C语言 动态内存管理函数的 深度解析 #是不是对数组不能变大变小而烦恼呢?学会动态内存管理函数,消去数组耿直的烦恼#

文章目录前言为什么存在动态内存分配&#xff1f;malloc 和 free1.malloc2.free3.使用callocrealloc常见的动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6…

启动优化·基础论·浅析 Android 启动优化

“ 【小木箱成长营】启动优化系列文章(排期中)&#xff1a; 启动优化 工具论 启动优化常见的六种工具 启动优化 方法论 这样做启动优化时长降低 70% 启动优化 实战论 手把手教你破解启动优化十大难题 ”一、引言 Hello&#xff0c;我是小木箱&#xff0c;欢迎来到小木箱成…