• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 进程调度  

资源简介

进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用:  先进先出调度算法;  基于优先数的调度算法;  最短执行时间调度算法 确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:  当前执行进程;  就绪队列;  等待队列

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 


struct PCB //定义一个进程结点数据域
{
int name; //进程名
int run_time; //运行时间
int level; //优先数
char state; //运行状态
struct PCB *next; //指向下一个结点的指针
struct PCB *pre;                //指向前一个节点的指针
};
struct PCB *PcbPoint[10];//申明指针
struct PCB *ReadyHead *ReadyTail *WaitHead *WaitTail;

int classNum;
void displayProcess() //用于输出当前链表中各结点的状态
{
struct PCB *temp;
temp = ReadyHead;
while (temp != 0 )
{
printf(“  Ready p %d“ temp->name);   
temp = temp->next; //实现往后移
}
    temp = WaitHead;
printf(“ \n“);   
while (temp != 0 )
{
printf(“  Wait p %d“ temp->name);   
temp = temp->next; //实现往后移
}
   printf(“ \n“);
}

struct PCB * shedule()//根据优先级调度
{  
struct PCB *retValue;
struct PCB *temp;
    retValue = ReadyHead;
temp = ReadyHead;
while (temp != 0)
{
if (temp->level > retValue->level)
{
retValue=temp;
}
temp=temp->next;
}
if ((retValue == ReadyHead) && (retValue==ReadyTail))
{
ReadyTail->next=ReadyHead->next=ReadyTail->pre=ReadyHead->pre = NULL;
return 0;
}
if (retValue == ReadyTail && (retValue != ReadyHead))
{
ReadyTail = retValue->pre;//调整队列尾部
ReadyTail->next = NULL;
}
else if (retValue == ReadyHead && (retValue != ReadyTail) )
{
ReadyHead= retValue->next;
ReadyHead->pre = NULL;
}
else
{
retValue->pre->next=retValue->next;
retValue->next->pre=retValue->pre;
}
return retValue;
}

int carryOut (struct PCB *p)
{
int temp;
if (NULL == p)
return 0;
   
        printf(“ \n“);   
printf(“  Runing process %d“ p->name);   
printf(“      run time  %d“ p->run_time);   
        printf(“      level  %d\n“ p->level);   
 
     temp = rand()%2;
 if (temp == 1)  //该随机数为时,将等待队列中的第一个PCB加入就绪队列的对尾;
 {
 if (ReadyTail !=NULL && (WaitHead != NULL)) 
 {
           ReadyTail->next=WaitHead;
   if (WaitHead != NULL)
   WaitHead->pre = ReadyTail;
            ReadyTail=WaitHead;
 }

 if (WaitHead != NULL)
         WaitHead=WaitHead->next;

       if (ReadyTail !=NULL)
 ReadyTail->next=NULL;

 };


 temp = rand()%20 +1;//表示执行进程已经执行的时间;约为50毫秒

 
 if (temp < p->run_time) //没有执行完
 {
             p->run_time=p->run_time - temp;
        temp = rand()%2;
        if (0 ==temp ) // 加到就绪队列队尾
        {
      ReadyTail->next=p;
  p->pre =ReadyTail;
      ReadyTail=p;
        }
        else   // 加到等待队列队尾
           {
WaitTail->next=p;
WaitTail=p;
        };
 }
      else//已经执行完了
         printf(“  process %d is run over\n“ p->name);

 if (0==temp)
 ReadyTail->next=NULL;
 else
 WaitTail->next=NULL;
     displayProcess();
 return 1;
};

void creat() //创建一个函数,用于返回一个链表
{
int i = 1;
for (i = 0; i< 10; i++) 
{
PcbPoint[i] = (struct PCB *)malloc(sizeof(struct PCB)); //给PcbPoint指针分配内存
    PcbPoint[i]->name= i;
P

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4183  2012-11-23 17:15  lab1.c

----------- ---------  ---------- -----  ----

                 4183                    1


评论

共有 条评论