⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 djf.txt

📁 CPU多级反馈队列_模拟--大三下学期操作系统课程设计 /* 作为自己写的第一个比较长的程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
#include <graph.h>/*图形头文件*/
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
#include <math.h>/*数学,ABS(求绝对值函数)*/
#include <conio.h>/*接收键盘消息函数*/
#define ENTER 0x1c0d/*当接收到ENTER按键信息时进行输入任务操作*/
#define ESC 0x011b /*当接收到按键ESC信息时退出程序*/
#define A 2/*不同级别的任务的时间片*/
#define B 4
#define DELAY 1000
#define CHAOSHI 20


int i,j,k,key;/*几个全局变量*/
int min,sec,hour;/*设置时间时的三个变量*/
int min1,sec1,hour1;/*计算时间差时的三个变量*/
struct   time t;/*时间参数,读取时间,时间记时。其格式为(t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund)*/
int h,z;/*移动图形时的参量*/
char sr1;int sr2;/*输入参数*/

struct node
{
    char j;/*进程的级别*/
    int h;/*如果画出图形来他的横坐标*/
    int z;/*如果画出图形来他的纵坐标*/
    int ys;/*图形的颜色*/
    int t; /*任务的时间长度*/
    int dd;/*等待的时间*/
    int wz;/*任务队列中的位置*/
    struct node *next;
};
typedef struct node *linklist;
linklist a,b,c;/*定义三个链表*/
shuadd(int,int,int,int,int,int);
gengdd(linklist l,int i,int dd)/*因为第二,三行要等待时间这个参数来确定是否要升级*/
{
int j=1;
    linklist p=l->next;
    while(p&&j<i)
    {
      p=p->next;
      j++;
    }
    if(!p||j>i)
      return 0;
p->dd=p->dd+dd;/*时间加操作*/
}


gengt(linklist l,int i,int t)/*把链表l的第i个结点的时间刷新*/
{
    int j=1;
    linklist p=l->next;
    while(p&&j<i)
    {
      p=p->next;
      j++;
    }
    if(!p||j>i)
      return 0;
p->t=t;/*返回时间量*/
}

initlist(linklist *l)/*链表的初始化*/
{
    *l=(linklist)malloc(sizeof(struct node));
    if(!*l)
      exit(0);
    (*l)->next=0;

}

delete(linklist l)/*删除链表的第一个元素*/
{

    linklist p=l,q;
    if(!p->next)
      return 0;
    q=p->next;
    p->next=q->next;
    free(q);
   /*这里之所以没有做把任务位置数ch减一的操作可以用ch-length()来判断*/
}


length(linklist l)/*图形(任务链表)的长度*/
{
    int i=0;
    linklist p=l->next;
    while(p)
    {
      i++;
      p=p->next;
    }
    return i;
}


Init() /*图形驱动*/
{
    int gd=DETECT,gm;
    initgraph(&gd,&gm,"c:\\tc");
    cleardevice();
}


initer()/*图形架够的生成*/
{

setcolor(RED);
settextstyle(1,0,4);
outtextxy(180,380,"CPU Scheduling :");
setcolor(YELLOW);
settextstyle(1,0,2);
outtextxy(280,420,"Multilevel Feedback");
outtextxy(385,440,"Quene scheduling");

setcolor(10);/*整个图形环境是绿色的基础*/
settextstyle(0,0,0);
rectangle(240,30,631,330);/*外面的大框图*/
line(240,90,500,90);/*第一条任务横线*/
/*rectangle(260,60,300,90);*//*第一条横线的左矩形*/
rectangle(460,60,500,90);/*第一条横线的右矩形*/
line(240,150,500,150);
line(240,210,500,210);
/*rectangle(260,180,300,210);*//*第二条横线的左矩形*/
rectangle(460,180,500,210);
line(240,270,500,270);
line(240,330,500,330);
/*rectangle(260,300,300,330);*//*第三条横线的左矩形*/
rectangle(460,300,500,330);
line(500,30,500,330);
rectangle(180,0,500,360);/*通道*/
rectangle(500,0,631,30);
rectangle(500,330,631,360);
/*outtextxy(515,331,"job:swapping..");
outtextxy(515,340,"cpu:running...");
outtextxy(515,349,"job:updating..");*/


}


