资源简介

操作系统课程设计SPOOLING技术。 C语言版,内含课设报告。 有简单的中文操作界面。 建议使用C与C++程序设计学习与实验系统 打开。

资源截图

代码片段和文件信息

#include
#include
#include

struct pcb{      //定义结构体 
    int status;     //进程状态
    int length;    //输出长度
}*PCB[3];

struct req{      //请求进程名
    int reqname;  //定义名称
    int length;    //输出长度
    int addr;  //本次输出的首地址
}reqblock[10];

int buffer[2][100];
int head=0tail=0;
int t1=5t2=5;
FILE *f;

void help();
void menu();

void request(int i) //定义请求函数
{
    int jmslength=0;
    struct req*run;
    if(1==i)
        t1--;
    else
        t2--;
    printf(“用户%d请求数据:\n“i);//输出标注
    fprintf(f“用户%d请求数据:\n“i);
    run=&reqblock[tail%10];//定义输出块
    run->reqname=i;
    run->length=0;
    if(0==tail)
        run->addr=0;
    else
    {
        int index=(tail-1)%10;
        run->addr=reqblock[index].addr+reqblock[index].length;
    }
    for( m=0;m<100;m++)
    {
        if(0==buffer[i-1][m])
        {
            run->addr=m;
            break;
        }
    }
     s=0;
    while(1)
    {
        j=rand()%10;
        if(0==j)
        {
            run->length=length;
            break;
        }
        buffer[i-1][(run->addr+length)]=s;
        printf(“%3d“s);
        fprintf(f“%3d“s);
        s++;
        length++;
    }
    printf(“\n“);
    fprintf(f“\n“);
    PCB[i-1]->length+=length;
    length=0;
    if(2==PCB[2]->status)
        PCB[2]->status=0;
    tail++;
}

void spooling()
{
    int ij;
    struct req*run;
    printf(“调用SPOOLING输出服务程序输出数据:\n“);
    fprintf(f“调用SPOOLING输出服务程序输出数据:\n“);
    run=&reqblock[head%10];
    printf(“%d:“run->reqname);
    fprintf(f“%d:“run->reqname);
    for(i=0;ilength;i++)
    {
        printf(“%3d“buffer[run->reqname-1][run->addr+i] );
        fprintf(f“%3d“buffer[run->reqname-1][run->addr+i] );
    }
    printf(“\n“);
    fprintf(f“\n“);
    head++;
    for( j=0;j<2;j++)
    {
        if(1==PCB[j]->status)
            PCB[j]->status=0;
    }
}

void start()
{ int lmnjk;
    for(l=0;l<2;l++)
        for(j=0;j<100;j++)
            buffer[l][j]=0;
    for(n=0;n<3;n++)
    {
        struct pcb*tmpPcb=(struct pcb*)malloc(sizeof(struct pcb));
        tmpPcb->status=0;
        tmpPcb->length=0;
        PCB[n]=tmpPcb;
    }
    printf(“两个用户进程的请求分别为5,5.\n“);
    fprintf(f“两个用户进程的请求分别为5,5.\n“);
    srand((unsigned)time(NULL));
    while(1)
    {

        k=rand()%100; //用随机数模拟进程执行概率
        if(k<=45)//执行请求输出用户进程1
        {
            if((0==PCB[0]->status)&&(t1>0))
                request(1);
        }
        else if((k<=90)&&(t2>0))//执行请求输出用户进程2
        {
            if(0==PCB[1]->status)
                request(2);
        }
        else
            spooling();//执行SPOOLING进程
        if((0==t1)&&(0==t2)&&(head==tail))
            break;
    }
    for(m=0;m<3;m++)
    {
        free(PCB[m]);
        PCB[m]=NULL;//PCB值为空
    }
    printf(“\n按回车键返回菜单选项\n“);
    getchar();
    tail=0;
    head=0;
    t1=5;
    t2=5;
    men

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

     文件       4914  2009-06-16 18:30  spooling.c

     文件     181841  2009-06-16 18:28  李禹霖22号.doc

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

               186755                    2


评论

共有 条评论