设备的分配与回收

目录

1、设备分配应考虑的因素

2、静态分配与动态分配

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

(1)设备控制表 DCT

(2)控制器控制表COCT

(3)通道控制表CHCT

(4)系统设备表SDT

4、分配过程

5、分配改进

6、逻辑设备表LUT的设置

7、回收


1、设备分配应考虑的因素

需要考虑设备固有属性、分配算法、设备安全等因素

什么是设备固有属性?
例如:独占式设备、共享设备、虚拟设备,就是设备的固有属性
独占式设备:同一时间,只能一被分配给一个进程,例如打印机
共享设备:同一时间,可以被多个进程使用,例如磁盘(宏观共享,微观依旧是串行,交替使用)
虚拟设备:例如假脱机技术实现的设备

什么是设备的分配算法?
就是一个设备什么时候分,分给谁等问题
一般的就是以下集中算法
先来先服务算法
优先级高优先算法
短任务优先算法等

什么叫做设备安全?
就是设备在被使用过程中,不能发生异常情况,例如死锁。
根据安全,有两种分配方式:
安全分配方式:一个进程在被分配一个设备后,必须阻塞,等待设备执行完毕,之后进程才可以进行其他任务
这样的优点是,不会发生死锁;但是设备和进程只能串行执行,效率低

不安全分配方式:一个进程被分配一个设备后,不用等待设备的执行,而是可以继续执行其他任务,例如申请新的设备等。
这样的优点是,进程和设备可以并行运行,效率高;但是可能会发生死锁问题

2、静态分配与动态分配

静态分配:就是进程运行前,就为其分配好全部的资源,运行结束后释放资源
动态分配:根据进程需要,动态的进行申请资源。

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

在理解数据结构之前
需要了解通道、控制器、设备之间的关系
一个通道可以管理多个控制器
一个控制器可以管理多个设备
通道->多控制器->设备
他们三者之间是从属的关系

(1)设备控制表 DCT

系统为每一个设备配置一张DCT,用于记录设备情况

设备控制表记录设备的以下信息

字段说明示例
设备类型标识设备的类型,例如打印机、鼠标、键盘等打印机、鼠标、键盘
设备表示符(物理设备名)设备的唯一标识符,例如MAC地址、设备ID等00:14:22:01:23:45 (MAC地址)
设备状态设备当前状态:如空闲、忙碌、故障等空闲、忙碌、故障
指向控制器表的指针每个设备由一个控制器控制,该字段指向控制器表中相应控制器指针(例如:控制器表ID)
重复执行次数或时间设备操作失败后的重复执行次数或时间,超限则视为失败3次、5秒(如:重试3次,超时5秒)
设备队列的队列指针设备的进程等待队列指针,指向等待设备的进程队列队列ID(如:队列1、队列2)

设备类型:标识设备的类型,例如打印机、鼠标、键盘等
设备表示符:物理设备名,即MAC地址
设备状态:设备是忙碌的,还是空闲,还是故障等
指向控制器表的指针:每个设备由一个控制器控制,该指针指向相应控制器
重复执行次数或时间:一个设备进行一次操作时,可能会失败,此时设备会进行多次重复,超过一定次数后才认定失败,这个字段就表示的失败次数
设备队列的队列指针:该设备的进程等待队列,很多进程可能在排队等待设备

(2)控制器控制表COCT

每一个设备控制对应一张COCT表,操作系统根据该表对控制器进行操作管理

控制器控制表记录以下信息:

字段说明示例
控制器标识符标识控制器的唯一ID控制器ID: 1、控制器ID: 2
控制器状态控制器当前状态,例如空闲、忙碌、故障等空闲、忙碌、故障
执行通道表的指针控制器由一个通道管理,该字段指向通道表中相应的通道指针(如:通道表ID)
控制器队列的首指针指向等待使用该控制器的进程队列的第一个进程队列首指针
控制器队列的尾指针指向等待使用该控制器的进程队列的最后一个进程队列尾指针

控制器标识符:标识控制器的唯一ID
控制器状态:标识控制器的状态,例如忙碌、空闲、故障等
执行通道表的指针:每一个控制器由一个通道管理,该指针指向对应通道
控制器队列的首指针、尾指针:指向等待使用该控制器的进程等待队列

(3)通道控制表CHCT

每一个通道对应一张CHCT,操作系统根据该表对通道进行操作和管理

通道控制表记录以下信息:
通道标识符:标识通道的唯一ID
通道状态:标识通道的状态,例如忙碌、空闲、故障等
通道队列的首指针、尾指针:指向等待使用该通道的进程等待队列