famen(int n,int m,int w)/*右边阀门开关(第几个阀门,m=0开门,m=1关门)*/
{ if(m==0)
    { if(n==1)for(i=1;i<=29;i++)
         {
          setcolor(0);
          line(500,31+30*w,500,30+i+30*w);
          delay(DELAY);
         }
      if(n==2)for(i=1;i<=29;i++)
         {
          setcolor(0);
          line(500,151+30*w,500,150+i+30*w);
          delay(DELAY);
         }
      if(n==3)for(i=1;i<=29;i++)
         {
          setcolor(0);
          line(500,271+30*w,500,270+i+30*w);
          delay(DELAY);
         } 
    }


   if(m==1)
    { if(n==1)for(i=1;i<=30;i++)
                 {
                  setcolor(10);
                  line(500,31+30*w,500,30+i+30*w);
                  delay(DELAY);
                 }
      if(n==2)for(i=1;i<=30;i++)
                 {
                  setcolor(10);
                  line(500,151+30*w,500,150+i+30*w);
                  delay(DELAY);
                 }
      if(n==3)for(i=1;i<=30;i++)
                 {
                  setcolor(10);
                  line(500,271+30*w,500,270+i+30*w);
                  delay(DELAY);
                 }
    }
}


famen1(int n,int m)/*m=1 关上 ;m=0 打开 ;n 代表第几个阀门*/
{
if(m==0)
{ if(n==1)for(i=1;i<=29;i++)
            {
             setcolor(0);
             line(460,61,460,60+i);
             delay(DELAY);
            }
    if(n==2)for(i=1;i<=29;i++)
            {
             setcolor(0);
             line(460,181,460,180+i);
             delay(DELAY);
            }
    if(n==3)for(i=1;i<=29;i++)
            {
             setcolor(0);
             line(460,301,460,300+i);
             delay(DELAY);
            } 
}

if(m==1)
{if(n==1)for(i=1;i<=27;i++)
           {
            setcolor(10);
            line(460,61,460,61+i);
            delay(DELAY);
           }
   if(n==2)for(i=1;i<=27;i++)
            {
             setcolor(10);
             line(460,181,460,181+i);
             delay(DELAY);
             }
   if(n==3)for(i=1;i<=27;i++)
             {
              setcolor(10);
              line(460,301,460,301+i);
              delay(DELAY);
              }
   }
}

xiaoying()/*任务完成后图形的消失*/
{   int i;
    setcolor(0);
    for(i=1;i<60;i++) line(500+i,31,500+i,329);

}


juxing(int x,int y)/*矩形的生成*/
{
rectangle(x-16,y-12,x+16,y+12);
}

tuyuan(int x,int y)/*椭圆的生成*/
{
ellipse(x,y,0,360,16,12);
}

lingxing(int x,int y)/*菱形的生成*/
{
line(x-16,y,x,y-12);
line(x,y-12,x+16,y);
line(x+16,y,x,y+12);
line(x,y+12,x-16,y);
}

over()/*图形的取消*/
{    cleardevice();
     setcolor(RED);
     settextstyle(3,0,5);
     outtextxy(150,200,"PROGRAM IS OVER");
     getch();
     closegraph();}

shuaw(linklist l)/*刷新任务完成后的列表,即任务在链表中的位置*/

{   int i=1;
    linklist p=l->next;
    while(p)
    { p->wz=i;
      i++;
     /* if((p->j)=='c')printf("c zhong you %d,p->dd=%d\n",i-1,p->dd); */
      p=p->next;
    }
}



hmove(char n,int x0,int y0,int x1,int color)/*行移动--第几列,初始横坐标,初始纵坐标,目的横坐标,颜色*/
{
if(n=='a')for(i=1;i<=(x1-x0);i++)
      {
              setcolor(0);
              lingxing(x0-1+i,y0);
       setcolor(color);
              lingxing(x0+i,y0);
              delay(DELAY);
              }
if(n=='b')for(i=1;i<=(x1-x0);i++)
       {
               setcolor(0);
               tuyuan(x0-1+i,y0);
        setcolor(color);
               tuyuan(x0+i,y0);
               delay(DELAY);
               }

if(n=='c')for(i=1;i<=(x1-x0);i++)
       {
                setcolor(0);
                juxing(x0-1+i,y0);
         setcolor(color);
                juxing(x0+i,y0);
                delay(DELAY);
               }
}


