课程设计题目独占设备的分配与回收.docx
- 文档编号:6527677
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:10
- 大小:21.55KB
课程设计题目独占设备的分配与回收.docx
《课程设计题目独占设备的分配与回收.docx》由会员分享,可在线阅读,更多相关《课程设计题目独占设备的分配与回收.docx(10页珍藏版)》请在冰豆网上搜索。
课程设计题目独占设备的分配与回收
一、课程设计目的和任务
课程设计题目:
独占设备的分配与回收
问题描述:
为了使系统有条不紊地工作,系统在分配设备是,应考虑这样几个因素:
①设备的固有属性;②设备分配算法;③设备分配时的安全性④设备独立性;系统也要通过回收,实现设备的再分配。
要求:
设备分配在计算机系统中,设备、控制器和通道等资源是有限的,并不是每个进程随时都可以得到这些资源。
进程首先要向设备管理程序提出申请,然后由设备管理程序按照一定的分配算法给进程分配必要的资源。
如果进程的申请没有成功,就要在资源的等待队列中排队等待,直到获得所需的资源。
考虑设备的特性和安全性。
设备的特性是设备本身固有的属性,一般分为独占、共享和虚拟设备等。
二、分析与设计
1、设计任务分析:
独占设备的分配与虚拟设备独占设备每次只能分配给一个进程使用,这种使用特性隐含着死锁的必要条件,所以在考虑独占设备的分配时,一定要结合有关防止和避免死锁的安全算法。
2、设计方案论证:
为了提高OS的可适应性和可扩展性,在OS中毫无例外地实现了设备的独立性,即使应用程序独立于具体使用的物理设备。
在实现了设备独立性的功能后,可以带来两方面的好处:
(1)设备分配时的灵活性;
(2)易于实现I/O重定向。
3、详细设计
通过此系统可以实现如下功能:
分配,回收,显示,退出。
选择独占设备,通过执行功能项,输出设备表,实现设备的分配与回收。
4、源代码清单:
#definefalse0
#definetrue1
#definen4
#definem10struct
{
chartype[10];/*设备类名*/intcount;/*拥有设备台数*/
intremain;/*现存的可用设备台数*/
intaddress;/*该类设备在设备表中的起始地址*/
}equiptype[n];/*设备类表定义,假定系统有n个设备类型*/struct
{
intnumber;/*设备绝对号*/intstatus;/*设备好坏状态*/
intremain;/*设备是否已分配*/
charjobname[4];/*占有设备的作业名*/intlnumber;/*设备相对号*/
}equipment[m];/*设备表定义,假定系统有m个设备*/
allocate(J,type,mm)char*J,*type;
intmm;
{
inti,t,j;
/*查询该类设备*/i=0;
while(i =0)i++; if(i>=n)/*没有找到该类设备*/ { printf("无该类设备,设备分配失败");return(false); } if(equiptype[i].remain<1)/*所需设备现存可用台数不足*/ { printf("该类设备不足,分配失败");return(false); } t=equiptype[i].address;/*取出该类设备在设备表中的起始地址*/while(! (equipment[t].status==1&&equipment[t].remain==0)) t++; /*填写作业名、相对号,状态改为已分配*/ equiptype[i].remain--;equipment[t].remain=1; strcpy(equipment[t].jobname,J);equipment[t].lnumber=mm; }/*设备分配函数结束*/ reclaim(J,type)charJ,type; { inti,t,j,k,nn;i=0; while(i =0)i++; if(i>=n)/*没有找到该类设备*/ { printf("无该类设备,设备回收失败");return(false); } t=equiptype[i].address;/*取出该类设备在设备表中的起始地址*/j=equiptype[i].count;/*取出该类设备的数量*/ k=0; nn=t+j;for(;t if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1) { equipment[t].remain=0;k++; } equiptype[i].remain=equiptype[i].remain+k;if(k==0) printf("该作业没有使用该类设备\n"); }/*设备回收函数结束*/ main() { charJ[4];inti,mm,a; chartype[10]; /*设备类表初始化: */ strcpy(equiptype[0].type,"input");/*输入机*/equiptype[0].count=2; equiptype[0].remain=2;equiptype[0].address=0; strcpy(equiptype[1].type,"printer");/*打印机*/equiptype[1].count=3; equiptype[1].remain=3;equiptype[1].address=2; strcpy(equiptype[2].type,"disk");/*磁盘机*/equiptype[2].count=4; equiptype[2].remain=4;equiptype[2].address=5; strcpy(equiptype[3].type,"tape");/*磁带机*/equiptype[3].count=1; equiptype[3].remain=1;equiptype[3].address=9; /*设备表初始化: */for(i=0;i<10;i++) { equipment[i].number=i;equipment[i].status=1;equipment[i].remain=0; } while (1) { printf("\n0-退出,1-分配,2-回收,3-显示");printf("\n选择功能项(0~3): "); scanf("%d",&a);switch(a) { case0: /*a=0程序结束*/exit(0); case1: /*a=1分配设备*/ printf("输入作业名、作业所需设备类和设备相对号");scanf("%s%s%d",J,type,&mm); allocate(J,type,mm);/*分配设备*/break; case2: /*a=2回收设备*/ printf("输入作业名和作业归还的设备类");scanf("%s%s",J,type); reclaim(J,type);/*回收设备*/break; case3: /*a=3输出设备类表和设备表的内容*/printf("\n输出设备类表\n"); printf("设备类型设备总量空闲好设备\n");for(i=0;i printf("%9s%8d%9d\n",equiptype[i].type,equiptype[i].count,equiptype[i].remain); printf("输出设备表: \n"); printf("绝对号好/坏已/未分配占用作业名相对号\n");for(i=0;i printf("%3d%8d%9d%12s%8d\n",equipment[i].number,equipment[i].status,equipment[i].remain,equipment[i].jobname, equipment[i].lnumber); } } } 三、系统实施 运行结果: 该程序模拟独占设备的分配和回收,其中,独占设备分别为input(输入机)、printer(打印机)、disk(磁盘机)、tape(磁带机) 输出设备类表: 设备类型 设备总量 空闲好设备 Input 2 2 Printer 3 3 Disk 4 4 tape 1 1 注: 设备总量为10 输出设备表: 绝对号 好/坏 已/未分配 占用作业名 相对号 0 1 0 0 0 1 1 0 0 0 2 1 0 0 0 3 1 0 0 0 4 1 0 0 0 5 1 0 0 0 6 1 0 0 0 7 1 0 0 0 8 1 0 0 0 9 1 0 0 0 注: ⑴绝对号为设备的标号,根据设备类型的不同与数量,其中,0~1为input,2~4为printer,5~8为disk,9为tape ⑵默认1为设备状态“好”0为该设备未分配 0为默认的作业名 0为设备的相对号 程序运行后可以看到如下要求: 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 此时要求输入相应的功能选项,此处我使用disk(磁盘机)分配和回收做演示: (以下为程序调试结果页面) 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 1 输入作业名,作业所需设备类和设备相对号xyzDisk 2 (注: 设备类只能是程序所提供的四种独占设备,当输入不合法或不存在的设备类后,会提示“无该类设备,设备分配失败”。 输入时使用回车分隔,设备相对号只是一种逻辑上的划分,可以重复,前提是该类独占设备还有空闲资源) 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 3 输出设备类表: 设备类型 设备总量 空闲好设备 Input 2 2 Printer 3 3 Disk 4 0 tape 1 1 输出设备表: 绝对号 好/坏 已/未分配 占用作业名 相对号 0 1 0 0 0 1 1 0 0 0 2 1 0 0 0 3 1 0 0 0 4 1 0 0 0 5 1 1 Ccy 2 6 1 0 Tt 1 7 1 0 Hb 3 8 1 0 Jl 2 9 1 0 0 0 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 1 输入作业名,作业所需设备类和设备相对号xbDisk 2 该类设备不足,分配失败 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 2 输入作业名和作业归还的设备类jlDisk 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 3 输出设备类表: 设备类型 设备总量 空闲好设备 Input 2 2 Printer 3 3 Disk 4 1 tape 1 1 输出设备表: 绝对号 好/坏 已/未分配 占用作业名 相对号 0 1 0 0 0 1 1 0 0 0 2 1 0 0 0 3 1 0 0 0 4 1 0 0 0 5 1 1 Ccy 2 6 1 0 Tt 1 7 1 0 Hb 3 8 1 0 Jl 2 9 1 0 0 0 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 1 输入作业名,作业所需设备类和设备相对号xbDisk 2 0-退出,1-分配,2-回收,3-显示选择功能项(0~3): 3 输出设备类表: 设备类型 设备总量 空闲好设备 Input 2 2 Printer 3 3 Disk 4 0 tape 1 1 输出设备表: 绝对号 好/坏 已/未分配 占用作业名 相对号 0 1 0 0 0 1 1 0 0 0 2 1 0 0 0 3 1 0 0 0 4 1 0 0 0 5 1 1 Ccy 2 6 1 0 Tt 1 7 1 0 Hb 3 8 1 0 Xb 2 9 1 0 0 0 以上的演示实现了disk独占设备的分配,由于设备不足无法分配后,通过设备的回收,再实现设备的分配。 其余的独占设备也类似disk磁盘演示。 四、总结与体会 在本次设计中,要求重点掌握独占设备的分配与回收,这就要求掌握基本的设备分配程序,其中又包括分配设备,分配控制器,分配通道三个步骤,而且只有在设备,控制器,和通道三者都分配成功时,这次的设备分配才算成功。 同时通过对程序分配的改进,使独占设备的分配程序具有更强的灵活性,并提高分配的成功率。 在设计中也碰到多方面地问题,如何进行设备的分配回收这些关键问题都需要重点去解决。 毕竟掌握的知识有限,单凭个人很难完成,但通过小组成员的集体努力,查阅相关资料,相互讨论,所有问题最终都得到解决。 从起初的总体设计,进行可行性分析,再进行分工编程,最后进行调试,基本实现了课程设计所要求的目标。 该设计主要通过C语言进行编写,在运行过程中有些功能可能实现起来会有异常,因此需要在以后的时间更进一步熟练掌握这一语言,努力将其功能实现的更加完美。 五、参考书目 汤子瀛计算机操作系统西安电子科技大学出版社2001王鹏操作系统设计与实现北京电子工业出版社1998
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 题目 独占 设备 分配 回收