(4)系统设备表SDT

记录系统中全部设备的情况,每一个对应一个表目
表目又指向一个具体的表


该表中记录:
设备类型、设备标识符、设备控制表、驱动程序入口等信息

4、分配过程

(1)进程根据物理设备名,查找系统设备表
(2)根据系统设备表,查找到设备控制表;此时如果设备忙碌,则进程加入该设备的等待队列
(3)根据设备控制表找到控制器表;此时如果控制器忙碌,则进程加入控制器等待队列
(4)根据控制器表到通道控制表;此时如果通道忙碌,则进程加入通道等待队列
只有设备、控制器、通道三者同时空闲并分配,才算做进程分配设备成功
上述这种分配方式有明显的缺点,
缺点如下:
第一,什么是物理设备名?我不知道啊,对应不熟悉的用户,直接没法用
第二,如果物理设备名是A,现在换了一个设备,叫做B,程序崩溃
第三,假设现在有多台同类型的设备,例如有1000台打印机,此时1号打印机忙碌,可是你恰好用的1号打印机的名字,即使其他所有打印机都是空闲,此时进程也只能等,不能切换

5、分配改进

根据上述不足,我们可以改进如下:
不要用物理设备名字
使用逻辑设备名字
让操作系统进行逻辑设备和物理设备的映射
这就需要增加一个新的数据结构表,叫做逻辑设备表,负责物理设备和逻辑设备映射关系
这个逻辑设备表记录设备的物理名、逻辑名、设备驱动程序地址等信息
如图:

此时,怎么分配?
(1)进程申请设备,只提供设备逻辑名,根据此逻辑名,找到系统设备表
什么是设备逻辑名?
其实就是设备类型
(2)根据系统设备表,查找类型匹配,并且空闲的设备
在系统设备表中,就有记录了所有设备的表目,且每个表目都指明了该设备属于什么类型
此时,只需要对系统设备表进行查找,找到类型匹配,并且空闲的设备即可;然后分配
此时操作系统还要做一件事:在逻辑设备表中新增一个表项
此后,如果进程通过相同的逻辑设备名访问该设备
就可以直接通过该逻辑设备表进行查找,进行相应的分配工作

(3)根据设备控制表,找到控制器控制表,如空闲则分配;否则进程挂入控制器等待队列
(4)根据控制器控制表,找到通道;如果忙碌则挂入通道等待队列
只有设备、控制器、通道三者同时被分配,进程才算设备分配成功

6、逻辑设备表LUT的设置

逻辑设备表有几张表?
可以整个系统只有一张:
每个用户所用的逻辑设备名不允许重复,适用于单用户操作系统

也可以每一个用户一张:不同用户的逻辑设备名可以重复,适用于多用户操作系统

7、回收

修改相应的结构数据即可


 

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

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

相关文章

清空DNS 缓存

如果遇到修改了host文件,但是IP和域名的映射有问题的情况,可以尝试刷新DNS缓存。 ipconfig/flushdns win建加R建,然后输入cmd,然后回车 然后回车,或者点击确定按钮。 出现如下所示标识清空DNS 缓存成功。

Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)

教程概述 本教程先是幽络源初步教学分析掌阅书籍的网络结构,最后提供完整的爬取源码与使用说明,并展示结果,切记勿将本教程内容肆意非法使用。 原文链接:Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明…

Java爬虫实战:深度解析VIP商品详情获取技术

在数字化时代,数据的价值不言而喻。对于电商平台而言,掌握VIP商品的详细信息是提升服务质量、优化用户体验的关键。然而,这些信息往往被复杂的网页结构和反爬虫策略所保护。本文将带你深入了解如何使用Java编写爬虫,以安全、高效地…

硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144753092 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

编程初学者使用 MariaDB 数据库反射生成

编程初学者使用 MariaDB 数据库反射生成 数据库反射生成,是动词算子式通用代码生成器提供的高级功能,可以利用已有的数据库,反射生成相应数据库的前端和后端项目。此功能自动化程度很高,并且支持完善的元数据和数据编辑&#xff…

机器人加装电主轴【铣削、钻孔、打磨、去毛刺】更高效

机器人加装电主轴进行铣削、钻孔、打磨、去毛刺等作业,展现出显著的优势,并能实现高效加工。 1. 高精度与高效率 电主轴特点:高速电主轴德国SycoTec的产品,转速可达100000rpm,功率范围广,精度≤1μm&#…

RCCL/NCCL中的Transports方式选择:P2P or SHM or NET

本篇文章主要总结以下在传输路径方式选择的时候,选择每一种方式应该满足的条件和优先度。 本文初步总结,之后还会进行更新,欢迎大家补充 源码位置:tools/topo_expl Topo结构: 初始化判断前 ret设置为0,代…

upload-labs关卡记录11

先上传一个一句话木马试试,居然可以上传成功,复制图片链接,在另一个窗口打开: 会发现,我们明明上传的是shell.php,但是这里就是没有了php,这样我们在执行我们相关的语句的时候就无法执行了: 就…

elementUI——upload限制图片或者文件只能上传一个——公开版

最近在写后台管理系统时,遇到一个需求,就是上传图片,有且仅能上传一张。 效果图如下: 功能描述:上传图片时,仅支持单选,如果上传图片成功后,展示图片,并隐藏添加图片的…

springboot餐厅点餐系统丨源码+数据库+万字文档+PPT

作者简介: 作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 技术框架 开发语言:Java 框架:springbo…

ArkTs组件(2)

一.下拉列表组件&#xff1a;Select 1.接口 Select(options: Array<SelectOption>) 参数名类型必填说明optionsArray<SelectOption>是设置下拉选项。 SelectOption对象说明 名称类型必填说明valueResourceStr是 下拉选项内容。 iconResourceStr否 下拉选项图片…

【MATLAB第110期】#保姆级教学 | 基于MATLAB的PAWN全局敏感性分析方法(无目标函数)含特征变量置信区间分析

【MATLAB第110期】#保姆级教学 | 基于MATLAB的PAWN全局敏感性分析方法&#xff08;无目标函数&#xff09;含特征变量置信区间分析 一、介绍 PAWN&#xff08;Probabilistic Analysis With Numerical Uncertainties&#xff09;是一种基于密度的全局敏感性分析&#xff08;Gl…

请购单一直提示需求部门不能为空无法提交

终于发现了它的逻辑。用户很多次反馈&#xff0c;提交请购单时&#xff0c;提示需求部门不能为空&#xff0c;既使选择了需求部门&#xff0c;保存时&#xff0c;神奇的是会清空掉部门的信息&#xff0c;提交时就会有错误提示出来。 原因&#xff1a;光选择单头上的需求部门是…

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1]…

AIGC:生成图像动力学

文章目录 前言一、介绍二、方法2.1、运动预测模块运动纹理 2.2、图像渲染模块 三、数据集实验总结 前言 让静态的风景图能够动起来真的很有意思&#xff0c;不得不说CVPR2024 best paper实质名归&#xff0c;创意十足的一篇文章&#xff01;&#xff01;&#xff01; paper&a…

python: Oracle Stored Procedure query table

oracel sql script CREATE OR REPLACE PROCEDURE SelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId paramSchoolId; END SelectSchool; /-- 查询所有 CREATE OR REPLACE PROCEDURE SelectScho…

社区版Dify 轻松实现文生图,Dify+LLM+ComfyUI

社区版Dify 轻松实文生图&#xff0c;DifyLLMComfyUI Dify 安装可参考这里ComfyUI 其实 比 WebUI更简单更实用DifyComfyUIDifyLLM1. Qwen 通义千问大模型系列2. OpenAI大模型系列3. 本地Ollama搭建 DifyLLMComfyUI Dify 安装可参考这里 这是一个在Dify上实现 文生图的教程&…

Docker部署Sentinel

一、简介 是什么&#xff1a;面向分布式、多语言异构化服务架构的流量治理组件 能干嘛&#xff1a;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址&#xff1a;https://sentinelguard.io/zh-c…

实用工具推荐----Doxygen使用方法

目录 目录 1 软件介绍 2 Doxygen软件下载方法 3 Doxygen软件配置方法 4 标准注释描述 4.1 块注释 和 特殊描述字符 4.1.1 函数描述示例 4.1.2结构体数组变量示例 特别注意&#xff1a; 4.2单行注释 4.2.1 单个变量注释示例 特别注意&#xff1a; 4.2.2对于枚举变量…

并发编程 - 死锁的产生、排查与解决方案

在多线程编程中&#xff0c;死锁是一种非常常见的问题&#xff0c;稍不留神可能就会产生死锁&#xff0c;今天就和大家分享死锁产生的原因&#xff0c;如何排查&#xff0c;以及解决办法。 线程死锁通常是因为两个或两个以上线程在资源争夺中&#xff0c;形成循环等待&#xf…