您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 实验七设备的分配与回收
计算机学院201200824302秦向红操作系统实验报告第1页实验七设备管理之设备的分配与回收一.实验目的掌握设备管理中的设备的添加和删除、设备的分配和回收、同时实现设备独立性。二.实验条件硬件:一台微机软件:操作系统和C语言系统或VC++编译系统。三.实验要求假定模拟系统中有键盘、鼠标、打印机和显示器四个设备,三个控制器和两个通道,采用安全分配方式。(1)设备管理子系统涉及到系统设备表(SDT)、通道控制表(CHCT)、控制器控制表(COCT)和设备控制表(DCT)来体现输入输出系统的四级结构和三级控制。我们模拟这样的数据结构来完成对外围设备的管理。添加设备:增加对应的设备控制表和系统设备表中的表项,如果需要新建对应的控制器控制表。删除设备:删除对应的设备控制表和系统设备表中的表项,如果需要删除对应的控制器控制表。(2)设备的分配和回收,进程申请设备的时候,建立起通路,即获成功;否则//阻塞//到通道、控制器或设备上面。进程回收设备的时候,把阻塞进程唤醒。(3)设备分配必须满足设备的独立性要求。为了实现设备独立性,要求在驱动程序之上设计一层设备无关软件,主要功能可分为:执行所有设备的公有操作,主要包括:(a)独占设备的分配与回收;(b)将逻辑设备名映射为物理设备(LUT),进一步可以找到相应物理设备的驱动程序。向用户层(或文件层)软件提供统一的接口。例如,对各种设备的读操作,在应用程序中都用read;四.实验设计而对各种设备的写操作,则都使用write。#includeiostream.h计算机学院201200824302秦向红操作系统实验报告第2页#includestdio.h#includestdlib.hstructsdt//系统设备表{charname;//设备名称chartype;//设备类型structsdt*next;};structblock//阻塞设备{charpname;//申请设备进程名charename;//设备名structblock*next;};structchct//通道{charname;//通道名称intstate;//通道状态structblock*next;//通道被占用造成的阻塞队列};structcoct//控制器表{charname;//控制器名称intstate;//控制器状态structchct*chct;//设备通道structblock*next;//控制器被占用造成的阻塞队列};structdct//设备控制表{intstate;//设备状态structsdt*sdt;//系统设备structcoct*coct;//设备控制器structblock*next;//设备被占用造成的阻塞队列};sdt*s[20];//设备dct*d[20];//设备控制coct*co[20];//控制器计算机学院201200824302秦向红操作系统实验报告第3页chct*ch1,*ch2;//通道1,通道2block*b;inte=4;//设备数,初始为4intc=3;//控制器数,初始为3voidinit()//初始化{for(inti=0;i4;i++){s=new(sdt);d=new(dct);d-state=0;d-sdt=s;d-next=new(block);d-next-next=NULL;}s[0]-name='k';s[1]-name='m';s[2]-name='t';s[3]-name='p';s[0]-type='i';s[1]-type='i';s[2]-type='o';s[3]-type='o';for(i=1;i4;i++){co=new(coct);co-state=0;co-next=new(block);co-next-next=NULL;}co[1]-name='1';co[2]-name='2';co[3]-name='3';ch1=new(chct);ch2=new(chct);ch1-name='1';计算机学院201200824302秦向红操作系统实验报告第4页ch1-state=0;ch1-next=new(block);ch1-next-next=NULL;ch2-name='2';ch2-state=0;ch2-next=new(block);ch2-next-next=NULL;co[1]-chct=ch1;co[2]-chct=ch2;co[3]-chct=ch2;d[0]-coct=co[1];d[1]-coct=co[1];d[2]-coct=co[2];d[3]-coct=co[3];}voidadd(){chara;charb;cout设备名称:endl;cina;cout设备类型:endl;cinb;for(inti=0;ie;i++)if(d-sdt-name==a)cout设备已存在!endl;if(i==e){s[e]=new(sdt);d[e]=new(dct);s[e]-name=a;s[e]-type=b;d[e]-sdt=s[e];d[e]-state=0;计算机学院201200824302秦向红操作系统实验报告第5页d[e]-next=new(block);d[e]-next-next=NULL;e++;cout是否新建控制器?(y/n)endl;cina;if(a=='y'){charg;intflag=0;cout请输入新增控制器名称:endl;cing;if(flag==0){for(intk=1;k=c;k++)if(co[k]-name==g){flag=1;cout该控制器已存在,请重新输入!endl;cing;}}co[c+1]=new(coct);co[c+1]-name=g;co[c+1]-state=0;co[c+1]-next=new(block);co[c+1]-next-next=NULL;d[e-1]-coct=co[c+1];c++;cout请选择通道(1/2)endl;charf;cinf;if(f=='1')co[c]-chct=ch1;if(f=='2')co[c]-chct=ch2;cout设备添加成功!endl;}计算机学院201200824302秦向红操作系统实验报告第6页elseif(a=='n'){cout当前已存在的控制器有:endl;for(inti=1;i=c;i++)coutco-nameendl;cout输入选择的控制器名称:endl;charcz;cincz;for(intj=1;j=c;j++){if(cz==co[j]-name){cout设备添加成功!endl;d[e-1]-coct=co[j];}}}}}六.实验心得通过本次试验,我进一步了解了操作系统中系统对于设备的管理与控制,系统对于设备的调用与回收顺序的合理性安排有了进一步的了解与认识。通过上网查阅资料,进一步学习到了很多书本上面没有的知识。收获很大!
本文标题:实验七设备的分配与回收
链接地址:https://www.777doc.com/doc-2458065 .html