




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验实验六设备管理学号 1415251011姓名 黄天班级 14 集成1班华侨大学电子工程系实验目的1、理解设备管理的概念和任务。2、掌握独占设备的分配、回收等主要算法的原理并编程实现。实验内容与基本要求1、在Windows系统中,编写程序实现对独占设备的分配和回收的模拟,该 程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。 实验报告内容1、独占设备的分配、回收等主要算法的原理。为了提高操作系统的可适应性和可扩展性,现代操作系统中都毫无例外地实 现了设备独立性,又叫做设备无关性。设备独立性的含义是:应用程序独立于具 体使用的物理设备。为了实现独占设备的分配,系统设置数据表格
2、的方式也不相同, 在实验中只 要设计合理即可。这里仅仅是一种方案,采用设备类表和设备表。(1)数据结构操作系统设置设备分配表”用来记录计算机系统所配置的独占设备类型、 台数以及分配情况。设备分配表可由 设备类表”和 设备表”两部分组成。(2)设备分配1)当进程申请某类设备时,系统先查 设备类表”2)如果该类设备的现存台数可以满足申请要求,则从该类设备的设备表”始址开始依次查该类设备在设备表中的登记项,找出朱分配”的设备分配给进程。3)分配后要修改设备类表中的现存台数, 把分配给进程的设备标志改为 已 分配”且填上占用设备的进程名。4)然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分
3、配 到的设备上装上存储介质。(3) 设备回收当进程执行结束撤离时应归还所占设备, 系统根据进程名查设备表,找出进 程占用设备的登记栏,把标志修改为 朱分配”清除进程名。同时把回收的设备 台数加到设备类表中的现存台数中。2、程序流程图。1) 申请设备是“进程设备申请成功结束2)删除设备3),释放设备4),添加设备3、程序及注释。Itinclude iostrean*ttinclude stringItinclude uector using nanespace std; tvpedef struct nodestring ID;进程名string equipment;申请的设备名struct n
4、ode *next;PCB;typedef structstring channellD;谪道标识符bool state;通道获态PCB *uSe;正程使用该鯉的进程PCB blockqueue;阻塞队首CHCT;typedef struct _ string controllerlD; 控制器标示 bool state;控制狀态CHCT *Front;通道裘指针PCB *nse;正卷使用该控制器的进程PCB *blockqueue :阻塞队首COCT;typedef structdct;typedeF structchar type;设备类型string equipment ID;设备名DC
5、T *dct;设备的MTSDT;DCT *k=newDCT;键盘的DCTDCT *m=newDCT;/mouseDCT p=newDCT;/printerDCT *t=newDCT;/显示COCT *c1=new COCT; /control COCT *c2=new COCT;COCT *c3=new COCT;CHCT *h1=new CHCT; /channel CHCT *h2=new CHCT;CHCT *tl3=new CHCT;int check(char end)指令控制模块switch(cnd) case c: return 1; case C: return 1; case
6、 d: return 2; case BD-: return 2; case aB: return 3; case A: return 3;case : 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;申请删除添加釋放 freeuoid SDTSDTSDTSDTSDTSDTSDTSDTSDTSDTSDTinit(uector &SDT table)table0 .equipRentIDsaakTa;table0
7、type= B2;鼠标是第二去设备table0.dct=n; 设备的 DCT 表位置table1.equipmentID=-K-; 键盘是第二类设备 table1.type=1B;table1.dct=k;table2 .equipnentID=,Pi,;table2 .type=i3i; table2.dct=p;table3 .equipmentIDV;table3.type=,4B;SDT_table3.dct=t;h1-blockqueue=NULL; h1-channelID=,i 通道 1; h1-state=true; h1-use=NULL;h2-blockqueue=NULL
8、; h2-channelID=-通道 2; h2-state=true; h2-use=NULL;c1-blockqueue=NULL;d-controllerID=i, 制器 4; c1-state=true;c1-Front=h1; d-use=NULL;c2-blockqueue=NULL; c2-controllerID=,i 控制器 2; c2-state=true;c2-Front=h1; c2-use=NULL;c3-blockqueue=NULL; c3-controllerID=i,g 制器 3; c3-state=true;c3-Front=h2; c3-use=NULL;
9、k-blockqueue=NULL; k-equipnentID=i,Ki,;k-state=true;/可用k-type=1*;k-Front=d; k-use=NULL;n-blockqueue=NULL; m-equipmentID=i,M,i;n-5tate=true;n-type=,2,; n-Front=c1; n-use=NULL; p-blockqueue=NULL;p-equipnentID=,fP,B;p-state=true; p-type=3* ; p-Front=c2; p-use=NULL; t-blockqueue=NULL; t-equipmentID=i,T,
10、B;t-state=true; t-type=,4,; t-Front=c3; t-use=NULL;int main()char cmd;DCT *temp_dct;COCT *tenp coct;CHCT *temp_chct;int 1=0; 一string ID;string name;uector SDT_table(4); /设备表 uector DCTtable(4); 设帘 uector C0CT_table(3); 控制器表设备表长度uector:sizetype sizeSDTtable; init(SDT_table); 一 设备表的初始化 DCT u=*k;DCTtab
11、le.pushback(u);u=*m;DCTtable.pushback(u);DCTtable.pushback(u); u=*t;DCT_table.pushback(u); COCT cu=*c1;COCTtable.pushback(cu); cu=*c2;COCTtable.pushback(cu); cu=*c3;uuuitable.pushback(cu);删除设备o Biendl; 添加设备。,endl; 釋放设备o iiendl;coutB,*ht_1415251011 *-;g;J*l,endl; cout-g前设备:K:键癥;M:鼠标(2); p:打E|j|l(3);
12、T血示器(u)-endl; cout-0指今C申请使用设备。,#endl;cout操作:旨今 cout-!gll:i 令 COUt-; cincnd;l=check(cnd);if(l=0)cout指令错误请重新输入。endl; continue;else if(l=1)申请使用设备ID;cout-申请设备的进程名:-endl; cinnane;PCB *head=new PCB;申请PCB的创建和链接head-equipnent=name;head-ID=ID;head-next=NULL;bool find=false;uector:iterator atorO;For(ator0=SDT
13、_table.begin();atorO?=SDT_table.end();atorO*+)equipmentIDssID)dct; if(?temp_dct-state)/设备忙船墨漣熬豔懿态已耦翳龄雜队列。叫阻塞队列已经有内容tenpdct-blockqueue=head; _ elsePCB* t=tenp_dct-blockqueue; while(t)t=t-npxt;tenp_dct-blockqueue=NULL; _else t-next=head;else设备空闲tenp_coct=tenp_dct-front; tempdct-state=False;temp-dct-us
14、e=head;添Q正在占用设备的进程iF(?tenp_coct-state)控制器不可用cout-目前该设备连接的控制器忙,已经把请求加入等待队列.endl;if (?tenp_coct-blockqueue)阻塞的队列为工tpnp_coct-blockqueup=head;else阻塞队列不空blockqueue;while(t)t=t-next;blockqueue=NULL; _elset-next=head;else控制器可用tenp_coct-state=False;控制器置忙tenp_chct=temp_coct-front;tenp_coct-use=head;if (? ten
15、p_chct-state)通道不可用cout-目前该设备连接的通道忙,已经把请求加入等待队列.endl;if (?tenp_chct-blockqueue) 阻塞队列为空 tenp_chct-blockqueue=head;else 阻塞队列不为空PCB* t=temp_coct-blockqueue; while(t)t=t-next;if(tt)blockqueue=NULL; _elset-next=head;else通道可用use=head;tenp_chct-state=False;通道状态置忙该设备已经成功申请,请鎰入下一条垢令 *5(11;else if(l=2)/删除设备uec
16、tor:iterator ator;uector:iterator atorl;cout现在系统拥有的设备如下:柯(11;for(ator=SDT table.begin();ator?=SDT_table.end();ator*+)equipnentIDii ht “请输入想要删除的设备名:“; cinnane;for(ator=SDT_table.begin();ator?=SDT_table.end();ator+)equipnentID=nane) 查找到了该设备dct;COCT *tenp=ator1-Front;ator-dct=NULL;SDT_table.erase(ator)
17、;从设备表中删除ator=SDT table.begin();for(ator=SDT_table.begin();ator?=SDT_table.end();ator*) coutequipmEntIDuse)if(tenp-use-equipnent=nane)该设各正在占用控制器blockqueue)/控制器的等待队列为空state=true; tenp-use=NULL;else控制器的等待队列有内容blockqueue; tenp-blockqueue-next=tt-next; tenp-use=tt;tt-next=NULL;else该设备没有占用控制器blockqueue=NU
18、LL;ator1-blockqueue=NULL;ator1-front=NULL;ator1-use=NULL;uector:iterator ator2; uector 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(atorl):删除该设备break;iF(ator=SDT_table.end() 判断是否查找到设备没有该设备,请重新输入操作指令;else成功删除该设备,请
19、输入下一条操作指令。,endl;else 1F(1=3)添加设备SDT SDT_add;DCT DCadd;int select;coutDCT_add.equipmentID;SDT_add.equipmentID-DCT_add.equipmentID;cout输入设备的类型(单个数字或单个字母):;cinDCT_add .type;SDTadd.type=DCTadd.type; SDadd .dct=&DCadd;DCTadd.blockqueue=NULL; DCTZadd.use=NULL;DCT add.state=true;SDTtable.push_back(SDT_add)
20、;DCT_table.push_back(DCT_add);cou?-是否需宴新増控制器:1 新増2 使用已存在的endl;cinselect;if(select=1) 新增c.controllerID;c.use=NULL;DCT_add.f:ront=cout,#1 .,ih1-channelID t * fi2 .,h2-channelIDendl;cout-链接到哪个通道cinselect;if(select=1)链接到两个不同的通道elsec.Front=h2;cout-连接成功yendXCOCT_table.push back(c);else利用以前的控制器For(uector:i
21、terator ator=COCT_table-begin();ator?=COCT_table.end();ator*+) 输岀现有控制器名称coutcontrollerIDendl:cout-选择的控制器名是(如:控制器1):cinnane;For(ator-COCT_table.begin() ;atorf-COCT_table.end()按名字进行选择controllerID=nane)DCT_add.front=ator;couE链接成功,请输入下一条指令.endl ; break;else if(14)释放设备资源cout-M要释放的设备名:飞cinname; DCT DCT_te
22、np; COCT COCT tenp; CHCT CHCOenp;皙存DCT/蛋存COCT暂存CHCTfor(uector:size_type i=0;ifront;CHCT_tenp=COCT_tenp-Front ;|iF(?DCT_temp-use)如果该设备没有祓使用else设备现在被占用use-ID=nane) 该设备目前占用通道时blockqueue)通道的等待队列无内容state=true;CHCTZtemp-use=NULL;else通道的等待队列不为空use=CHCT_tenp-blockqueue;CHCT_tenp-blockqueue=CHCT_tenp-blockqu
23、eue-next; 一 一 if(COCT_tenp-use-ID=nane)设备占用控制器blockqueue)控制器的等待队列为空COCT_tenp-use=NULL;COCT_tenp-state=true;else控制器等待队列有內容use=COCT_temp-blockqueue;COCT_tenp-blockqueue=COCT_tenp-blockqueue-next;if(?DCT_tenp-blockqueue)设备自身的等待队列state=true;DCT_tenp-use=NULL;break;else该设备目前被其他进程申请(队列不空)use=DCT_tenp-blockqueue;DCT_tenp-blockqueue=DCT_tenp-blockqueue-next; break;if(?COCT_tenp-use)COCT_temp-useDCT_tenp-use;COCT_temps呂e ;ifCCHCT_tenp-use)use=COCT_teiip-UEe;CHCT_teRp-st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新时期高校环艺课程教学改革探究
- 高考数学真题分类第11章算法初步解析
- 2024年常州经济开发区招聘政府雇员笔试真题
- 快递员的工作流程SOP-企业管理
- 智能设备质量体系-洞察及研究
- 声音景观保护-洞察及研究
- 四川省内江市隆昌市隆昌市第三中学2025年七下英语期中联考模拟试题含答案
- 肠穿孔的临床表现及护理讲课件
- 高考记叙文讲课件
- 大肠癌放化疗的护理讲课件
- 求职心理调适专家讲座
- GB/T 6344-2008软质泡沫聚合材料拉伸强度和断裂伸长率的测定
- GB/T 3532-1995日用瓷器
- 学术论文写作规范与技巧课件
- 生物高中-基于大数据分析的精准教学课件
- 工程结算审计实施方案(共8篇)
- 乐东221气田投产专家验收汇报
- 信任五环(用友营销技巧)课件
- 2022年广东省深圳市中考化学真题试卷
- 危险货物道路运输安全生产管理制度
- GB∕T 8110-2020 熔化极气体保护电弧焊用非合金钢及细晶粒钢实心焊丝
评论
0/150
提交评论