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

📄 2.txt

📁 操作系统内存调度程序
💻 TXT
字号:
#include"stdio.h"
#define N 5
struct freearea
{
  int startaddress;
  int size;
  int state;
}freeblock[N]={{20,20,1},{80,50,1},{150,100,1},{300,30,0},{600,100,1}};
int alloc(int applyarea)
{
  int i,tag=0;
  for(i=0;i<N;i++)
     if (freeblock[i].state==1 && freeblock[i].size>applyarea)
     {
        freeblock[i].startaddress=freeblock[i].startaddress+applyarea;
        freeblock[i].size=freeblock[i].size-applyarea;
        tag=1;
        return freeblock[i].startaddress-applyarea;
     }
     else
       if(freeblock[i].state==1 && freeblock[i].size==applyarea)
       {
         freeblock[i].state=0;
         tag=1;
         return freeblock[i].startaddress;
       }
     if(tag==0)
     return -1;
}
void setfree()
{
  int s,l,tag1=0,tag2=0,tag3=0,i,j;
  printf("input free area startaddress:\n");
  scanf("%d",&s);
  printf("input free area size:\n");
  scanf("%d",&l);
  for(i=0;i<N;i++)
  {
    if(freeblock[i].startaddress==s+1 && freeblock[i].state==1)
    {
       l=l+freeblock[i].size;
       tag1=1;
       for(j=0;j<N;j++)
          if(freeblock[j].startaddress+freeblock[j].size==s && freeblock[j].state==1)
          {
             freeblock[i].state=0;
             freeblock[j].size=freeblock[j].size+1;
             tag2=1;
             break;
          }
         if(tag2==0)
         {
           freeblock[i].startaddress=s;
           freeblock[i].size=l;
           break;
         }
    }
  }
  if(tag1==0)
  {
     for(i=0;i<N;i++)
       if(freeblock[i].startaddress+freeblock[i].size==s && freeblock[i].state==1)
       {
         freeblock[i].size=freeblock[i].size+1;
         tag3=1;
         break;
       }
       if(tag3==0)
          for(j=0;j<N;j++)
            if(freeblock[j].state==0)
            {
              freeblock[j].startaddress=s;
              freeblock[j].size=l;
              freeblock[j].state=1;
              break;
            }
   }
}
void adjust()
{
  int i,j;
  struct freearea middata;
  for(i=0;i<N;i++)
    for(j=0;j<N;j++)
      if(freeblock[j].startaddress>freeblock[j+1].startaddress)
      {
        middata.startaddress=freeblock[j].startaddress;
        middata.size=freeblock[j].size;
        middata.state=freeblock[j].state;
        freeblock[j].startaddress=freeblock[j+1].startaddress;
        freeblock[j].size=freeblock[j+1].size;
        freeblock[j].state=freeblock[j+1].state;
        freeblock[j+1].startaddress=middata.startaddress;
        freeblock[j+1].size=middata.size;
        freeblock[j+1].state=middata.state;
      }
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
        if(freeblock[j].state==0 && freeblock[j+1].state==1)
        {
           middata.startaddress=freeblock[j].startaddress;
           middata.size=freeblock[j].size;
           middata.state=freeblock[j].state;
           freeblock[j].startaddress=freeblock[j+1].startaddress;
           freeblock[j].size=freeblock[j+1].size;
           freeblock[j].state=freeblock[j+1].state;
           freeblock[j+1].startaddress=middata.startaddress;
           freeblock[j+1].size=middata.size;
           freeblock[j+1].state=middata.state;
        }
}
void print()
{
   int i;
   printf("    |..............................................|\n");
   printf("    |  start             size           state      |\n");
   printf("    |..............................................|\n");
    for(i=0;i<N;i++)
    {
      printf(" |   %3d               %3d            %3d       |\n",
        freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);
      printf("    |..............................................|\n");
    }
}
void main()
{
  int applyarea,start,j;   
  char end;    
  printf("\n is there any job request memory? y or n:");
  while((end=getchar())=='y')
  {
     printf("at first the free  momery is this:\n");
     adjust();
     print();
     printf("input request memory size:");
     scanf("%d",&applyarea);
     start=alloc(applyarea);
     adjust();
     printf("after allocation,the free memory is this:\n");
     print();
     if(start==-1)
        printf("there is no fit memory,please wait\n");
     else
        printf("job`smemory start address is:%d\n",start);
        printf("job size is:%d\n",applyarea);
        printf("job is running.\n");
        printf("job is terminated.\n");
     for(j=1;j<100000;j++);
        setfree();
        adjust();
        print();
        printf("is there any job that is waiting? y/n:");
        end=getchar();
  }
}



















   











































   



















































⌨️ 快捷键说明

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