操作系统实验 设备管理汇总
- 格式:doc
- 大小:483.54 KB
- 文档页数:27
试验室操作设备管理制度一、目的为了规范试验室内设备的使用和管理,确保设备的正常运转和保养,提高设备利用率,保障科研实验和教学工作顺利进行,特制定本管理制度。
二、适用范围本管理制度适用于试验室内所有设备的使用和管理,并适用于试验室内所有教师、学生以及相关工作人员。
三、设备的使用权限1. 设备使用权限分为普通用户和高级用户两种。
2. 普通用户:指试验室内的学生和一般工作人员,有使用设备的基本权限,但必须接受相关培训和指导。
3. 高级用户:指相关专业教师或研究人员,有较高的设备使用权限,可对设备进行一定程度的调整和维护。
四、设备的开机和关闭1. 在使用设备前,使用人员应查看设备指南,了解设备使用方法和注意事项。
2. 开机:使用人员应按照设备说明书操作开机过程,并注意安全规范,确保设备安全启动。
3. 关机:使用人员应按照设备说明书操作关闭过程,并做好设备的清洁和维护工作,确保设备在关闭后处于正常状态。
五、设备的保养和维护1. 保养工作:试验室内设备保养由专门负责设备维护的人员负责,定期对设备进行保养、清洁和维护。
2. 维护工作:设备使用人员应在使用后及时清理设备,并上报设备在使用过程中出现的故障或异常情况。
六、设备的申请和使用1. 设备使用人员在使用设备前必须提前提交申请,包括使用时间、使用人员及使用目的等。
2. 审批权限:设备使用申请需经相关负责人审批,审批通过方可使用设备。
3. 使用安全:设备使用人员在使用设备时必须严格按照操作规程操作,确保设备的正常使用和使用人员的安全。
七、设备的故障处理1. 当设备出现故障时,设备使用人员应立即停止使用设备,并上报相关负责人。
2. 负责人应及时派人进行故障排除,并对设备进行维修或更换。
3. 使用人员在设备维修期间应遵守临时使用规定,确保实验或教学工作的正常进行。
八、设备的更新和淘汰1. 设备更新:试验室内的设备应根据实际需要进行更新,由相关负责人进行评估和采购新设备。
操作系统实验操作系统实验是计算机科学与技术领域非常重要的一门实验课程。
通过操作系统实验,学生可以深入了解操作系统的基本原理和实践技巧,掌握操作系统的设计和开发方法。
本文将介绍操作系统实验的一般内容和实验室环境要求,并详细说明一些常见的操作系统实验内容。
一、实验内容1. 实验环境搭建:操作系统实验通常在实验室中进行。
为了完成实验,学生需要搭建一个操作系统实验环境。
实验环境通常由一个或多个计算机节点组成,每个计算机节点需要安装操作系统实验所需要的软件和驱动程序。
2. 操作系统整体结构分析:学生首先需要通过文献研究和课堂学习,了解操作系统的整体结构和基本原理。
在实验中,学生需要分析和理解操作系统的各个模块之间的功能和相互关系。
3. 进程管理实验:进程是操作系统中最基本的运行单位。
在这个实验中,学生可以通过编写程序并使用系统调用来实现进程的创建、销毁和调度。
学生需要熟悉进程状态转换和调度算法,理解进程间通信和同步机制。
4. 内存管理实验:内存管理是操作系统中非常重要的一个模块。
学生需要实现虚拟内存管理、页面置换算法以及内存分配和回收策略。
通过这个实验,学生可以深入了解虚拟内存管理的原理和实际应用。
5. 文件系统实验:文件系统是操作系统中负责管理文件和目录的模块。
在这个实验中,学生需要实现基本的文件系统功能,如文件的创建、读取和修改。
学生还可以实现进程间的文件共享和保护机制。
6. 设备管理实验:设备管理是操作系统中与硬件设备交互的一个重要模块。
在这个实验中,学生需要实现设备的初始化、打开和关闭功能。
学生还可以实现设备驱动程序,完成对硬件设备的控制。
二、实验室环境要求1. 计算机硬件:实验室需要配备一定数量的计算机节点。
每个计算机节点需要具备足够的计算能力和内存容量,以满足操作系统实验的要求。
2. 操作系统软件:实验室中的计算机节点需要安装操作系统软件,通常使用Linux或者Windows操作系统。
此外,还需要安装相关的开发工具和编程语言环境。
操作系统的主要功能中设备管理包括什么操作系统是计算机系统中的核心组件之一,它具有多个重要功能,其中之一是设备管理。
设备管理涉及操作系统如何与计算机硬件设备进行交互,以提供高效的资源分配和访问控制。
本文将讨论操作系统的主要功能中设备管理所包括的内容。
设备管理的概述设备管理是操作系统的一项重要任务,其目标是协调和控制计算机系统中的各种硬件设备。
操作系统的设备管理器负责与设备驱动程序进行通信,管理设备的分配、初始化、调度和释放。
设备管理的主要目的是确保设备的高效使用,提供对设备的适当控制和保护,同时满足用户和应用程序的需求。
设备分配设备分配是设备管理的一项关键任务,它涉及将可用设备分配给应用程序或用户。
设备管理器通过跟踪设备的状态和使用情况来管理设备的分配。
在设备分配中,操作系统需要考虑以下几点:设备资源的请求应用程序或用户可能会请求访问某个设备资源。
操作系统必须确保请求的合法性,并根据设备的可用性和其他限制条件来决定是否满足请求。
设备资源的分配策略设备管理器需要确定如何分配设备资源给多个请求。
它可以使用不同的策略,如先到先得、优先级调度等,根据具体的应用场景和优先级来决定设备资源分配的方式。
设备资源的冲突解决当多个应用程序或用户请求同一个设备资源时,可能会发生冲突。
设备管理器需要解决这些冲突,并确保设备资源的公平分配。
设备初始化与配置设备初始化和配置是设备管理的另一个重要方面。
操作系统负责初始化和配置连接到计算机系统的各种设备。
设备初始化包括以下步骤:设备识别与检测操作系统需要检测新连接的设备并确定其类型和功能。
这个过程通常由设备驱动程序完成,操作系统负责与驱动程序进行通信并解析设备信息。
设备分配与驱动程序加载当检测到新设备后,操作系统将为其分配适当的资源,并加载相应的设备驱动程序。
设备驱动程序负责实现与设备的通信和控制,使操作系统能够对设备进行操作。
设备配置与初始化一旦设备驱动程序加载完成,操作系统将进行设备的配置和初始化。
操作系统的主要功能中设备管理包括哪些操作系统是计算机系统中至关重要的一部分,负责管理计算机的各种硬件和软件资源。
其中,设备管理是操作系统的主要功能之一,它涵盖了多个方面,旨在有效地管理和控制计算机系统中的各种设备。
本文将介绍操作系统中设备管理的主要功能。
设备驱动程序调度每个设备都需要对应的设备驱动程序,负责与操作系统进行交互并提供设备的功能。
设备管理的首要任务之一是调度设备驱动程序,确保设备能够被正确地初始化、配置和操作。
设备驱动程序调度策略的选择取决于多个因素,如设备的优先级、请求队列的长度等。
操作系统需要根据这些因素来决定选择哪个驱动程序来服务设备的请求,以提高设备的利用率和系统的性能。
设备分配与释放在多道程序环境下,多个进程可能同时请求访问某个设备。
设备管理的重要任务之一是有效地管理设备的分配与释放。
设备分配的目标是合理分配资源以满足各个进程的设备需求,并避免资源的浪费。
操作系统需要根据进程的优先级和策略来决定设备的分配方式,以确保资源能够得到有效利用。
设备释放的目标是当设备不再被进程使用时,及时释放设备资源以便其他进程使用。
操作系统需要监控设备的使用情况,并在适当的时候将设备资源返还给系统。
设备状态管理设备状态管理是设备管理的关键要素之一。
操作系统需要跟踪每个设备的状态,包括设备是否空闲、是否正在运行、是否发生错误等。
通过设备状态管理,操作系统能够及时检测设备的变化并做出相应的处理。
设备状态管理还包括处理设备的中断、故障和错误。
当设备发生中断或故障时,操作系统需要捕获相应的信号并对其进行处理,以确保系统的稳定性和可靠性。
设备性能优化设备管理还涉及到对设备性能的优化。
操作系统需要通过各种技术手段来提高设备的访问速度和效率。
其中一种常见的优化技术是设备缓存。
操作系统可以使用缓存技术来缓存设备的数据,以减少对设备的访问次数,提高数据的读写速度。
此外,操作系统还可以通过设备调度算法的优化,使得设备能够更加高效地响应进程的请求。
操作系统实践报告引言:现代计算机已经成为人们生活和工作中不可或缺的一部分。
而计算机的核心就是操作系统。
操作系统是一种控制和管理计算机硬件和软件资源的软件系统。
操作系统为我们提供了方便的用户界面和高效的资源管理,使得计算机能够更加稳定和高效地运行。
本报告将重点介绍操作系统的实践,包括内存管理、文件系统、进程管理等方面的内容。
通过实践操作系统,我们将更好地理解和掌握计算机系统的工作原理。
一、内存管理内存管理是操作系统中最核心的部分之一。
在操作系统实践中,我们学习了常见的内存管理技术,如连续内存分配和非连续内存分配。
连续内存分配是将内存划分为若干连续的空闲区域,并根据进程的需要将其分配给进程。
而非连续内存分配则是将内存分为若干不连续的块,进程在运行时可以随时申请或释放内存。
通过实践内存管理,我们深入了解了进程的内存空间划分和管理方式,为进一步优化计算机系统性能提供了基础。
二、文件系统文件系统是操作系统中用于管理文件和目录的一种机制。
在实践操作系统中,我们学习了常见的文件系统类型,如FAT、NTFS等。
文件系统不仅负责文件和目录的创建、读写和删除,还需要处理文件的权限控制和数据的存储方式。
通过实践文件系统,我们掌握了文件系统的操作和管理技巧,提高了计算机系统的文件存储和访问效率。
三、进程管理进程管理是操作系统中最重要的功能之一。
在操作系统实践中,我们学习了进程的创建、调度和终止等操作。
进程是计算机系统中正在执行的程序的实例。
通过实践进程管理,我们深入了解了进程的运行机制和调度算法。
合理的进程管理能够提高计算机系统的并发性和响应速度,为用户提供更好的使用体验。
四、设备管理设备管理是操作系统管理计算机硬件设备的关键部分。
在操作系统实践中,我们学习了设备的分配、控制和回收等操作。
设备可以是计算机内部的硬件设备,如CPU、内存等,也可以是外部的设备,如打印机、鼠标等。
通过实践设备管理,我们熟悉了设备的初始化和驱动程序的安装,提高了计算机系统对硬件设备的控制和管理能力。
设备管理系统分组实验报告
实验名称:设备管理系统分组
实验目的:
1.了解设备管理系统的分组功能;
3.学习如何将设备进行分组管理。
实验步骤:
1.登录设备管理系统账号;
2.打开设备管理系统界面,找到分组管理功能;
3.点击创建新分组,输入分组名称和描述信息;
4.确认创建,系统会自动创建一个新的分组;
6.点击删除分组,系统会要求确认删除分组;
7.在分组管理界面,可以看到已创建的分组列表;
8.在分组列表中选择一个分组,点击进入该分组的设备列表;
9.在设备列表中,可以选择需要加入该分组的设备,点击确认;
10.设备成功加入分组后,可以在设备管理界面中找到该分组。
实验结果:
实验总结:
在实验过程中,我们还学习了如何将设备加入分组。
通过选择需要加入分组的设备,可以快速将设备归类管理。
这样一来,我们可以更好地掌控设备的工作状态和运行情况,提高了设备的运维管理能力。
综上所述,设备管理系统的分组功能对于设备管理十分重要。
通过分组功能,我们可以更好地对设备进行分类和管理,提高了设备管理的效率和可靠性。
在今后的实际工作中,我们将充分利用设备管理系统的分组功能,对设备进行科学、有效的管理。
计算机系统管理操作规程与设备管理一、引言计算机系统在现代工作环境中扮演着重要角色,其稳定和高效运行对企业的正常运作至关重要。
为了确保计算机系统的良好管理和设备的有效维护,制定一套操作规程和设备管理措施是必不可少的。
本文将详细介绍计算机系统管理操作规程以及设备管理的重要性和具体要求。
二、计算机系统管理操作规程1. 规范开机和关机程序为确保计算机系统的正常运行,开机和关机的程序应按照以下步骤进行:(1) 开机前检查电源、显示器、键盘等设备是否正常连接;(2) 按照指定顺序开启计算机系统;(3) 关机前先关闭所有运行的程序和文件,确保数据保存完整;(4) 按照规定的步骤关闭计算机系统。
2. 确保系统安全(1) 定期更新和安装系统和应用程序的安全补丁;(2) 安装安全防护软件,并定期更新病毒库;(3) 设置强密码,并定期更换密码;(4) 禁止非授权人员访问和更改系统设置。
3. 数据备份与恢复(1) 定期备份重要数据,并将备份文件储存在安全的地方;(2) 定期测试备份文件的有效性,确保能够正常恢复数据;(3) 灾难恢复计划,针对系统故障或灾难情况,建立有效的恢复计划。
4. 用户权限管理(1) 限制用户账号的权限,确保只有合适的人员可以进行特定操作;(2) 管理和审查用户账号,及时注销离职员工的账号;(3) 实施强制访问控制,只允许授权用户访问敏感信息。
三、设备管理1. 设备分类和登记(1) 将所有计算机设备进行分类,包括服务器、个人电脑、打印机等;(2) 编制设备登记册,记录设备的基本信息,包括设备型号、序列号、购买日期等;(3) 定期检查设备状态,清理设备内部灰尘,确保设备良好运行。
2. 设备维护与保养(1) 建立设备维护计划,包括定期清洁设备外壳、更换耗材、检查设备温度等;(2) 对于设备故障,及时维修或更换;(3) 提供合适的设备保养指南给用户,教育用户正确使用设备。
3. 设备报废与更新(1) 对于老旧设备,建立报废程序,包括设备清理、数据安全处理等;(2) 定期评估设备的性能和使用情况,制定合理的设备更新计划;(3) 对于设备更新,确保与系统要求兼容,同时进行测试和数据迁移。
实验室信息管理系统操作手册系统介绍实验室信息管理系统是一个管理实验室信息的系统。
通过该系统,您可以管理实验室的设备、人员、实验等信息,协助实验室管理人员更好地管理实验室和提高实验室的工作效率。
登录系统访问实验室信息管理系统的网址,输入您的账号和密码,点击登录按钮。
如果您输入的账号和密码是正确的,将进入系统的主界面。
系统界面系统的主界面分为左右两个部分,左边是标签栏,右边是各个标签的详细信息。
标签栏标签栏显示系统的各个模块,包括实验室设备管理、实验室人员管理、实验室实验管理、实验室文档管理、实验室信息统计等。
模块详细信息点击标签栏中的模块,右边的详细信息中将显示该模块下的所有信息。
例如,如果您点击“实验室设备管理”标签,右边的详细信息中将显示实验室中的所有设备。
实验室设备管理在实验室设备管理模块中,您可以添加、修改或删除实验室的设备信息。
添加设备在实验室设备管理模块中,点击“添加设备”按钮,填写设备的详细信息,包括设备名称、型号、价格、购买日期等。
填写完毕后,点击“保存”按钮即可保存该设备信息。
修改设备在实验室设备管理模块中,选择需要修改的设备,点击“编辑”按钮,修改设备的详细信息,包括设备名称、型号、价格、购买日期等。
修改完毕后,点击“保存”按钮即可保存修改后的设备信息。
删除设备在实验室设备管理模块中,选择需要删除的设备,点击“删除”按钮,系统将会提示您确认删除该设备,确认后该设备将被删除。
实验室人员管理在实验室人员管理模块中,您可以添加、修改或删除实验室的人员信息。
添加人员在实验室人员管理模块中,点击“添加人员”按钮,填写人员的详细信息,包括姓名、性别、联系电话、电子邮箱等。
填写完毕后,点击“保存”按钮即可保存该人员信息。
修改人员在实验室人员管理模块中,选择需要修改的人员,点击“编辑”按钮,修改人员的详细信息,包括姓名、性别、联系电话、电子邮箱等。
修改完毕后,点击“保存”按钮即可保存修改后的人员信息。
《操作系统》实验二一、实验目的本实验旨在加深对操作系统基本概念和原理的理解,通过实际操作,提高对操作系统设计和实现的认知。
通过实验二,我们将重点掌握进程管理、线程调度、内存管理和文件系统的基本原理和实现方法。
二、实验内容1、进程管理a.实现进程创建、撤销、阻塞、唤醒等基本操作。
b.设计一个简单的进程调度算法,如轮转法或优先级调度法。
c.实现进程间的通信机制,如共享内存或消息队列。
2、线程调度a.实现线程的创建、撤销和调度。
b.实现一个简单的线程调度算法,如协同多任务(cooperative multitasking)。
3、内存管理a.设计一个简单的分页内存管理系统。
b.实现内存的分配和回收。
c.实现一个简单的内存保护机制。
4、文件系统a.设计一个简单的文件系统,包括文件的创建、读取、写入和删除。
b.实现文件的存储和检索。
c.实现文件的备份和恢复。
三、实验步骤1、进程管理a.首先,设计一个进程类,包含进程的基本属性(如进程ID、状态、优先级等)和操作方法(如创建、撤销、阻塞、唤醒等)。
b.然后,实现一个进程调度器,根据不同的调度算法对进程进行调度。
可以使用模拟的方法,不需要真实的硬件环境。
c.最后,实现进程间的通信机制,可以通过模拟共享内存或消息队列来实现。
2、线程调度a.首先,设计一个线程类,包含线程的基本属性(如线程ID、状态等)和操作方法(如创建、撤销等)。
b.然后,实现一个线程调度器,根据不同的调度算法对线程进行调度。
同样可以使用模拟的方法。
3、内存管理a.首先,设计一个内存页框类,包含页框的基本属性(如页框号、状态等)和操作方法(如分配、回收等)。
b.然后,实现一个内存管理器,根据不同的内存保护机制对内存进行保护。
可以使用模拟的方法。
4、文件系统a.首先,设计一个文件类,包含文件的基本属性(如文件名、大小等)和操作方法(如创建、读取、写入、删除等)。
b.然后,实现一个文件系统管理器,包括文件的存储和检索功能。
操作系统实验名称实验六设备管理姓名专业学号日期 2015年12月01日指导老师一、实验目的1.理解设备管理的概念和任务。
2.掌握独占设备的分配、回收等主要算法的原理并编程实现。
二、实验内容与要求1.在Windows系统中,编写程序实现对独占设备的分配和回收的模拟,该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。
三、实验原理1.独占设备的分配、回收等主要算法的原理。
为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实现了设备独立性,又叫做设备无关性。
设备独立性的含义是:应用程序独立于具体使用的物理设备。
为了实现独占设备的分配,系统设置数据表格的方式也不相同,在实验中只要设计合理即可。
这里仅仅是一种方案,采用设备类表和设备表。
(1)数据结构操作系统设置“设备分配表”,用来记录计算机系统所配置的独占设备类型、台数以及分配情况。
设备分配表可由“设备类表”和“设备表”两部分组成,如下设备类表设备表控制器表通道表设备队列队首指针。
凡因请求本设备而未得到满足的进程,其PCB都应按照一定的策略排成一个队列,称该队列为设备请求队列或简称设备队列。
其队首指针指向队首PCB。
在有的系统中还设置了队尾指针。
设备状态。
当设备自身正处于使用状态时,应将设备的忙/闲标志置“1”。
若与该设备相连接的控制器或通道正忙,也不能启动该设备,此时则应将设备的等待标志置“1”。
与设备连接的控制器表指针。
该指针指向该设备所连接的控制器的控制表。
在设备到主机之间具有多条通路的情况下,一个设备将与多个控制器相连接。
此时,在DCT中还应设置多个控制器表指针。
(2)设备分配1)当进程申请某类设备时,系统先查“设备类表”。
2)如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。
3)分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已分配”且填上占用设备的进程名。
4)然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上装上存储介质。
(3)设备回收当进程执行结束撤离时应归还所占设备,系统根据进程名查设备表,找出进程占用设备的登记栏,把标志修改为“未分配”,清除进程名。
同时把回收的设备台数加到设备类表中的现存台数中。
设备分配程序的改进增加设备的独立性:为了获得设备的独立性,进程应使用逻辑设备名I/O。
这样,系统首先从SDT中找出第一个该类设备的DCT。
若该设备忙,又查找第二个该类设备的DCT,仅当所有该类设备都忙时,才把进程挂在该类设备的等待队列上,而只要有一个该类设备可用,系统便进一歩计算分配该设备的安全性。
四、程序流程图设备独立性五、实验程序#include<iostream>using namespace std;//数据结构typedef struct node{char name[10];char devname[10];struct node *next;}PCB;//进程PCB * run;//执行队列//typedef struct Node{char identify[10];//标识int state;//设备状态PCB *blocking;//阻塞队列指针}CHCT;//通道控制表CHCT * CH1, * CH2;//设置两个通道为ch1,ch2//typedef struct NOde{char identify[10];//标识int state;//设备状态CHCT * chct;//CHCTPCB *blocking;//阻塞队列指针struct NOde *next;}COCT;//控制器控制表COCT * cohead;typedef struct NODe{char identify[10];//标识char type;//设备类型int state;//设备状态int times;//重复执行次数PCB *blocking;//阻塞队列指针COCT * coct;//COCT}DCT;//设备控制表typedef struct NODE{char type;//类别char identify[10];//标识DCT * dct;//DCT设备控制表//驱动入口地址struct NODE *next;}SDT;//系统设备表SDT * head;SDT * checkdel;void Init(){PCB * ch1block,* ch2block,* co1block,* co2block,* co3block,* d1block,* d2block,* d3block,* d4block;//进程控制块COCT * CO1,* CO2,* CO3;DCT *d1,*d2,*d3,*d4;SDT *s1,*s2,*s3,*s4;//=================================================run=(PCB *)malloc(sizeof(PCB));run->next=NULL;CH1=(CHCT *)malloc(sizeof(CHCT));CH2=(CHCT *)malloc(sizeof(CHCT));strcpy(CH1->identify,"ch1");strcpy(CH2->identify,"ch2");CH1->state=0;CH2->state=0;ch1block=(PCB *)malloc(sizeof(PCB));ch1block->next=NULL;ch2block=(PCB *)malloc(sizeof(PCB));ch2block->next=NULL;CH1->blocking=ch1block;CH2->blocking=ch2block;cohead=(COCT *)malloc(sizeof(COCT));cohead->next=NULL;CO1=(COCT *)malloc(sizeof(COCT));cohead->next=CO1;CO1->next=NULL;CO2=(COCT *)malloc(sizeof(COCT));CO1->next=CO2;CO2->next=NULL;CO3=(COCT *)malloc(sizeof(COCT));CO2->next=CO3;CO3->next=NULL;CO1->state=0;CO2->state=0;CO3->state=0;co1block=(PCB *)malloc(sizeof(PCB));co1block->next=NULL;co2block=(PCB *)malloc(sizeof(PCB));co2block->next=NULL;co3block=(PCB *)malloc(sizeof(PCB));co3block->next=NULL;strcpy(CO1->identify,"co1");strcpy(CO2->identify,"co2");strcpy(CO3->identify,"co3");CO1->chct=CH1;CO2->chct=CH1;CO3->chct=CH2;CO1->blocking=co1block;CO2->blocking=co2block;CO3->blocking=co3block;//===================================================== d1block=(PCB *)malloc(sizeof(PCB));d2block=(PCB *)malloc(sizeof(PCB));d3block=(PCB *)malloc(sizeof(PCB));d4block=(PCB *)malloc(sizeof(PCB));d1block->next=NULL;d2block->next=NULL;d3block->next=NULL;d4block->next=NULL;d1=(DCT *)malloc(sizeof(DCT));strcpy(d1->identify,"P");//p表示打印机设备d2=(DCT *)malloc(sizeof(DCT));strcpy(d2->identify,"T");//t表示显示器设备d3=(DCT *)malloc(sizeof(DCT));strcpy(d3->identify,"K");//k表示键盘设备d4=(DCT *)malloc(sizeof(DCT));strcpy(d4->identify,"M");//m表示鼠标设备d1->coct=CO1; //控制器d2->coct=CO2;d3->coct=CO3;d4->coct=CO3;d1->state=0;//状态d2->state=0;d3->state=0;d4->state=0;d1->type='o';//o表示输出设备outputd2->type='o';d3->type='i';//i表示输入设备d4->type='i';d1->blocking=d1block;d2->blocking=d2block;d3->blocking=d3block;d4->blocking=d4block;//================================head=(SDT *)malloc(sizeof(SDT));head->next=NULL;s1=(SDT *)malloc(sizeof(SDT));s2=(SDT *)malloc(sizeof(SDT));s3=(SDT *)malloc(sizeof(SDT));s4=(SDT *)malloc(sizeof(SDT));head->next=s1;s1->next=s2;s2->next=s3;s3->next=s4;s4->next=NULL;s1->dct=d1;s2->dct=d2;s3->dct=d3;s4->dct=d4;strcpy(s1->identify,"P");strcpy(s2->identify,"T");strcpy(s3->identify,"K");strcpy(s4->identify,"M");s1->type='o';s2->type='o';s3->type='i';s4->type='i';//testSDT *temp=head->next;}//============================================ //添加设备时候,添加新控制器,把控制器加到最后void Addcotrol (COCT *temp)//添加控制器函数{COCT *cotemp=cohead;while(cotemp->next!=NULL){cotemp=cotemp->next;}cotemp->next=temp;temp->next=NULL;}//查看所有控制器,选择所要连接的控制器void Showallco(){COCT *temp=cohead->next;while(temp!=NULL){cout<<temp->identify<<" ";temp=temp->next;}cout<<endl;}//查找要连接的控制器COCT * Findco(char a[]){COCT * temp=cohead->next;while(temp!=NULL){if(!strcmp(temp->identify,a)){return temp;}temp=temp->next;}return temp;}//删除设备时候,判断是不是同时删除控制器,等于1删,0不删int sf_deleteco(char a[],char b[]){SDT *temp;temp=head->next;while(temp!=NULL){if((strcmp(temp->identify,a))&&((!strcmp(temp->dct->coct->identify,b)))) {return 0;}temp=temp->next;}return 1;}//删除设备的时候同时删除控制器void Deletecotrol(COCT *te){COCT * temp=cohead;while(temp->next!=te){temp=temp->next;}temp->next=te->next;delete(te);}//添加设备,查找设备是不是已经存在int sf_exist(char a[]){SDT *temp;if(head->next==NULL){return 0;}else{temp=head->next;while(temp!=NULL){if(!strcmp(a,temp->identify)){checkdel=temp;return 1;}temp=temp->next;}return 0;}}//申请设备时候,如果忙,将设备挂到等待队列void Addwaitpcb(PCB * p1,PCB * p2){PCB *temp=p1;while(temp->next!=NULL){temp=temp->next;}temp->next=p2;p2->next=NULL;}//回收设备时候,对PCB的操作void Deletepcb(char a[]){PCB * temp2=run->next,* temp=run;while(temp2!=NULL){if(!strcmp(temp2->devname,a)){temp->next=temp2->next;delete(temp2);break;}temp=temp2;temp2=temp->next;}}//判断等待队列是不是空int sf_pcbnull(PCB *temp){if(temp->next==NULL){return 0;}else return 1;}//查看所有设备状态void Showmenu(){PCB * ptemp=run->next;SDT * temp=head->next;DCT * dtemp;COCT * cotemp;CHCT * chtemp;cout<<"SDT"<<" i/o"<<" COCT"<<" CHCT"<<endl;while(temp!=NULL){dtemp=temp->dct;cotemp=dtemp->coct;chtemp=cotemp->chct;cout<<dtemp->identify<<"["<<dtemp->state<<"]"<<"\t"<<dtemp->type<<"\t"<<cot emp->identify<<"["<<cotemp->state<<"]"<<"\t"<<chtemp->identify<<"["<<chtemp->state<<"]"<<endl;temp=temp->next;}while(ptemp!=NULL){cout<<"进程"<<ptemp->name<<"申请了设备"<<ptemp->devname<<endl;ptemp=ptemp->next;}cout<<endl;}//设备独立性时候查找要查找的类型是不是存在int sf_typeexist(char ch){SDT *temp;if(head->next==NULL){return 0;}else{temp=head->next;while(temp!=NULL){if(temp->type==ch){return 1;}else temp=temp->next;}}return 0;}//增加设备void Adddevice(){cout<<"增加设备"<<endl;//写入设备名称SDT * stemp,* s2temp;COCT *cotemp;DCT *temp;char temptype;PCB *tempblock,* cotempblock;char choice;char eqary[10],coary[10];cin>>eqary;//此处查找SDT,看是否所要添加的设备已经存在if(sf_exist(eqary)==1){//设备已经存在cout<<"设备已存在"<<endl;}else{//设备不存在tempblock=(PCB *)malloc(sizeof(PCB));tempblock->next=NULL;temp=(DCT *)malloc(sizeof(DCT));strcpy(temp->identify,eqary);temp->blocking=tempblock;temp->state=0;cout<<"输入设备类型"<<endl;cin>>temptype;temp->type=temptype;stemp=(SDT *)malloc(sizeof(SDT));stemp->next=NULL;stemp->dct=temp;stemp->type=temptype;strcpy(stemp->identify,eqary);s2temp=head;while(s2temp->next!=NULL){s2temp=s2temp->next;}s2temp->next=stemp;stemp->next=NULL;cout<<"是否添加控制器?(y/n)"<<endl;cin>>choice;if((choice=='y')||(choice=='Y')){ //添加新控制器cout<<"输入控制器名称:"<<endl;cin>>coary;cotempblock=(PCB *)malloc(sizeof(PCB));cotempblock->next=NULL;cotemp=(COCT *)malloc(sizeof(COCT));cotemp->next=NULL;strcpy(cotemp->identify,coary);cotemp->state=0;cotemp->blocking=cotempblock;Addcotrol(cotemp);temp->coct=cotemp;cout<<"请选择连接的通道:1/2"<<endl;//因为只定义了两个通道,选1就是ch1,选2就是ch2int i;cin>>i;if(i==1){cotemp->chct=CH1;}else{cotemp->chct=CH2;}}else{//不添加控制器Showallco();cout<<"输入连接控制器的名称:"<<endl;cin>>coary;cotemp=Findco(coary);temp->coct=cotemp;}cout<<"设备"<<eqary<<"添加成功!"<<endl;}}//删除设备void Deletedevice(){//删除设备的时候同时删除pcb Deletepcbcout<<"删除设备"<<endl;COCT * temp;SDT * stemp;char chary[10];char tempary[10];cin>>chary;if(sf_exist(chary)==0){cout<<"删除设备不存在!"<<endl;}else if(checkdel->dct->state==1){cout<<"设备正在使用无法删除"<<endl;}else{//sf_deleteco();Deletepcb(chary);strcpy(tempary,checkdel->dct->coct->identify);if(sf_deleteco(chary,tempary)){//删除控制器temp=checkdel->dct->coct;Deletecotrol(temp);}stemp=head;while(stemp->next!=checkdel){stemp=stemp->next;}stemp->next=checkdel->next;delete(checkdel);cout<<"设备"<<chary<<"删除成功!"<<endl;}}//申请设备void Applydevice(){cout<<"申请设备"<<endl;PCB *ptemp;DCT *dtemp;COCT *cotemp;CHCT *chtemp;char pname[10],eqname[10];cin>>pname>>eqname;if(sf_exist(eqname)==0){cout<<"设备不存在!"<<endl;}else{//checkdel(对应要申请设备的指针)ptemp=(PCB *)malloc(sizeof(PCB));strcpy(ptemp->name,pname);ptemp->next=NULL;dtemp=checkdel->dct;//====================此处是否要考虑状态的改变========================if(dtemp->state==1){//设备忙Addwaitpcb(dtemp->blocking,ptemp);cout<<"进程"<<ptemp->name<<"被挂在设备"<<dtemp->identify<<"的等待队列上!"<<endl;}else{//设备不忙cotemp=dtemp->coct;if(cotemp->state==1){//控制器忙Addwaitpcb(cotemp->blocking,ptemp);cout<<"进程"<<ptemp->name<<"被挂在控制器"<<cotemp->identify<<"的等待队列上!"<<endl;}else{//控制器不忙chtemp=cotemp->chct;if(chtemp->state==1){//通道忙Addwaitpcb(chtemp->blocking,ptemp);cout<<"进程"<<ptemp->name<<"被挂在通道"<<chtemp->identify<<"的等待队列上!"<<endl;}else{//通道不忙Addwaitpcb(run,ptemp);dtemp->state=1;cotemp->state=1;chtemp->state=1;strcpy(ptemp->devname,eqname);cout<<"进程"<<pname<<"申请设备"<<eqname<<"成功!"<<endl;}}}}//回收设备void Recycledevice(){cout<<"回收设备"<<endl;// char ch;char eqname[10];DCT *dtemp;COCT *cotemp;CHCT *chtemp;PCB *pctemp1,*pctemp2;cin>>eqname;if(sf_exist(eqname)==0){//设备不存在cout<<"要回收的设备不存在!"<<endl;}else if(checkdel->dct->state==0){//设备存在,但是不需要回收cout<<"设备处于闲状态,不需要回收!"<<endl;}else{//需要回收Deletepcb(eqname);//dtemp=checkdel->dct;cotemp=dtemp->coct;chtemp=cotemp->chct;dtemp->state=0;cotemp->state=0;chtemp->state=0;if(sf_pcbnull(chtemp->blocking)){//如果通道等待队列不空pctemp1=chtemp->blocking;pctemp2=pctemp1->next;pctemp1->next=pctemp2->next;pctemp2->next=NULL;strcpy(pctemp2->devname,eqname);Addwaitpcb(run,pctemp2);dtemp->state=1;cotemp->state=1;chtemp->state=1;}elseif(sf_pcbnull(cotemp->blocking)){//如果控制器的等待队列不空pctemp1=cotemp->blocking;pctemp2=pctemp1->next;pctemp1->next=pctemp2->next;pctemp2->next=NULL;strcpy(pctemp2->devname,eqname);Addwaitpcb(run,pctemp2);dtemp->state=1;cotemp->state=1;chtemp->state=1;}else{if(sf_pcbnull(dtemp->blocking)){//如果设备的等待队列不空pctemp1=dtemp->blocking;pctemp2=pctemp1->next;pctemp1->next=pctemp2->next;pctemp2->next=NULL;strcpy(pctemp2->devname,eqname);Addwaitpcb(run,pctemp2);dtemp->state=1;cotemp->state=1;chtemp->state=1;}}}cout<<"设备"<<eqname<<"回收成功!"<<endl;}}//设备独立性=======void Independence(){cout<<"设备独立性--申请设备:"<<endl;//cout<<"申请设备"<<endl;char type;char pname[10];SDT * temp,* temp2;PCB *ptemp;DCT *dtemp;COCT *cotemp;CHCT *chtemp;cin>>pname>>type;if((type=='o')||(type=='i')){//=========还得考虑要申请的类型是不是存在============================ if(sf_typeexist(type)==0){cout<<"要申请的该类设备不存在!"<<endl;}else{temp=head->next;while(temp!=NULL){if((temp->type==type)&&(temp->dct->state==0)){//当设备类型相同,并且设备空闲temp2=temp;break;}else if((temp->type==type)){temp2=temp;}temp=temp->next;}sf_exist(temp2->identify);//=============================================== ==ptemp=(PCB *)malloc(sizeof(PCB));strcpy(ptemp->name,pname);ptemp->next=NULL;dtemp=checkdel->dct;//要用了这个函数才可以========================================================================== if(temp2->dct->state==0){//当设备不忙时候cotemp=dtemp->coct;if(cotemp->state==1){//控制器忙Addwaitpcb(cotemp->blocking,ptemp);cout<<"进程"<<ptemp->name<<"被挂在控制器"<<cotemp->identify<<"的等待队列上!"<<endl;}else{//控制器不忙chtemp=cotemp->chct;if(chtemp->state==1){//通道忙Addwaitpcb(chtemp->blocking,ptemp);cout<<"进程"<<ptemp->name<<"被挂在通道"<<chtemp->identify<<"的等待队列上!"<<endl;}else{//通道不忙Addwaitpcb(run,ptemp);dtemp->state=1;cotemp->state=1;chtemp->state=1;strcpy(ptemp->devname,temp2->identify);cout<<"进程"<<pname<<"申请设备"<<temp2->identify<<"成功!"<<endl;}}}else{//当设备忙时候Addwaitpcb(dtemp->blocking,ptemp);cout<<"进程"<<ptemp->name<<"被挂在设备"<<dtemp->identify<<"的等待队列上!"<<endl;}}}else{cout<<"输入设备的类型错误!"<<endl;}}//void Show(){cout<<"A :增加设备"<<endl;cout<<"D :删除设备"<<endl;cout<<"S :申请设备"<<endl;cout<<"H :回收设备"<<endl;cout<<"I :设备独立性"<<endl;cout<<"Q :退出"<<endl;}//int main(){ cout<<" 操作系统实验三 "<<endl;cout<<" "<<endl;cout<<"相关指令:"<<endl;Init();Show();char choice;while(true){Showmenu();cout<<"选择指令:"<<endl;cin>>choice;switch(choice){case 'a':case 'A':Adddevice();break;case 'd':case 'D':Deletedevice();break;case 's':case 'S':Applydevice();break;case 'h':case 'H':Recycledevice();break;case 'q':case 'Q':exit(0);case 'i':case 'I':Independence();break;default :cout<<"指令错误"<<endl;break;}}return 0;}六、运行结果1)2)增加设备Pen3)增加设备paper4)删除设备pen6)回收设备。