进程管理实验-C语言版

进程管理实验-C语言版

ID:42346003

大小:98.50 KB

页数:22页

时间:2019-09-13

进程管理实验-C语言版_第1页
进程管理实验-C语言版_第2页
进程管理实验-C语言版_第3页
进程管理实验-C语言版_第4页
进程管理实验-C语言版_第5页
资源描述:

《进程管理实验-C语言版》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、支持多个进程并发运行的简单进程管理模拟系统本系统的同步机构采用信号量上的P、V操作的机制;控制机构包括:(1)阻塞和唤醒操作;(2)时间片中断处理程序模拟时间片中断;(3)进程调度程序负责为各进程分配处理机。系统中涉及了3个并发进程。它们之间的关系是:(1)3个进程需要互斥使用临界资源S2。(2)进程1和进程2又需互斥使用临界资源S1.本系统在运行过程中随机打印出各进程的状态变换过程,系统的调度过程及公共变量的变化情况。题目系统为进程设置了5种运行状态:e—执行态;r—高就绪态;t—低就绪态(执行进程因时间片到限而转入);w—等待态;c—完

2、成态。各进程的初始状态均设置为r.系统分时执行各进程,并规定3个进程的执行概率均为33%。通过产生随机数x来模拟时间片。当进程process1访问随机数x时,若x>=0.33;当进程process2访问x时,若x<0.33或x>=0.66;当进程process3访问x时,若x<0.66,则分别认为各进程的执行时间片到限,产生“时间片中断”而转入低就绪态t。基本思路进程调度算法采用剥夺式最高优先数法。各进程的优先数通过键盘输入予以静态设置。调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。先从r状态进程中选择,再从t状态进程中选

3、择。当现行进程唤醒某个等待进程,且被唤醒进程的优先数小于现行进程时,则剥夺现行进程的执行权。各进程在使用临界资源S1和S2时,通过调用信号量sem1和sem2上的P、V操作来实现同步。阻塞和唤醒操作负责完成从进程的执行态到等待态以及从等待态到就绪态的转换。系统启动后,在完成必要的系统初始化后便执行进程调度程序。当执行进程因“时间片中断”,或被排斥使用临界资源,或唤醒某个进程时,立即进行进程调度。当3个进程都处于完成状态后,系统退出运行。基本思路(1)每个进程有一个进程控制块PCB,内容包括:id进程标识号,id=0,1,2;status进程

4、状态,可为e,r,t,w,c;priority进程优先数;nextwr等待链指针,指示在同一信号量上等待的下一个进程的标识号。(2)信号量semaphore,对应于临界资源S1和S2分别有sem1和sem2,均为互斥信号量,内容包括:value信号量,初值为1;firstwr等待链首指针,指示在同一信号量上等待的下一个进程的标识数。数据结构(3)现场保留区,用数组savearea[3][4]表示。即每个进程都有一个大小为4个单元的保留区,用来保存被“中断”时的现场信息,如通用寄存器的内容和断点地址等。此外,系统中还用到下列主要全程变量:ex

5、e执行进程指针,其值为进程标识号;i用来模拟一个通用寄存器;addr用来模拟程序计数器;s1,s2两个公共变量,用作共享临界资源数据结构#defineMAXPRI100#defineNIL-1structprocb{PCB类型intid;进程号charstatus;进程状态intnextwr;等待号messagemess;消息队指针intinum;运行次数,charaddr;返回地址intpriority;优先数};structmessagetp{消息块类型(信息,指针,发送者号)intnum;messagenext;intpro;};ty

6、pedefstructmessagetp*message;指向消息块指针类型structsemaphorel{信号量类型(信号量,等待队头号)intvalue;intfirstwr;};structprocbpcb[3];PCB表structsemaphorelsem[2];信号量表charaddr;当前进程地址inti,seed,exe;运行次数,随机变量,当前运行进程号{structmessagep,q;工作指针p=(message)malloc(sizeof(structmessagetp));p->num=snum;申请消息块,写入

7、缓冲p->next=NULL;下一指针置空p->pro=sender;置发送者printf(“sendmessagetoprocess%d”,receiver);printf(“process%dalreadyrun%dtimes”,sender,snum);voidsend(intsender,intreceiver,intsnum)发送q=pcb[receiver].mess;q指向接收者消息等待队列首if(q==NULL)pcb[receiver].mess=p;q空则p插入队首else{while(q->next!=NULL)q=q

8、->next;q移到队尾q->next=p;}将p链接到队尾}voidsend(intsender,intreceiver,intsnum)发送{messagep,q;工作指针p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。