还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计报告(2012—2013年度第1学期)名称操作系统原理课程设计B院系科技学院信息工程系班级学号学生姓名指导教师设计周数4成绩日期年月日
3.安全性算法系统所执行的安全性算法可描述如下1设置两个向量
①工作向量Worko它表示系统可提供进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work-Allocation;
②Finish它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:=false;当有足够资源分配给进程时,令Finish[i]:=trueo2从进程集合中找到一个能满足下述条件的进程@Finish[i]:=false
②N eed/=Work如找到,执行步骤3;否则,执行步骤4o3当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行Work:=Work+Allocation;Finish[i]:=true;Go tostep2;4如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态
4.银行家算法之例假设有五个进程{PO,P1,P2,P3,P4}和三种类型的资源{A,B,C},每一种资源的数量分别为
10、
5、7,在T0时刻的资源分配情况如图1所示图11T0时刻的安全性利用安全性算法对T0时刻的资源分配情况进行分析,可得下表所示的T0时刻的安全性分析,从中得知,T0时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的,如图2所示图22P1请求资源P1发出请求向量Request,0,2,系统按银行家算法进行检查lRequestll,0,
2.Needl,2,22Request11,0,2W Available3,3,23系统先假定可为Pl分配资源,并修改Aailable,Allocation1和Needl向量,由此形成的资源变化情况如图1中的圆括号所示4我们再利用安全性检查此时系统是否安全由所进行的安全性检查得知,可以找到一个安全序列{Pl,P3,P4,P2,P0}因此,系统是安全的,可以立即将P1所申请的资源分配给它3P4请求资源P4发出请求向量Request,3,0,系统按银行家算法进行检查lRequest43,3,0W Need44,3,12Request43,3,0Available2,3,0,让P4等待4PO请求资源PO发出请求向量Request00,2,0,系统按银行家算法进行检查1Request0o,2,0〈或二Need07,4,3;5进行安全性检查可用资源Available{2』,0}已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源如果在银行家算法中,把P0发出的请求向量改为Requests,1,0,系统是否能将资源分配给它,请读者考虑
四、实验所需仪器、设备、材料PC机
五、实验思路银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配它是最具有代表性的避免死锁的算法设进程cusneed提出请求REQUEST[i],则银行家算法按如下规则进行判断1如果REQUEST[cusneed][i]=NEED[cusneed][i],则转2;否则,出错2如果REQUEST[cusneed][i]=AVAILABLE[cusneed][i],则转3;否则,出错3系统试探分配资源,,进4系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状程等待安全性检查算法1设置两个工作向量Work=AVAILABLE;FINISH2从进程集合中找到一个满足下述条件的进程,FINISH-false;NEED=Work;如找到,执行3;否则,执行43设进程获得资源,可顺利执行,直至完成,从而释放资源Work+=ALLOCATION;Finish=true;4如所有的进程Finish=true,则表示安全;否则系统不安全
六、实验结果「类资洸原三分配;Jie]:*份配贽icatioi#includeiostreamusing namespacestd;#includestring.h#includestdio.h#define False0#define True1int Max
[100]
[100]={0};〃各进程所需各类资源的最大需求intAvaliable
[100]={0};〃系统可用资源char name
[100]={0};〃资源的名称int Allocation
[100]
[100]={0};〃系统已分配资源int Need
[100]
[100]={0};〃还需要资源int Request
[100]={0};〃请求资源向量int temp
[100]={0};〃存放安全序列int Work
[100]={0};〃存放系统可提供资源int M=100;〃作业的最大数为100int N=100;〃资源的最大数为100void showdata〃显示资源矩阵int i,j;cout”系统目前可用的资源[Available]/,«endl;fori=0;iN;i++coutname[i],z〃;coutendl;for j=0;jN;j++coutAvaliable[j]〈〃〃;〃输出分配资源coutendl;cout/,Max AllocationNeedzzendl;cout〈〃进程名〃;forj=0;j3;j++{fori=0;iN;i++coutname[i]z,〃;cout〃〃;}coutendl;fori=0;iM;i++{cout〈〃〃;forj=0;jN;j++coutMax[i][j],z,z;coutz,〃;forj=0;jN;j++coutAllocation[i][j],zcoutz,〃;forj=0jN;j++coutNeed[i][j]«,z coutendl;int safe〃安全性算法int i,k=0,m,apply,Finish
[100]={0};int j;int flag=0;Work[O]=Avaliable
[0];Work[l]=Avaliable[l];Work
[2]=Avaliable
[2];fori=0;iM;i++{apply=0;forj=0;jN;j++{if Finish[i]==FalseNeed[i][j]=Work[j]{apply++;〃只有apply为n时才能进行分配ifapply=二N{form=0;mN;m++Work[m]=Work[m]+Allocation[i][m];〃变分配数Finish[i]=True;〃把完成的进程标志位1temp[k]=i;〃记录符合条件的是哪一组i二T;k++;flag++;}}fori=0;iM;i++{ifFinish[i]==False{cout〈〃系统不安全〃〈endl;〃不成功系统不安全return-1;}cout〃系统是安全的!〃Gendl;〃如果安全,输出成功cout〃分配的序列”;fori=0;iM;i++{〃输出运行进程数组couttemp[i];ifiM-l cout,,-/,;coutendl;return0;int main〃主函数int i,j,number,m,n,flag;char ming;cout〃请首先输入系统可供资源种类的数量:〃;cinn;N=n;fori=0;in;i++cout〃资源〃《i+l〈〃的名称〃;cinming;name[i]=ming;cout«〃资源的数量:〃;cinnumber;Avaliable[i]=number;coutendl;cout«〃请输入作业的数量:〃;cinm;M=m;cout〃请输入各进程的最大需求量〃/〃*〃《水〈〃矩阵[Max]:,z«endl;fori=0;im;i++forj=0;jn;j++cinMax[i][j];do{flag=O;cout«z,请输入各进程已经申请的资源量〃《水〈〃*〃《水〈〃矩阵[Allocation]:,zendl;fori=0;im;i++forj=0;jn;j++{cinAllocation[i][j];ifAllocation[i][j]Max[i][j]flag=l;Need[i][j]=Max[i][j]-Allocation[i][j];if flagcout〈〃申请的资源大于最大需求量,请重新输入!\n〃;whileflag;showdata;〃显示各种资源safe;〃用银行家算法判定系统是否安全return1;实验主存储器空间的分配和回收3:实验目的
3.1一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收实验要求
3.
21.在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收
2.打印空闲区说明表的初始状态,作业4的申请量以及为作业4分配后的空闲区说明表状态;再依次打印作业3和作业2的归还量以及回收作业3,作业2所占主存后的空闲区说明表实验原理和设计
3.
31.可变分区方式是按作业需要的主存空间大小来分割分区的当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的例如0操作系统5k10k作业114k作业326k空闲区32k作业2128k空闲区其中,起址一一指出一个空闲区的主存起始地址长度一一指出从起始地址开始的一个连续空闲的长度实验结果
3.4其中,起址长度
3.4实验结:附加程序#includeiostreamusing namespacestd;int TABLE
[4]
[2]={{0,512}};//TABLE[][]={起始地址,长度}intWORK
[8]
[3]={{300,1,0},{l00,2,0},{300,1,1},{150,3,0},{30,4,0},{40,5,0},{60,6,0},{30,4,1}};//WORKE口口={作业大小,作业次序/起始地址,操作类型(0申请/I释放)}int i,j,k,flag=l,now,temp
[2],once=0;//now当前作业,temp⑵交换变量,once执行申请变量,i,j,k循环变量void first_01//TABLE功能的实现:申请作业功能|once=0;fori=0;iflag;i++ifonce==0TABLE[i][l]=WORK[now]
[0]TABLE[i]
[0]=TABLE[i]
[0]+WORK[now]
[0];TABLE[i]
[1]=TABLE[i]
[1]-WORK[now]
[0];forj=now;j8;j++ifWORK[j]
[2]==1WORK[now]
[2]==0WORK[j]
[1]==WORK[now]
[1]WORK[j][l]=TABLE[i]|OJ;〃释放作业的起始地址WORK[now][l]=TABLE[i]
[0]-WORK[now]
[0];〃申请作业的起始地址once=1;void first_02//TABLE功能的实现:释放作业功能|j=0;fori=0;iflag;i++ifWORK[now][l]==TABLE[i]
[0]〃初始地址重复TABLE[i]
[0]=TABLE[i]
[0]-WORK[now]
[0];TABLE[i]
[1]=TABLE[i]
[1]+WORK[now]
[0];else j++;ifj=flagflag++;TABLE[flag-l]
[0]=WORK[now]
[1]-WORK[now]
[0];TABLE[flag-l][l]=WORK[now]
[0];void first_03////TABLE功能的实现:输出及整合TABLE fbri=O;ivflag;i++〃判断长度为零时{ifTABLE[i]
[0]==0forj=i+l;jflag;j++TABLE[j]
[0]=TABLE[j-l]
[0];TABLE皿0]=0;TABLE[J]
[1]=TABLE[J-1]
[1];TABLE[j]Ll]=O;fori=0;ivflag;i++〃冒泡算法实现排序forj=i;jflag;j++ifTABLE[i]
[0]TABLE[j]
[0]fork=0;k2;k++temp[k]=TABLE[i][k];TABLE[i][k]=TABLE[j][k];TABLE[j][k]=temp[k];cout”本次TABLE空闲区说明表”号endl;cout«n“起址”““长度“状态endl;fori=0;iflag;i++coutv第栏“VV”n«TABLE[i]
[0]«n n«TABLE[i][l]«H未分酉己vendl;cout«endl;void mainfornow=0;now〈8;now++{ifWORK[now]
[2]=0first_Ol;else ifWORK[now]
[2]=l first_02;first_O3;《操作系统原理课程设计》课程设计B任务书
一、目的与要求
1.理解和掌握操作系统的基本概念、基本组成与工作原理;
2.理解和掌握操作系统中主要功能模块的工作原理及其实现算法;3,掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力
二、主要内容
1.采用某种程序设计语言,设计与开发一个仿真操作系统,要求具备进程调度、存储器管理、文件及设备管理等基本功能,具体内容包括
2.模拟单处理器系统的进程调度,加深对进程的概念及进程调度算法的理解;
3.编写一个多线程程序,加深对现代操作系统中线程的理解;
4.编写和调试一个银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法;
5.用可变分区算法模拟主存的分配和回收,加深对存储器管理的理解,熟悉各种主存分配方法;模拟虚拟存储管理中缺页中断及页面置换算法,加深对虚拟存储器管理的理解,熟悉各种页面淘汰算法;模拟设备的分配与回收,加深对设备管理的理解;模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解;模拟磁盘调度的过程,加深对磁盘存储器管理的理解,熟悉各种磁盘调度算法综合以上实验的结果,并进行集成与设计,开发出一个小型虚拟操作系统对以上课程设计内容,将根据学生的专业与实际情况进行调整,某些题目为选作题目
三、进度计划序号设计(实验)内容完成时间备注1熟悉开发环境及程序设计语言1天2系统的分析、设计2天3调试与集成1天4验收,提交实验报告1天
四、设计(实验)成果要求至少完成主要内容中的3项,统一使用课程设计报告书,文字清楚、工整
五、考核方式实验结果(60%)+实验报告(30%)+实验过程表现(10%)学生姓名指导教师年月日
一、课程设计综合实验的目的与要求1・理解和掌握操作系统的基本概念、基本组成与工作原理;
2.理解和掌握操作系统中主要功能模块的工作原理及其实现算法;
3.掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力
二、设计正文实验单处理器系统的进程调度1:实验目的
1.1在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作实验要求
1.
21.设计一个按时间片轮转法实现处理器调度的程序,每个程序由一个PCB表示
2.程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程实验原理和设号
1.3进程控制块PCB的格式为进程名W要求运行时间已运行时间«指针一一进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址要求运行时间一一假设进程需要运行的单位时间数己运行时间一一假设进程已经运行的单位时间数,初始值为“0”状态一一有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用0表示当一个进程运行结束后,它的状态为“结束”,用1表示1运行处理器调度程序前,输入进程数并且为每个进程设置所需的服务时间;2把各个进程按顺序排成循环队列,用指针指出队列连接情况;3由于是模拟程序,在时间片轮转的前提下,每次使得相应进程执行时间二已执行时间+1;4输出运行细节实验结果
一、实验目的熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意
二、实验要求用高级语言编写和调试一个描述银行家算法的程序设计五个进程{PO,Pl,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源要求程序具有显示和打印各进程的某一O时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据
三、实验原理利用银行家算法避免死锁
1.银行家算法中的数据结构1可利用资源向量Available2最大需求规阵Max3分配矩阵Allocation4需求矩阵Need
2.银行家算法1如果RequestiV或=Need,则转向步骤2;否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值2如果RequestV或=Available,则转向步骤3;否则,表示系统中尚无足够的资源,P1必须等待3系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值Available:=Available-Requesti;Allocation~Allocationi+Request;Needi~Needi-request;4系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
个人认证
优秀文档
获得点赞 0