版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计操作系统课程设计操作系统课程设计资料仅供参考文件编号:2022年4月操作系统课程设计版本号:A修改号:1页次:1.0审核:批准:发布日期:任务一、进程创建、控制与撤消目的:通过进程的创建和控制的设计来达到如下目的:加深对进程概念的理解,明确进程和程序的区别;进一步认识并发执行的概念,区别顺序执行和并发执行;分析进程争用临界资源的现象,学习解决进程互斥的方法;内容:在WINDOWS环境下模拟实验:编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程程序流程图:源代码如下:#include<iostream>;usingnamespacestd;structPCB{ intpid; intpriority; intsize; intdetail; intisrun;};PCBrunning[20],ready[20];intsum=0,pid_1;voidchoose();voidmenu();intcreate(){ if(sum>=20) { cout<<"内存已满,请先结束或换出进程"<<endl; } else { cout<<"请输入第"<<sum+1<<"个进程"<<endl; cout<<"请输入进程的pid"<<endl;cin>>running[sum+1].pid; cout<<"请输入新的进程的优先级"<<endl; cin>>running[sum+1].priority; cout<<"请输入新的进程的大小"<<endl; cin>>running[sum+1].size; cout<<"请输入新的进程的详情"<<endl; cin>>running[sum+1].detail; running[sum+1].isrun=1;sum++; } returnrunning[sum-1].isrun; choose();}voiddisplay(){ intpid; cout<<"请输入进程的pid"<<endl; cin>>pid; if(pid>0&&pid<=20&&running[pid].isrun==1) { cout<<"进程的pid是:"<<running[pid].pid<<endl; cout<<"进程的优先级是:"<<running[pid].priority<<endl; cout<<"进程的大小是:"<<running[pid].size<<endl; cout<<"进程的相关信息:"<<running[pid].detail<<endl; } else { cout<<"所查看运行进程不存在"<<endl; } choose();}voidreplace(){ intpid1,pid2; cout<<"请输入第一个替换进程的pid"<<endl; cin>>pid1; cout<<"请输入第二个替换进程的pid"<<endl; cin>>pid2; if(pid1>0&&pid1<=20&&running[pid1].isrun==1) { if(running[pid1].priority>running[pid2].priority) { ready[20].pid=running[pid1].pid; ready[20].priority=running[pid1].priority; ready[20].size=running[pid1].size; ready[20].detail=running[pid1].detail; running[pid1].pid=running[pid2].pid; running[pid1].priority=running[pid2].priority; running[pid1].size=running[pid2].size; running[pid1].detail=running[pid2].detail; running[pid2].pid=ready[20].pid; running[pid2].priority=ready[20].priority; running[pid2].size=ready[20].size; running[pid2].detail=ready[20].detail; cout<<"替换完成"<<endl; cout<<"被替换进程的pid是:"<<ready[20].pid<<endl; cout<<"被替换进程的优先级是:",ready[20].priority; cout<<"被替换进程的大小是:"<<ready[20].size<<endl; cout<<"被替换进程的详情是:"<<ready[20].detail<<endl; } else { cout<<"进程优先级不够大"<<endl; } } else {cout<<"所查看运行进程不存在"<<endl; } choose();}voidkill(){ intkpid; cout<<"请输入进程的pid:"; cin>>kpid; if(kpid>0&&kpid<20&&running[kpid].isrun==1) { running[kpid].isrun=0; } choose();}voidchoose(){ intchoose; cout<<"是否继续操作继续,请输入1,退出:按任意键"<<endl; cout<<"请输入你的选择:"; cin>>choose; if(choose=1){ menu(); } else{ exit(0); }}voidmenu(){ intn,i; n=1; while(n==1) { system("cls"); cout<<"进程模拟"<<endl; cout<<"1.创建进程2.查看进程信息"<<endl; cout<<"3.撤销进程4.终止进程"<<endl; cout<<"5.退出"<<endl; cout<<"请输入你的选择:"; cin>>i; switch(i) { case1:create();break; case2:display();break; case3:replace();break; case4:kill();break; case5:exit(0); default:n=0; } }}intmain(){ menu(); return0;}运行结果如下:任务三、基本存储器管理目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。程序流程图:源代码如下:#include<>#include<iostream>#definen10ize>=xk&&frees[i].flag==1)if(k==-1||frees[i].size<frees[k].size)k=i;if(k==-1){cout<<"无可用空闲区"<<endl;return;}if(frees[k].size-xk<=minisize){frees[k].flag=0;ad=frees[k].addr;xk=frees[k].size;}else{frees[k].size=frees[k].size-xk;ad=frees[k].addr+frees[k].size;}i=0;while(useed[i].flag!=0&&i<n)i++;if(i>=n){cout<<"error,未初始化"<<endl;if(frees[k].flag==0)frees[k].flag=1;else{frees[k].size=frees[k].size+xk;return;}}else{useed[i].addr=ad;useed[i].size=xk;useed[i].flag=a;}return;}voidfindc(charx){inti,k,a,s,t;floatS,L;s=0;while((useed[s].flag!=x||useed[s].flag==0)&&s<n)s++;if(s>=n){cout<<"没有找到该作业"<<endl;return;}useed[s].flag=0;S=useed[s].addr;L=useed[s].size;a=-1;k=-1;i=0;while(i<maxsize&&(a==-1||k==-1)){if(frees[i].flag==1){if(frees[i].addr+frees[i].size==S)k=i;if(frees[i].addr==S+L)a=i;}i++;}if(k!=-1)if(a!=-1){frees[k].size=frees[a].size+frees[k].size+L;frees[a].flag=0;}elsefrees[k].size=frees[k].size+L;elseif(a!=-1){frees[a].addr=S;frees[a].size=frees[a].size+L;}else{t=0;while(frees[t].flag==1&&t<maxsize)t++;if(t>=maxsize){cout<<"内存空闲表没有空间,回收空间失败"<<endl;useed[s].flag=a;return;}frees[t].addr=S;frees[t].size=L;frees[t].flag=1;}return;}intmain(){inti,a;floatxk;frees[0].addr=10240;frees[0].size=10240;frees[0].flag=1;for(i=1;i<maxsize;i++)frees[i].flag=0;for(i=0;i<n;i++)useed[i].flag=0;while(1){cout<<"选择操作:"<<endl<<"0-退出"<<endl<<"1-分配内存"<<endl<<"2-回收已分配内存"<<endl<<"3-显示内存信息"<<endl;cout<<"请输入你的选择:";cin>>a;switch(a){case0:exit(0);case1:cout<<"输入作业名:"; cin>>a; cout<<"请输入作业大小:"; cin>>xk;allo(a,xk);break;case2:cout<<"输入要回收分区的作业名";cin>>a;findc(a);break;case3:cout<<"输出空闲分区:"<<endl<<"起始地址分区长度标志"<<endl;for(i=0;i<maxsize;i++)cout<<frees[i].addr<<""<<frees[i].size<<""<<frees[i].flag<<endl;cout<<"按任意键,输出已分配信息"<<endl;getch();cout<<"查看已分配分区:"<<endl<<"起始地址分区长度标志"<<endl;for(i=0;i<n;i++)if(useed[i].flag!=0)cout<<useed[i].addr<<""<<useed[i].size<<""<<useed[i].flag<<endl;elsecout<<useed[i].addr<<""<<useed[i].size<<""<<useed[i].flag<<endl;break;default:cout<<"输入有误!!!!"<<endl;}}return1;}任务五、死锁的避免一、目的在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。二、内容利用银行家算法来避免死锁的发生#include<iostream>#include<iomanip>#definemax_s20#definemax_p100intavailable[max_s];intmax[max_p][max_s];intallocation[max_p][max_s];intneed[max_p][max_s];intrequest[max_s];intrequestPID;intsource;intprocess;usingnamespacestd;3456345630871332开始把A[s]块内容复制到专用块A[0]:=A[s]i:=MA[0]把专用块内容自制到主存MA:=A[0]MA[0]≤1MA[0]=1MA[1]=0S:=MA[i]空闲块数减1MA[0]:=MA[0]-1显示分配的块号sS:=MA[i]显示:系统无空闲块结束开始J:=归还块号MA[0]=3i:=MA[0]MA[i]:=jMA[0]:=MA[0]+1MA[j]:=MAMA[0]:=1MA[1]:=j结束 while(select=='y'||select=='Y') { cout<<"请输入柱面号:"; cin>>cyd; cout<<"请输入磁道号:"; cin>>tra; cout<<"请输入物理地址号:"; cin>>sor; disk[cyd][4*tra+sor]=1; cout<<"是否继续Y|N"<<endl; cout<<"请输入你的选择:"; getchar(); cin>>select; }}voidloca(intdisk[8][8]){ inti,j; intflag=0; intcyd,tra,sor; for(i=0;i<8;i++) { for(j=0;j<8;j++)if(disk[i][j]==0){disk[i][j]=1;flag=1;break;}if(flag==1)break; } if(flag==1) { cyd=i;tra=j/4; sor=j%4; cout<<"分配到的柱面号、磁道号、物理地址分别如下:"<<endl; cout<<cyd<<tra<<sor; cout<<""<<endl; } elsecout<<"分配失败,请检查剩余空间"<<endl;}voidreclaim(intdisk[8][8]){ intcyd,tra,sor;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026文化重要性面试题及答案
- 2026物价管理面试题及答案
- 2026销售店长面试题目及答案
- 电子信息产品经销合同发展与协调(范本)
- 防水工程施工合同(范本)
- 农产品收购合同模板 种植户与收购商专用范本
- 2026年AI客服训练师:用户期望管理的AI话术训练
- 2026年城市安防风险预警模型构建实践
- 牙周病学题库及答案3
- 经济学基础期末试卷及参考答案2套8
- 中国制造业AI场景落地之FDE路径研究白皮书2026
- 2026年甘肃庆阳宁县直事业单位选聘24人笔试参考题库及答案详解
- 四川能投发展股份有限公司所属公司2026年员工公开招聘笔试备考试题及答案详解
- 广西玉林兴业县2026年警务辅助人员招聘考试试卷-含答案解析
- 放射科造影剂过敏演练脚本
- 2026年江苏职业卫生技术服务专业技术人员考试(放射卫生检测与评价)模拟题及答案
- 2026-2030中国工程爆破行业十四五发展分析及投资前景与战略规划研究报告
- 街区门楼改造方案范本
- 2026年中国邮政四川省分公司笔试题及答案
- 绿化工程监理实施细则
- 德语生物化学词汇表
评论
0/150
提交评论