欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机操作系统课程设计(共43页).docx

    • 资源ID:15011492       资源大小:467.87KB        全文页数:43页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机操作系统课程设计(共43页).docx

    精选优质文档-倾情为你奉上景德镇陶瓷学院计算机操作系统课程设计学院:信息工程学院专业:计算机科学与技术班级:13级二班学号:2姓名:张旸任务一、进程创建、控制与撤消一、实验目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别2、进一步认识并发执行的概念,区别顺序执行和并发执行3、分析进程争用临界资源的现象,学习解决进程互斥的方法二、实验内容:在WINDOWS环境下模拟实验:1、编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出2、同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出3、按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程三、结构框图:开始主函数main ()查看进程viewrun()撤销进程kill()创建进程create()替换进程huanchu()结束退出exit(0)四、实验代码:#include <conio.h>#include <stdio.h>#include <stdlib.h>struct jincheng int pid;int youxian;int daxiao;int msg;int live;struct jincheng neicun20,waicun;int shumu=1;create()if(shumu>=20)printf("n 内存已满,请先结束或换出进程n");elseprintf("n 请创建第%d个进程",shumu);printf("n 请输入新进程的 pidn"); scanf("%d",&neicunshumu.pid);printf("n 请输入新的进程的优先级n"); scanf("%d",&neicunshumu.youxian);printf("n 请输入新的进程的大小n"); scanf("%d",&neicunshumu.daxiao);printf("n 请输入新的进程的消息n");scanf("%d",&neicunshumu.msg); neicunshumu.live=1; shumu+;return neicunshumu-1.live;void viewrun()int vpid;printf("n 请输入想显示第几个创建的进程n"); scanf("%d",&vpid);if(vpid>0&&vpid<=20&&neicunvpid.live=1)printf("n进程的pid是:%dn",neicunvpid.pid);printf("n进程的优先级是:%dn",neicunvpid.youxian);printf("n进程的大小是:%dn",neicunvpid.daxiao);printf("n进程的消息是:%dn",neicunvpid.msg);else printf("n 所查看运行进程不存在n");printf("请按回车退出查看n");vpid=getch(); void huanchu() int pid1,pid2; char c; printf("n 请输入第一个替换进程是第几个创建的n"); scanf("%d",&pid1); printf("n 请输入第二个替换进程是第几个创建的n"); scanf("%d",&pid2); if(pid1>0&&pid1<=20&&neicunpid1.live=1) if(neicunpid1.youxian>neicunpid2.youxian) waicun.pid=neicunpid1.pid;waicun.youxian=neicunpid1.youxian;waicun.daxiao=neicunpid1.daxiao;waicun.msg=neicunpid1.msg;neicunpid1.pid=neicunpid2.pid;neicunpid1.youxian=neicunpid2.youxian;neicunpid1.daxiao=neicunpid2.daxiao;neicunpid1.msg=neicunpid2.msg;neicunpid2.pid=waicun.pid; neicunpid2.youxian=waicun.youxian; neicunpid2.daxiao=waicun.daxiao; neicunpid2.msg=waicun.msg;printf("n 替换完成n");printf("n 被替换进程的pid是:%dn",waicun.pid);printf("n 被替换进程的youxian是:%dn",waicun.youxian);printf("n 被替换进程的daxiao是:%dn",waicun.daxiao);printf("n 被替换进程的msg是:%dn",waicun.msg);elseprintf("n进程优先级不够大");elseprintf("所查看运行进程不存在"); printf("请按回车退出换出进程n");c=getche();void kill()int kpid; printf("n 请输入要撤销第几个创建的进程n"); scanf("%d",&kpid);if(kpid>0&&kpid<20&&neicunkpid.live=1)neicunkpid.live=0;printf("n 已撤销第%d个创建的进程",kpid);else printf("n 所查看运行进程不存在n");printf("请按回车退出查看n");kpid=getch();void main ()int n,m,i;char a;n=1;while(n=1)system("cls");printf("n*"); printf("n* 进程演示系统 *");printf("n*");printf("n 1.创建新的进程 2.查看运行进程 ");printf("n 3.换出某个进程 4.杀死运行进程 "); printf("n 5.退出 "); printf("n*");printf("n请选择(15)"); a=getch();switch(a) case'1':create();break;case'2':viewrun();break;case'3':huanchu();break;case'4':kill();break;case'5':exit(0);default:n=0; 五:实验结果:任务二、单处理机系统的进程调度一、实验目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度二、实验内容:从下面四个调度算法中,选择一个调度算法来实现进程调度:1、先来先服务调度算法2、优先数调度算法3、时间片轮法调度算法4、多级反馈队列轮转调度算法三、结构框图:While循环遍历就绪队列调用check()函数,打印所有队列将就绪队列中的首进程由“就绪状态”转为执行状态调用running()函数调用destroy()函数,释放进程调用input()函数;用户输入测试数据输入的同时建立好就绪序列初始化运行时间是否等于服务开始结束四、实验代码:#include "stdio.h" #include <stdlib.h> #include <conio.h> #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p->super)>(ready->super) /*优先级最大者,插入队首*/ p->link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first->link; while(second!=NULL) if(p->super)>(second->super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first->link; second=second->link; if(insert=0) first->link=p; void input() /* 建立进程控制块函数*/ int i,num; printf("n请输入进程数量:"); scanf("%d",&num); for(i=1;i<=num;i+) printf("n 进程号No.%d:n",i); p=getpch(PCB); printf("n 输入进程名:"); scanf("%s",p->name); printf("n 输入进程优先数:"); scanf("%d",&p->super); printf("n 输入进程运行时间:"); scanf("%d",&p->ntime); printf("n"); p->rtime=0;p->state='w' p->link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr->link; return(l); void show()printf("nqnametstatetsupertndtimetruntimen"); void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(" %st",pr->name); printf(" %ct",pr->state); printf(" %dt",pr->super); printf(" %dt",pr->ntime); printf(" %dt",pr->rtime); printf("n"); void check() /* 建立进程查看函数 */ PCB* pr; printf("n*当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/ show();disp(p); pr=ready; if(pr=NULL)printf("n*当前就绪队列为空!");else printf("n*当前就绪队列状态为:"); /*显示就绪队列状态*/show();while(pr!=NULL) disp(pr); pr=pr->link; void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf("n 进程%s已完成.n",p->name); free(p); void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p->rtime)+; if(p->rtime=p->ntime) destroy(); /* 调用destroy函数*/ else (p->super)-; p->state='w' sort(); /*调用sort函数*/ void main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&&(ready!=NULL) ch=getchar(); h+; printf("n 当前运行次数为:%d n",h); p=ready; ready=p->link; p->link=NULL; p->state='R' check(); running(); printf("n 按任一键继续."); ch=getchar(); printf("nn 进程已经完成.n"); ch=getchar(); 五:实验结果:任务三、基本存储器管理一、实验目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收二、实验内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况开始j:=0j:=j+1查看空闲区说明表的第j个登记栏状态为“未分配”吗?申请xk主存区输出分配情况长度:=长度-xk;起址:=起址+xk;置状态为“空表目”长度xk吗?j为空闲区说明表的最末一栏吗?结束输出作业不能装入三、结构框图:四、实验代码:#include<stdio.h>#include<stdlib.h>struct linkkint size;int addr;struct linkk *next;struct jobtabint jno;int size;int addr;int flag;struct linkk *PL,*p,*q,*p1;struct jobtab tab20;int l,m,n,t,addr,length;void printlink()if (PL!=NULL)printf("n 进程内存大小 剩余内存n");printf("-n");q=PL;while(q!=NULL)printf(" %d %dn",q->addr,q->size);q=q->next; printf("-n");return;void printtab()int i; int flag=0;for (i=0;i<20&&flag=0;i+)if (tabi.flag=1)flag=1;if (flag=0)printf("n 无进程!");return;printf("n 进程编号 进程起始地址 进程内存大小n");printf("-n");for (i=0;i<20;i+)if (tabi.flag=1)printf(" %d %d %dn",i,tabi.addr,tabi.size);printf("-n");return;void allocm()printf("n 输入进程编号:");scanf("%d",&n);printf("n 输入进程内存大小:");scanf("%d",&l);if (tabn.flag=1)printf("n 该进程被创建!n");return;elsetabn.flag=1;tabn.size=l;q=PL; p=PL;while (q!=NULL)if (q->size=l)tabn.addr=q->addr;p1=q;if (p1=PL) PL=q->next;else p->next=q->next;free(p1);return;if (q->size>l)tabn.addr=q->addr;q->size=q->size-l; q->addr=q->addr+l;return;p=q; q=q->next;tabn.flag=0;printf("n 没有内存剩余!n");return;void freem()printf("n 输入进程编号:"); scanf("%d",&n); if(tabn.flag=0)printf("n 不是该进程!"); return; addr=tabn.addr; length=tabn.size; tabn.flag=0; q=PL;if (q=NULL)|(addr+length<q->addr)p1=(struct linkk *)malloc(sizeof(struct linkk); p1->size=length; p1->addr=addr; p1->next=q; PL=p1;return;if(addr+length=q->addr)q->addr=addr; q->size=q->size+length; return;p=q; q=q->next;while (q!=NULL)if(p->addr+p->size=addr)p->size=p->size+length;if (addr+length=q->addr)p->size=p->size+q->size;p1=q; p->next=q->next;free(p1);return;if(addr+length=q->addr)q->addr=addr; q->size=q->size+length; return; if(addr+length<q->addr)p1=(struct linkk *)malloc(sizeof(struct linkk); p1->size=length; p1->addr=addr; p1->next=q; p->next=p1; return;p=q; q=q->next; if(p->addr+p->size=addr)p->size=p->size+length; return; p1=(struct linkk *)malloc(sizeof(struct linkk); p1->addr=addr; p1->size=length; p1->next=NULL; p1->next=p1; return; main()PL=(struct linkk *)malloc(sizeof(struct linkk); PL->addr=0; PL->next=NULL; printf("n输入内存大小:"); scanf("%d",&n); PL->size=n; for(int i=0;i<20;i+)tabi.jno=i; tabi.flag=0; t=0; doprintf("n-n"); printf(" 1-分配内存 2-释放内存n"); printf(" 3-链接进程号 4-输出_TAB n"); printf(" 5-Quitn"); printf("n-n"); printf(" Select bb"); scanf("%d",&m); switch(m)case 1: allocm();break;case 2: freem();break;case 3: printlink();break;case 4: printtab();break;case 5: t=1;while (!t);五:实验结果:任务四、请求分页存储管理(虚拟存储)一、实验目的:通过请求分页存储管理的设计,让学生了解虚拟存储器的概念和实现方法。进行运行时不需要将所有的页面都调入内存,只需将部分调入内存,即可运行,在运行的过程中若要访问的页面不在内存时,则需求有请求调入的功能将其调入。假如此时若内存没有空白物理块,则通过页面置换的功能将一个老的不用的页面淘汰出来,其中淘汰的算法有多种二、实验内容:模拟仿真请求分页调度算法,其中淘汰的算法可选下列其一1、先进先出算法2、最近最久算法3、CLOCK算法三、结构框图:结束开始主函数main()初始化页框Init()LRU算法LRU()FIFO算法FIFO()输出OutPut()四、实验代码:#include<iostream>#include<time.h>using namespace std;const int MaxNum=320;const int M=5;int PageOrderMaxNum;int SimulateMaxNumM;int PageCountM,LackNum;float PageRate;int PageCount132;bool IsExit(int i)bool f=false;for(int j=0;j<M;j+)if(Simulatei-1j=PageOrderi)f=true;return f;int IsExitLRU(int i)int f=-1;for(int j=0;j<M;j+)if(Simulatei-1j=PageOrderi)f=j;return f;int Compare() int p,q;p=PageCount0;q=0;for(int i=1;i<M;i+)if(p<PageCounti)p=PageCounti;q=i;return q;void Init() for(int k=0;k<MaxNum;k+)int n=rand()%320;PageOrderk=n/10;for(int i=0;i<MaxNum;i+)for(int j=0;j<M;j+)Simulateij=-1;for(int q=0;q<M;q+)PageCountq=0;void OutPut()int i,j;cout<<"页面访问序列:"<<endl;for(j=0;j<MaxNum;j+)cout<<PageOrderj<<" "cout<<endl;cout<<"页面访问过程(只显示前10个):"<<endl;for(i=0;i<10;i+)for(j=0;j<M;j+)if(Simulateij=-1)cout<<" "elsecout<<Simulateij<<" "cout<<endl;cout<<"缺页数= "<<LackNum<<endl;cout<<"命中率= "<<PageRate<<endl;cout<<"-"<<endl; void FIFO()int j,x=0,y=0;LackNum=0,Init();for(j=0;j<M;j+)for(int k=0;k<=j;k+)if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k; ;for(x=M;x<MaxNum;x+)for(int t=0;t<M;t+)Simulatext=Simulatex-1t;if(!IsExit(x)LackNum+;Simulatexy%M=PageOrderx;y+;PageRate=1-(float)LackNum/(float)MaxNum);OutPut();void LRU()int j,x=0,y=0;LackNum=0,Init();for(j=0;j<M;j+)for(int k=0;k<=j;k+)PageCountk+;if(j=k)Simulatejk=PageOrderj;elseSimulatejk=Simulatej-1k; LackNum+;for(x=M;x<MaxNum;x+)for(int t=0;t<M;t+)Simulatext=Simulatex-1t;int p=IsExitLRU(x);if(p=-1)int k;k=Compare();for(int w=0;w<M;w+)if(w!=k)PageCountw+;elsePageCountk=1;Simulatexk=PageOrderx;LackNum+;elsefor(int w=0;w<M;w+)if(w!=p)PageCountw+;elsePageCountp=1;PageRate=1-(float)LackNum/(float)MaxNum);OutPut();void YourChoice(int choice)switch(choice)case 1:cout<<"-"<<endl; cout<<"FIFO算法结果如下:"<<endl;FIFO();break;case 2:cout<<"-"<<endl; cout<<"LRU算法结果如下:"<<endl;LRU();break;case 5:break;default:cout<<"重新选择算法:1-FIFO 2-LRU 5-退出 "<<endl; cin>>choice;YourChoice(choice);void main()int choice,i=1;while(i)cout<<"请选择算法:1-FIFO 2-LRU 5-退出 "<<endl; cin>>choice;if(choice=5)i=0;elseYourChoice(choice);五:实验结果:任务五、死锁的避免一、实验目的:在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能二、实验内容:利用银行家算法来避免死锁的发生开始计算剩余资源量显示信息show()初始化Init()主函数main()结束已分配资源Allocation判断是否安全Safe程序所需济源Need三、结构框图:四、实验代码:#include<iostream>#include<cstdlib>#include<string>using namespace std;int Sign100;/标记数组int Progress100;/进程执行顺序标记数组string Number100;/进程号class BankerArithmeticpublic:BankerArithmetic(int a,int b); /构造函数int Safe(int grac);/判断是否安全void Show();/显示相关信息void Bank();/计算剩余资源量BankerArithmetic();/析构函数private:BankerArithmetic();void Init(int a,int b);/初始化int ID;/记录成功申请资源的进程号int n; /包含的进程数int m; /资源种类数int *Available;/可提供的资源总数int * Allocation;/以分配的资源int * Need;/仍需要的资源int *Left;/剩余的资源;BankerArithmetic:BankerArithmetic(int a,int b):n(a),m(b)Init(n,m);BankerArithmetic:Bank

    注意事项

    本文(计算机操作系统课程设计(共43页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开