資源簡介
操作系統課程設計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
評論
共有 條評論