nhmove(char n,int x0,int y0,int x1,int color)/*行,从右到左移动*/
{
   if(n=='a')for(i=1;i<=(x0-x1);i++)
      {
              setcolor(0);
              lingxing(x0-i+1,y0);
       setcolor(color);
              lingxing(x0-i,y0);
              delay(DELAY);
              }
   if(n=='b')for(i=1;i<=(x0-x1);i++)
       {
               setcolor(0);
               tuyuan(x0-i+1,y0);
        setcolor(color);
               tuyuan(x0-i,y0);
               delay(DELAY);
               }

   if(n=='c')for(i=1;i<=(x0-x1);i++)
       {
               setcolor(0);
               juxing(x0-i+1,y0);
        setcolor(color);
               juxing(x0-i,y0);
               delay(DELAY);
              }
}



lmove(char n,int x0,int y0,int y1,int color)/*图形的纵坐标移动*/
{
if(n=='a')for(i=1;i<=(y1-y0);i++)
      {
              setcolor(0);
              lingxing(x0,y0+i-1);
       setcolor(color);
              lingxing(x0,y0+i);
              delay(DELAY);
               }
if(n=='b')for(i=1;i<=(y1-y0);i++)
       {
               setcolor(0);
               tuyuan(x0,y0+i-1);
        setcolor(color);
               tuyuan(x0,y0+i);
               delay(DELAY);
               }

if(n=='c')for(i=1;i<=(y1-y0);i++)
       {
               setcolor(0);
               juxing(x0,y0+i-1);
        setcolor(color);
               juxing(x0,y0+i);
               delay(DELAY);
              }
}


nlmove(char n,int x0,int y0,int y1,int color)/*列,从下向上移动*/
{

if(n=='a')for(i=1;i<=(y0-y1);i++)
      {
              setcolor(0);
              lingxing(x0,y0-i+1);
       setcolor(color);
              lingxing(x0,y0-i);
              delay(DELAY);}
if(n=='b')for(i=1;i<=(y0-y1);i++)
       {
               setcolor(0);
               tuyuan(x0,y0-i+1);
        setcolor(color);
               tuyuan(x0,y0-i);
               delay(DELAY);}

if(n=='c')for(i=1;i<=(y0-y1);i++)
       {
               setcolor(0);
               juxing(x0,y0-i+1);
        setcolor(color);
               juxing(x0,y0-i);
               delay(DELAY);
              }

}


cpu(int n)/*这片代码段最好直接写在程序里这样系统有最好的响应时间*/
{

if(n==1)
    { j=1;
      while(!kbhit())
       {for(i=1;i<=40;i++) 
              if(j%16!=0)
                     {
                      setcolor(j);
                      line(599+i,30,599+i,330);
                     }
              if(j%16!=0) 
                       sleep(1);
              j++; 
       }
    
      key=bioskey(0);
      if(key==ENTER) return 1;   }
      if(n==0)
             {for(i=1;i<=40;i++) 
                  {
                   setcolor(0);
                   line(599+i,30,599+i,330);
                  }
              }
}/*这段代码没有用上*/
 

insert(linklist l,char e,int m)/*链表的初始化并且把第一次的图形画出来*/
{ linklist p=l,s;
    int j=1,j1=1,j2=1;
    int h,z;
    while(p->next)
    {
     p=p->next;

     if(e=='a') j++; /*给任务个数记数*/
     if(e=='b') j1++;
     if(e=='c') j2++;
    }
    if(!p) return 0;                                       /*如果任务还在执行那么他依然还在记数之列*/

   if(j<=10&&j1<=10&&j2<=10)

    { if(e=='a'){
                 if(j<=5)             
                      {
                       h=75;
                       z=(480-40*j);
                      }
   else if(j>=6)  
                      {
                       h=45;
                       z=(240+40*(j-5));
                      }
                 }/*只能接受最多10个进程*/

      if(e=='b'){
                  if(j1<=5)        
                      {
                       h=195;
                       z=(480-40*j1);
                      }
    else if(j1>=6)  
                      {
                       h=165;
                       z=(240+40*(j1-5));
                       }
                 }/*只能接受最多10个进程*/

      if(e=='c'){
                 if(j2<=5)           
                      {
                       h=315;
                       z=(480-40*j2);
                      }
   else if(j2>=6) 
                      {
                       h=285;
                       z=(240+40*(j2-5));
                      }
                  }/*只能接受最多10个进程*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -