资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
一、 实验项目名称 进程管理模拟系统二、 实验内容设计一个允许n个进程并发运行的进程管理的模拟系统。该系统包括简单的进程控制(创建、阻塞、唤醒、调度)、同步及通信机构。分析系统所需的数据结构、算法的流程以及化分各个功能模块。并且能够编写相应的程序代码,对其进行测试,分析结果是否正确。三、 实验要求要求学生熟悉进程概念及进程管理的各部分内容。要求学生明确进程管理中需要的数据结构、控制机构的基本原理。将分析程序结果写入“实验结果与分析”中,其中包括:程序的模块功能、程序的流程。将对进程管理的实现与概念的联系与体验写入“实验体会与评价”中。四、 实验原理 进程管理包括进程的控制、阻塞、唤醒与撤消。进程在运行过程中状态在不断的变化。进程运行过程中,因为竞争资源而需对它们进行同步控制。所有这些在操作系统中用数据结构PCB来记录,系统通过PCB控制进程的运行。在单处理机系统中,多道程序的引入,需要进程的调度程序来选择一个进程进行运行。比如常用的先来先服务、短进程 优和优先级优先等等,也可以选择它们的结合调度算法。例子:支持多个进程并发运行的简单进程管理模拟系统。问题描述:本系统的同步机构采用的信号量上的P、V操作的机制;控制机构包括阻塞和唤醒操作;时间片中断处理程序处理模拟的时间片中断;进程调度程序负责为各进程分配处理机。系统中设计了3个并发进程它们之间有如下同步关系:3个进程需要互斥使用临界资源s2,进程1和进程2又需互斥使用临界资源s1。本系统在运行过程中随机打印出各进程的状态变换过程,系统的调度过程及公共交量的变化情况。算法:系统为进程设置了5种运行状态:e执行态;r高就绪态;t低就绪态(执行进程因时间片到限而转入):w等待态;c完成态。各进程的初始状态均设置为r。系统分时执行各进程。通过产生随机数x来模拟时间片(每一个时间片并不相同)。当进程processl访问随机数x时,若x033;当进程proccss2访问x时,若x0.33或x0.66;当进程process3访问x时,若x0.66,则分别认为各进程的执行时间片到限,产生“时间片中断”面转入低就绪态t。进程调度算法采用剥夺式最高优先数法。各进程的优先数通过键盘输入予以静态设置。调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。先从r状态进程中选择,再从t状态进程中选择。当现行进程唤醒某个等待进程,且被唤醒进程的比先数小于现行进程时,则剥夺现行进程的执行权。各进程在使用临界资源s1和s2时,通过调用信号量sem1和sem2上的P、V操作来实现同步。阻塞和唤醒操作负责完成从进程的执行态到等待态以及从就绪态的转变。系统启动后,在完成必要的系统初始化后便执行进程调度程序。当执行因“时间片中断”,或者被排斥使用临界资源,或唤醒某个等待进程时,立即进行进程调度。当3个进程都处于完成状态后,系统退出运行。数据结构:每个进程一个PCB,内容:id进程标识status 进程状态priority进程优先数nextwr等待队链指针,指示在同一信号量上等待的下一个进程的标识。信号量。对应于临界资源s1和s2分别有sem1和sem2,均为互斥号量,内容包括:value信号量值,初值为1firstwr等待链指针,指示在该信号量上第一个等待进程的标识数。保留区。用数组saveaera34表示。即每个进程都有一个大小为4个单元的保留区,用来保存被“中断”时的现场信息,如通用寄存器的内容和断点地址等。全程变量。exe执行进程指针,其值为进程标识数i用来模拟一个通用寄存器。五、 实验流程 实验流程图如下页所示: 判断是否使用临界资源选择优先数最小的就绪进程执行系统的初始化判断是否有时间片中断将该进程的状态改为t进行进程调度判断是否有进程被唤醒结束否否六、本次实验源程序#include #include #include #include#define TRUE 1#define FALSE 0#define MAXPRI 100#define NIL -1struct int id; char status; int nextwr; /*等待链指针,指示在同一信号量上等待的下一个进行进程的标识符* int priority; pcb3;struct int value; int firstwr; /*等待链首指针,指示该信号量上第一个等待进程的标识数*/ sem2;char savearea34,addr;int i,s1=0,s2=0,seed,exe=NIL;void init( ) int j; for(j=0;j3;j+) pcbj.id=j; pcbj.status=r; pcbj.nextwr=NIL; coutnprocess j+1i; pcbj.priority=i; sem0.value=1; sem0.firstwr=NIL; sem1.value=1; sem1.firstwr=NIL; for(i=0;i3;i+) for(j=0;j4;j+) saveareaij=0; double random()double m;srand(time(0);m=(1+rand()%3)%3-0.1;coutrandom m=mn; getchar();return(m);timeint(char ad) /*time slice interupt*/ double x; x=random(); if(x0.33)&(exe=0)return(FALSE); if(x0.66)&(exe=1)return(FALSE); if(x1.0)&(exe=2)return(FALSE);saveareaexe0=i;saveareaexe1=ad;pcbexe.status=t;coutThis times slice interrupt process exe+1 enter into readyn;exe=NIL;return(TRUE);find( ) int j,pd=NIL,w=MAXPRI; for(j=0;j3;j+) if(pcbj.status=r) if(pcbj.priorityw) w=pcbj.priority; pd=j; if (pd=NIL) for(j=0;j3;j+) if(pcbj.status=t) if(pcbj.priorityw) w=pcbj.priority; pd=j; return(pd); scheduler( ) int pd; if(pd=find()=NIL&exe=NIL) return(NIL); /*quit system*/ if(pd!=NIL) if(exe=NIL) pcbpd.status=e; exe=pd;coutproccess exe+1 is executingn; else if(pcbpd.prioritypcbexe.priority) pcbexe.status=r;coutprocess exe+1 enter into readyn; pcbpd.status=e; exe=pd;coutprocess exe+1 is executingn; i=saveareaexe0; addr=saveareaexe1; return(exe); void block(int se) int w; coutprocess exe+1=0) return(FALSE); block(se); saveareaexe0=i; saveareaexe1=ad; exe=NIL; return(TRUE); void wakeup(int se) int w; w=semse.firstwr; if(w!=NIL) semse.firstwr=pcbw.nextwr; pcbw.status=r; coutprocess w+10) return(FALSE); wakeup(se); saveareaexe1=ad; saveareaexe0=i; return(TRUE); void eexit(int n) pcbn.status=c; coutprocess n+1 is completed!n; exe=NIL;voidprocess1() if(addr=a) goto a1; if(a
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号