毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 报告 >> 正文

设备管理(流程图)(spooling技术)源代码操作系统实验报告 第3页

更新时间:2008-11-4:  来源:毕业论文

编写一个Spooling程序来模拟假脱机输入输出过程
Process 2 produces a block 3!
Process 2 produces a block 4!
Output block 2: (ID=1)
2 4 5 9 5 9 8 5 4 9 4 8 0
Output block 3: (ID=2)
7 6 2 8 3 0
Process 2 produces a block 5!
Process 2 produces a block 6!
Output block 4: (ID=2)
6 0
Process 1 produces a block 7!
Process 1 produces a block 8!
Output block 5: (ID=2)
6 5 1 9 4 0
Output block 6: (ID=2)
9 4 0
Output block 7: (ID=1)
2 8 7 5 5 4 2 9 2 1 1 1 5 7 0 Process 2 produces a block 9!
Process 2 produces a block 10!
Output block 8: (ID=1)
0
Process 1 produces a block 11!
Output block 9: (ID=2)
5 4 9 1 1 4 4 6 3 2 6 1 2 5 7 0
Output block 10: (ID=2)
3 4 2 4 0
Output block 11: (ID=1)
2 1 8 9 7 8 1 5 4 9 3 4 5 5 8 1 3 1 4 8 6 9 4 6 0
五、系统不足与经验体会
系统的不足包括健壮性尚不够好,界面比较简单,对于模拟
过程,输出信息不够详细,对某些规模的的初始化需要修改程序。
经验体会:注意数据达到上限时的情况,对于进程调度,要
注意避免没有任何一个进程处于等待状态的情况出现。
优、附录:源代码(带注释)
#include <cstdio>
#include <cstring>
#include <cstdlib> #include <ctime>
 
struct info_PCB
{
 long ID;//进程标识
 long status;//状态
 long po;//输出指针
 long head;//信息块首地址
 long count;//输出长度 
 long len;//输出长度
 long head;//输出首地址
}block[128];
struct info_wall
{
 long num[10000];//输出内容
 long open,closed;//队列指针
}wall[3];
long K[3],L1,L2[3]; long n;
 
void input()//输入函数
{
  printf("Input the times of user1's output file:");
 scanf("%ld",&K[1]);
 
  printf("Input the times of user2's output file:");
 scanf("%ld",&K[2]);
}
 
void init()//初始化函数
{
 L1=10;
 L2[1]=L2[2]=100;
 memset(PCB,0,sizeof(PCB));
 PCB[1].ID=1;
 PCB[2].ID=2;
 PCB[3].ID=3;
 PCB[3].status=2;
 memset(wall,0,sizeof(wall)); n=0;
}
 
void work()//模拟进程调度
{
 long r;
 long k;
 long a,b;
 long i,j;
 
  while (PCB[1].status!=3 || PCB[2].status!=3 || PCB[3].status!=3)
 {
  r=rand()%100+1;//用随机数模拟进程执行概率
  if (r<=45)
  {
   k=1;
  }
  else
  {
   if (r<=90)
    k=2;
   else
    k=3;
  }
  
  if (PCB[k].status!=0)
   continue;
  
  switch (k)
  {
  case 1: case 2:
   //输出进程k
   a=rand()%10;
   ++PCB[k].po;
   PCB[k].wait[PCB[k].po]=a;
   if (a==0)
   {
    b=wall[k].closed+1;
    for (i=1;i<=PCB[k].po;i++)
    {
     wall[k].num[++wall[k].closed]=PCB[k].wait[i];
    }
    PCB[k].po=0; PCB[k].count++;
    if (PCB[k].count==K[k])
    //进程执行完毕后应置成"结束状态"。
    {
     PCB[k].status=3;
    }
    if (PCB[3].status==2)
    //要求输出进程在输出信息到输出井并形成信息块后,应将 Spooling 进程
置成"可运行状态"。
    {
     PCB[3].status=0;
    } 
    if (L2[k]==0 && PCB[k].status==0)
    //如果输出井满,将进程置为"不可运行状态 1"
    {
     PCB[k].status=1;
    }
    n++;
    block[n].ID=k;
    block[n].head=b;
    block[n].len=wall[k].closed-b+1;
        printf("Process %ld produces a block %ld!\n",k,n);
   }
   break;
  case 3:
   //Spooling 进程
   PCB[3].po++;
   a=PCB[3].po; 
   for (i=1;i<=block[a].len;i++)

上一页  [1] [2] [3] [4] 下一页

设备管理(流程图)(spooling技术)源代码操作系统实验报告 第3页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。