收藏 分享(赏)

计算机操作系统课程设计.doc

上传人:精品资料 文档编号:10803358 上传时间:2020-01-10 格式:DOC 页数:43 大小:584.83KB
下载 相关 举报
计算机操作系统课程设计.doc_第1页
第1页 / 共43页
计算机操作系统课程设计.doc_第2页
第2页 / 共43页
计算机操作系统课程设计.doc_第3页
第3页 / 共43页
计算机操作系统课程设计.doc_第4页
第4页 / 共43页
计算机操作系统课程设计.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、景德镇陶瓷学院计算机操作系统课程设计学院:信息工程学院专业:计算机科学与技术班级:13 级二班学号:201310510112姓名:张旸任务一、进程创建、控制与撤消一、实验目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别2、进一步认识并发执行的概念,区别顺序执行和并发执行3、分析进程争用临界资源的现象,学习解决进程互斥的方法二、实验内容:在 WINDOWS 环境下模拟实验:1、编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块 PCB 的内容送到终端显示器上输出2、同时模拟内存空

2、间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出3、按进程的优先级的顺序撤消进程,同时通过终端显示 PCB 的撤消过程和内存的释放过程三、结构框图:四、实验代码:#include #include #include struct jincheng int pid;开始主函数 main ()查看进程viewrun()撤销进程kill()创建进程create()替换进程huanchu()结束退出 exit(0)int youxian;int daxiao;int msg;int live;struct jincheng neicun20,waicun;int shumu=1;c

3、reate()if(shumu=20)printf(“n 内存已满,请先结束或换出进程n“);elseprintf(“n 请创建第%d 个进程“,shumu);printf(“n 请输入新进程的 pidn“); scanf(“%d“,printf(“n 请输入新的进程的优先级n“); scanf(“%d“,printf(“n 请输入新的进程的大小n“);scanf(“%d“,printf(“n 请输入新的进程的消息n“);scanf(“%d“, neicunshumu.live=1; shumu+;return neicunshumu-1.live;void viewrun()int vpid

4、;printf(“n 请输入想显示第几个创建的进程n“);scanf(“%d“,if(vpid0waicun.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;

5、 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

6、 进程优先级不够大“);elseprintf(“所查看运行进程不存在“); printf(“请按回车退出换出进程n“);c=getche();void kill()int kpid;printf(“n 请输入要撤销第几个创建的进程n“);scanf(“%d“,if(kpid0 char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int i

7、nsert=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 /* 插入进程优先数最低,则插入到队

8、尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立进程控制块函数*/ int i,num; printf(“n 请输入进程数量:“); scanf(“%d“, for(i=1;iname); printf(“n 输入进程优先数:“); scanf(“%d“, printf(“n 输入进程运行时间:“); scanf(“%d“, printf(“n“); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用 sort 函数*/ in

9、t 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);

10、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已完成

11、.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) h+; printf(“n 当前运行次数为:%d n“,h); p=ready; rea

12、dy=p-link; p-link=NULL; p-state=R; check(); running(); printf(“n 按任一键继续“); ch=getchar(); printf(“nn 进程已经完成.n“); ch=getchar(); 五:实验结果:任务三、基本存储器管理一、实验目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的

13、主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收二、实验内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况三、结构框图:开始j:=0j:=j+1查看空闲区说明表的第 j 个登记栏状态为“未分配”吗?申请 xk 主存区输出分配情况长度:=长度-xk;起址:=起址+xk;置状态为“空表目”长度xk吗?j 为空闲区说明表的最末一栏吗?结束输出作业不能装入四、实

14、验代码:#include#includestruct 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-

15、size);q=q-next; printf(“-n“);return;void printtab()int i; int flag=0;for (i=0;isize=l)tabn.addr=q-addr;p1=q;if (p1=PL) PL=q-next;else p-next=q-next;free(p1);return;if (q-sizel)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()p

16、rintf(“n 输入进程编号:“); scanf(“%d“,if(tabn.flag=0)printf(“n 不是该进程!“);return;addr=tabn.addr; length=tabn.size;tabn.flag=0;q=PL;if (q=NULL)|(addr+lengthaddr)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+

17、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+lengthaddr)p1=(struct linkk *)malloc(sizeof(struct linkk);p1-si

18、ze=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

19、;printf(“n 输入内存大小:“);scanf(“%d“, PL-size=n;for(int i=0;i#includeusing 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;jchoice;YourChoice(choice);void main()int c

20、hoice,i=1;while(i)coutchoice;if(choice=5)i=0;elseYourChoice(choice);五:实验结果:任务五、死锁的避免一、实验目的:在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace) ,当进程处于这种状态时,若无外力作用,他们都无法在向前推进我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较

21、弱,有可能获得令人满意的系统性能二、实验内容:利用银行家算法来避免死锁的发生三、结构框图:四、实验代码:#include#include#includeusing namespace std;int Sign100;/标记数组int Progress100;/进程执行顺序标记数组string Number100;/进程号class BankerArithmeticpublic:BankerArithmetic(int a,int b); /构造函数int Safe(int grac);/判断是否安全void Show();/显示相关信息void Bank();/计算剩余资源量BankerAri

22、thmetic();/析构函数private:开始计算剩余资源量显示信息show()初始化Init()主函数main()结束已分配资源Allocation判断是否安全Safe程序所需济源NeedBankerArithmetic();void Init(int a,int b);/初始化int ID;/记录成功申请资源的进程号int n; /包含的进程数int m; /资源种类数int *Available;/可提供的资源总数int * Allocation;/以分配的资源int * Need;/仍需要的资源int *Left;/剩余的资源;BankerArithmetic:BankerArit

23、hmetic(int a,int b):n(a),m(b)Init(n,m);BankerArithmetic:BankerArithmetic()int i;deleteAvailable;deleteLeft;for(i=0;iAvailablei;coutNumberi;coutAllocationij;coutNeedij;/计算剩余的资源for(i=0;i=Needij)temp*=1;elsetemp*=0;if(temp=1)break;ID=i;Signi=1;Progressgrac=ID;if(temp)return ID;elsereturn -1;void Banker

24、Arithmetic:Bank()for(int i=0;iprocess;coutsource;BankerArithmetic banker(process,source);while(ians1;if(ans1=y|ans1=Y)banker.Show();result=banker.Safe(i);if(result=0)Progressi=result;elsesum=0;cout “; cout#include void Initbitmap(int map88)int cylinder,track,sector;char choice=Y;printf(“初始化位视图.n“);w

25、hile(choice=y|choice=Y)printf(“柱面号:“);scanf(“%d“,printf(“磁道号:“);scanf(“%d“,printf(“物理记录号:“);scanf(“%d“,mapcylinder4*track+sector=1;printf(“contiune?“);getchar();scanf(“%c“,void allocate(int map88)int i,j;int flag=0;int cylinder,track,sector;for(i=0;i8;i+) for(j=0;j8;j+)if(mapij=0) mapij=1;flag=1;break;if(flag=1) break;if(flag=1)cylinder=i;track=j/4;sector=j%4;printf(“分配到的柱面号、磁道号、物理记录数“);printf(“%dt%dt%d“,cylinder,track,sector);printf(“n“);else printf(“空间不足,分配失败!“);void reclaim(int map88)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报