资源简介

操作系统课设时做的,设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系(可选)。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。

资源截图

代码片段和文件信息

#include 
#include 
#include “stdlib.h“


typedef struct PCB
{
 int name;
 int runtime;
     int runedtime;
 int state;
 int killtime;
 int waitpoint;
 int waittime; 
struct PCB *next;
}PCB;


PCB *runqueue=NULL;                        //运行队列
PCB *top=NULL*tail=NULL*temp*temp_pre;  //就绪队列
PCB *top_wait=NULL*tail_wait=NULL;        //阻塞队列
#define NUM 4                              //创建的进程数
int timeslice=3;                           //时间片大小


void CreateProcess()
{
int i;
srand(10);
    for(i=0;i {
     temp=new PCB;
        temp->name=i;
temp->runtime=rand()%10+9;
temp->runedtime=0;
        temp->next=NULL;
temp->killtime=0;
        temp->waitpoint=rand()%10;
temp->waittime=rand()%10;
if(i==0)
{
top=temp; 
tail=temp;

else{
tail->next=temp;
tail=temp;
}
printf(“process name %d runtime=%d waitpoint=%d runedtime=%d killtime=%d\n“tail->nametail->runtimetail->waitpointtail->runedtimetail->killtime); 
}
}


void ProcessSchedule()
{
int stime=0;
while(top!=NULL||top_wait!=NULL)
{   
   if(top) //进行调度操作
{   
//从就绪队列选一个节点,插入运行队列
      runqueue=top;
    top=top->next;
        runqueue->next=NULL;
runqueue->waitpoint=runqueue->waitpoint-timeslice;
if(runqueue->waitpoint>0)                        //不产生阻塞   
   {
   runqueue->runtime=runqueue->runtime-timeslice;
   if(runqueue->runtime<=0)                         //进程将运行结束
   {  
printf(“\n进程 %d 占用处理机后状态为:\n“runqueue->name);   
runqueue->killtime=runqueue->runtime+timeslice;    //该进程占用处理机的时间                                 
         runqueue->runedtime=runqueue->runedtime+runqueue->killtime;  //该进程以总共使用处理机的时间
runqueue->runtime=0;   //该进程还需要占用处理机的时间
if(top_wait!=NULL)
stime=stime+runqueue->killtime;
printf(“process name %d runtime=%d runedtime=%dkilltime=%d\n“
runqueue->namerunqueue->runtimerunqueue->runedtimerunqueue->killtime);
printf(“进程 %d 已完成,将销毁\n“runqueue->name);    //结束该进程,释放该节点空间
   }
   else                                            //进程未完成,从运行到就绪
{
printf(“\n进程%d 占用处理机后状态为\n“runqueue->name);
         runqueue->killtime=timeslice; 
         runqueue->runedtime=runqueue->runedtime+runqueue->killtime;
if(top_wait!=NULL)
         stime=stime+runqueue->killtime;
printf(“process name %d runtime=%d runedtime=%d killtime=%d\n“runqueue->namerunqueue->runtimerunqueue->runedtimerunqueue->killtime);
//将运行队列插入到就绪队列                     
tail->next=runqueue;      
tail=tail->next;
if(top==NULL && tail!=NULL)
top=tail;
    tail->next=NULL;
printf(“加入就绪队列队尾成功!\n“);
   }
   }
   else   //产生阻塞
   {
   printf(“\n进程%d 产生堵塞!将在%ds后唤醒!\n“runqueue->namerunqueue->waittime);
runqueue->killtime=runqueue->waitpoi

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-06-10 23:28  进程管理模拟系统\
     目录           0  2016-06-10 23:27  进程管理模拟系统\Debug\
     文件       82944  2016-06-10 23:27  进程管理模拟系统\Debug\vc60.idb
     文件      102400  2016-06-10 23:27  进程管理模拟系统\Debug\vc60.pdb
     文件       10622  2016-06-10 23:27  进程管理模拟系统\Debug\进程管理.obj
     文件      176213  2016-06-10 23:27  进程管理模拟系统\Debug\进程管理演示.exe
     文件      175532  2016-06-10 23:27  进程管理模拟系统\Debug\进程管理演示.ilk
     文件      224044  2016-06-10 23:27  进程管理模拟系统\Debug\进程管理演示.pch
     文件      566272  2016-06-10 23:27  进程管理模拟系统\Debug\进程管理演示.pdb
     文件        5032  2016-01-07 09:31  进程管理模拟系统\进程管理.cpp
     文件        4354  2016-01-06 10:10  进程管理模拟系统\进程管理演示.dsp
     文件         549  2016-01-06 10:10  进程管理模拟系统\进程管理演示.dsw
     文件       50176  2016-06-10 23:28  进程管理模拟系统\进程管理演示.ncb
     文件       48640  2016-06-10 23:28  进程管理模拟系统\进程管理演示.opt
     文件         921  2016-06-10 23:27  进程管理模拟系统\进程管理演示.plg

评论

共有 条评论