欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年操作系统设备管理代码 .pdf

    • 资源ID:25952006       资源大小:276.62KB        全文页数:15页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年操作系统设备管理代码 .pdf

    第 1 页 共 15 页实 验 报 告课程名称操作系统实验项目设备管理专业 计算机科学与技术班级计科 4 班姓名秦宇学号10030409 指导教师于桂玲实验成绩2012年6月13日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 第 2 页 共 15 页实验 5 设备管理一、实验目的理解设备管理的概念和任务,掌握独占设备的分配、回收等主要算法的原理并编程实现。二、实验内容编写程序实现对独占设备的分配与回收的模拟。三、实验要求1、实现设备分配、回收、显示系统中设备信息的功能。2、通过设备类表和设备表记录系统中设备信息、以便进行设备分配。3、设备类表记录系统中全部设备的情况,每个设备类占一个表目,设备类表的数据结构如表 1 所示。设备类拥有设备数量可分配设备数量设备起始地址图 1 设备类表4、为每一个设备配置一张设备控制表,用于记录本设备的情况。设备控制表的数据结构如图 2 所示。绝对号设备状态(好 / 坏)是否分配(是 / 否)占有作业名相对号图 2 设备控制表4、程序中建立分配设备和回收设备函数。5、设系统有 3 类设备,每类设备的设备数分别为2、3、4。6、要求键盘输入作业名、作业所需设备类和设备相对号。程序代码:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - 第 3 页 共 15 页#include iostream #include string #include vector using namespace std; typedef struct node string ID; /进程名 string equipment; /申请的设备名 struct node *next; PCB; typedef struct string channelID; /通道标识符 bool state; /通道状态 PCB *use; /正在使用该通道的进程 PCB *blockqueue; /阻塞队首CHCT; typedef struct string controllerID; /控制器标示 bool state; /控制器状态 CHCT *front; /通道表指针 PCB *use; /正在使用该控制器的进程 PCB *blockqueue; /阻塞队首COCT; typedef struct char type; /设备类型 string equipmentID; /设备名 bool state; /设备状态 COCT *front; /控制器指针 PCB *use; /正在使用该设备的进程 PCB *blockqueue; /阻塞队首DCT; typedef struct char type; /设备类型 string equipmentID; /设备名 DCT *dct; /设备的 DCT SDT; DCT *k=new DCT; /键盘的 DCT DCT *m=new DCT; DCT *p=new DCT; DCT *t=new DCT; COCT *c1=new COCT; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 第 4 页 共 15 页COCT *c2=new COCT; COCT *c3=new COCT; CHCT *h1=new CHCT; CHCT *h2=new CHCT; CHCT *h3=new CHCT; int check(char cmd) switch(cmd) case c: /申请 return 1; case C: return 1; case d: /删除 return 2; case D: return 2; case a: /添加 return 3; case A: return 3; case f: /释放 return 4; case F: return 4; case q: return -1; case Q: return -1; case p: return 5; case P: return 5; default: return 0; void init(vector &SDT_table) SDT_table0.equipmentID=M; SDT_table0.type=2; /鼠标是第二类设备 SDT_table0.dct=m; /设备的 DCT表位置 SDT_table1.equipmentID=K; SDT_table1.type=1; SDT_table1.dct=k; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 第 5 页 共 15 页 SDT_table2.equipmentID=P; SDT_table2.type=3; SDT_table2.dct=p; SDT_table3.equipmentID=T; SDT_table3.type=4; SDT_table3.dct=t; h1-blockqueue=NULL; h1-channelID=通道 1; h1-state=true; h1-use=NULL; h2-blockqueue=NULL; h2-channelID=通道2; h2-state=true; h2-use=NULL; c1-blockqueue=NULL; c1-controllerID=控制器 1; c1-state=true; c1-front=h1; c1-use=NULL; c2-blockqueue=NULL; c2-controllerID=控制器 2; c2-state=true; c2-front=h1; c2-use=NULL; c3-blockqueue=NULL; c3-controllerID=控制器 3; c3-state=true; c3-front=h2; c3-use=NULL; k-blockqueue=NULL; k-equipmentID=K; k-state=true; /可用 k-type=1; k-front=c1; k-use=NULL; m-blockqueue=NULL; m-equipmentID=M; m-state=true; m-type=2; m-front=c1; m-use=NULL; p-blockqueue=NULL; p-equipmentID=P; p-state=true; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 第 6 页 共 15 页 p-type=3; p-front=c2; p-use=NULL; t-blockqueue=NULL; t-equipmentID=T; t-state=true; t-type=4; t-front=c3; t-use=NULL; int main() char cmd; DCT *temp_dct; COCT *temp_coct; CHCT *temp_chct; int l=0; string ID; string name; vector SDT_table(4); /设备表 vector DCT_table(4); /设备 vector COCT_table(3); /控制器表/ vector:size_type size_SDT_table; /设备表长度 init(SDT_table); /设备表的初始化 DCT u=*k; DCT_table.push_back(u); u=*m; DCT_table.push_back(u); u=*p; DCT_table.push_back(u); u=*t; DCT_table.push_back(u); COCT cu=*c1; COCT_table.push_back(cu); cu=*c2; COCT_table.push_back(cu); cu=*c3; COCT_table.push_back(cu); cout目前设备: K:键盘 (1) M:鼠标 (2) P:打印机 (3) T:显示器 (4)endl; coutc 申请使用设备。endl; coutd 删除设备。 endl; coutf 释放设备。 endl; couta 添加设备。 endl; while(l!=-1) cout; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - 第 7 页 共 15 页 cincmd; l=check(cmd); if(l=0) cout指令错误重新输入。endl; continue; else if(l=1) /申请使用设备 cout想要使用的设备名:ID; cout申请设备的进程名:name; PCB *head=new PCB; /申请 PCB的创建和链接 head-equipment=name; head-ID=ID; head-next=NULL; bool find=false; vector:iterator ator0; for(ator0=SDT_table.begin();ator0!=SDT_table.end();ator0+) if(ator0-equipmentID=ID) find=true; /有该设备 break; if(!find) cout没有该设备。 dct; if(!temp_dct-state) /设备忙 cout该设备目前处于忙状态, 已经把请求加入等待队列。blockqueue) /阻塞的队列为空 temp_dct-blockqueue=head; else /阻塞队列已经有内容 PCB* t=temp_dct-blockqueue; while(t) t=t-next; if(!t) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - 第 8 页 共 15 页 temp_dct-blockqueue=NULL; else t-next=head; else /设备空闲 temp_coct=temp_dct-front; temp_dct-state=false; temp_dct-use=head; /添加正在占用设备的进程 if(!temp_coct-state) /控制器不可用 cout目前该设备连接的控制器忙,已经把请求加入等待队列.blockqueue) /阻塞的队列为空 temp_coct-blockqueue=head; else /阻塞队列不空 PCB* t=temp_coct-blockqueue; while(t) t=t-next; if(!t) temp_dct-blockqueue=NULL; else t-next=head; else /控制器可用 temp_coct-state=false; /控制器置忙 temp_chct=temp_coct-front; temp_coct-use=head; if(!temp_chct-state) /通道不可用 cout目前该设备连接的通道忙,已经把请求加入等待队列.blockqueue) /阻塞队列为空 temp_chct-blockqueue=head; else /阻塞队列不为空 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - 第 9 页 共 15 页 PCB* t=temp_coct-blockqueue; while(t) t=t-next; if(!t) temp_dct-blockqueue=NULL; else t-next=head; else /通道可用 temp_chct-use=head; temp_chct-state=false; /通道状态置忙 cout该设备已经成功申请.endl; else if(l=2) /删除设备 vector:iterator ator; vector:iterator ator1; cout现在系统拥有的设备如下:endl; for(ator=SDT_table.begin();ator!=SDT_table.end();ator+) coutequipmentID ; coutname; for(ator=SDT_table.begin();ator!=SDT_table.end();ator+) if(ator-equipmentID=name) /查找到了该设备 ator1=ator-dct; COCT *temp=ator1-front; ator-dct=NULL; SDT_table.erase(ator); /从设备表中删除 ator=SDT_table.begin(); /* for(ator=SDT_table.begin();ator!=SDT_table.end();ator+) coutequipmentID ; coutuse) if(temp-use-equipment=name) /该设备正在占用控制器 if(!temp-blockqueue) /控制器的等待队列为空 temp-state=true; temp-use=NULL; else /控制器的等待队列有内容 PCB *tt=temp-blockqueue; temp-blockqueue-next=tt-next; temp-use=tt; tt-next=NULL; else /该设备没有占用控制器 temp-blockqueue=NULL; ator1-blockqueue=NULL; ator1-front=NULL; ator1-use=NULL; vector:iterator ator2; vector D; for(ator2=DCT_table.begin();ator2!=DCT_table.end();ator2+) if(ator2!=ator1) D.push_back(*ator2); DCT_table=D; / ator1=DCT_table.erase(ator1); /删除该设备 break; if(ator=SDT_table.end() /判断是否查找到设备 cout没有该设备 endl; else cout成功删除该设备。endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - 第 11 页 共 15 页 else if(l=3) /添加设备 SDT SDT_add; DCT DCT_add; int select; coutDCT_add.equipmentID; SDT_add.equipmentID=DCT_add.equipmentID; coutDCT_add.type; SDT_add.type=DCT_add.type; SDT_add.dct=&DCT_add; DCT_add.blockqueue=NULL; DCT_add.use=NULL; DCT_add.state=true; SDT_table.push_back(SDT_add); DCT_table.push_back(DCT_add); cout是否需要新增控制器: 1.新增 2.利用以前的 select; if(select=1) /新增 COCT c; c.blockqueue=NULL; c.state=true; coutc.controllerID; c.use=NULL; DCT_add.front=&c; cout1.channelIDt2.channelIDendl; coutselect; if(select=1) /链接到两个不同的通道 c.front=h1; else c.front=h2; cout连接成功 .endl; COCT_table.push_back(c); else /利用以前的控制器 for(vector:iterator ator=COCT_table.begin();ator!=COCT_table.end();ator+) /输出现有控制器名称名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - - - - - - - 第 12 页 共 15 页 coutcontrollerIDendl; coutname; for(ator=COCT_table.begin();ator!=COCT_table.end();ator+) /按名字进行选择 if(ator-controllerID=name) DCT_add.front=ator; cout链接成功 .endl; break; else if(l=4) /释放设备资源 coutname; DCT *DCT_temp; /暂存 DCT COCT *COCT_temp; /暂存 COCT CHCT *CHCT_temp; /暂存 CHCT for(vector:size_type i=0;ifront; CHCT_temp=COCT_temp-front; if(!DCT_temp-use) /如果该设备没有被使用 cout该设备未被占用,无需释放。use-ID=name) /该设备目前占用通道时 if(!CHCT_temp-blockqueue) /通道的等待队列无内容 CHCT_temp-state=true; CHCT_temp-use=NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 第 13 页 共 15 页 else /通道的等待队列不为空 CHCT_temp-use=CHCT_temp-blockqueue; CHCT_temp-blockqueue=CHCT_temp-blockqueue-next; if(COCT_temp-use-ID=name) /设备占用控制器 if(!COCT_temp-blockqueue) /控制器的等待队列为空 COCT_temp-use=NULL; COCT_temp-state=true; else /控制器等待队列有内容 COCT_temp-use=COCT_temp-blockqueue; COCT_temp-blockqueue=COCT_temp-blockqueue-next; if(!DCT_temp-blockqueue) /设备自身的等待队列 /为空 DCT_temp-state=true; DCT_temp-use=NULL; break; else /该设备目前被其他进程申请(队列不空 ) DCT_temp-use=DCT_temp-blockqueue; DCT_temp-blockqueue=DCT_temp-blockqueue-next; break; if(!COCT_temp-use) COCT_temp-use=DCT_temp-use; COCT_temp-state=false; if(!CHCT_temp-use) CHCT_temp-use=COCT_temp-use; CHCT_temp-state=false; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - 第 14 页 共 15 页 if(i=SDT_table.size() cout该设备不存在。endl; else cout成功释放该设备。endl; return 0; 实 验 结 果 及 分 析:运行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - 第 15 页 共 15 页实验总结:_通过这次实验我学习到了怎样通过计算机操作直接对计算机设备进行管理,可以知道目前设备有那些;还可以直接申请使用设备、删除设备、释放设备、添加设备。这种方法既方便又快捷,并且易于操作不会出现很大的误差。_ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -

    注意事项

    本文(2022年操作系统设备管理代码 .pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开