資源簡介
本實驗用內存來模擬spooling的輸出過程,該模擬系統中包括3個請求spooling輸出的用戶進程、一個Spooling輸出進程模塊spoolout和一個spooling輸出請求服務程序spoolserver,spoolserver負責接收并處理用戶進程的輸出請求;spoolout完成實際的輸出。本實驗進程調度采用隨機調度法,3個用戶進程的調度概率各為30%,Spoolout進程為10%,這由產生的隨機數來模擬。用戶進程在各自的輸出緩沖區中形成輸出信息序列,而后調用服務程序spoolserver請求輸出。Spoolserver接受輸出請求,從相應輸出緩沖區中取出信息序列送輸出井,并構造一個well,提交spoolout進程使用,然后返回用戶進程繼續執行。Spoolout進程執行時,根據取出的某reqblock的內容將輸出井中的相應輸出文件送實際輸出設備,并釋放井區。

代碼片段和文件信息
#include
#include
#include
#include
#include??
#include?
#include?
#include
#include
#include
#define?LEN?sizeof(struct?files)
using?namespace?std;
struct?files{
char?filename[10];
int?filelen;
struct?files?*next;
};
struct?block{
char?filename[10];
char?username[10];
int?filelen;
int?flag;
};
struct?process{
char?id[10];//進程標識
char?status[10];//進程運行狀態
int?bufflag;//輸出緩沖區空閑標志?
????int?files;//輸出的文件記數
struct?block?outbuff;//輸出緩沖
struct?files?*head;
}proce[4];
struct?reqdlock{
char?reqid[10];//請求進程的標識
int?size;//輸出文件的長度
int?addr;//輸出文件在輸出井中的首地址
};
ofstream?fout;
char?outputFileName[20];
int?outbuffer=100;//輸出緩沖區
//struct?block?outbuff[3];
int?wellsize=500;//輸出井大小
struct??block?well[5];//輸出井最多可以放5個文件并且每個文件長度小于100kb
int?wellbuffer=100;//井被劃分為100為單位的物理塊
//初始化系統信息
void?input(struct?process?&tempint?num)
{
if(num==1)
???????strcpy(temp.id“user1“);
if(num==2)
???????strcpy(temp.id“user2“);
if(num==3)
???????strcpy(temp.id“user3“);
????strcpy(temp.status“E“);
temp.bufflag=0;//將進程的輸出緩沖標志置為空閑
struct?files?*p*q;
cout<<“請輸入用戶“< cin>>temp.files;
if(temp.files<0)
temp.files=0;
if(temp.files>0)
{
???for(int?i=0;i ???{
???p=(struct?files*)malloc(LEN);
???cout<<“用戶“< ???cin>>p->filename;
???cout<<“用戶“< ???cin>>p->filelen;
???if(p->filelen>100)?p->filelen=100;
???if(i==0)?temp.head=p;
???else?q->next=p;
???q=p;
???}
???if(temp.files!=0)
???strcpy(temp.status“R“);//有文件為可執行
???q->next=NULL;
}
}
void?init()
{
for(int?i=1;i<=3;i++)
{
input(proce[i]i);
}
//輸出井的初始化
for(i=0;i<5;i++)
{
well[i].flag=0;
}
}
void?dis_user(struct?process?&tempofstream?&fout)
{
struct?process?p;
struct?files?*q;
p=temp;
//輸出進程信息
cout<<“------------------------------------------------------------------“< fout<<“------------------------------------------------------------------“< ????cout<<“進程標識????輸出的文件記數?????運行狀態??????輸出緩沖區空閑標志“< fout<<“進程標識????輸出的文件記數?????運行狀態??????輸出緩沖區空閑標志“< cout< fout<<“??“< cout<<“------------------------------------------------------------------“< fout<<“------------------------------------------------------------------“< ????q=temp.head;
//輸出文件信息
cout<<“用戶進程“< fout<<“用戶進程“< while(q!=NULL)
{
cout<<“文件“<filename<<“???“<filelen<<“KB“< fout<<“文件“<filename<<“???“<filelen<<“KB“< q=q->next;
}
????cout<<“------------------------------------------------------------------“< if(temp.bufflag==1)
{cout<<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????272226??2008-01-04?17:59??spooling\Debug\spooling.obj
?????文件?????323646??2008-01-04?17:59??spooling\Debug\spooling1.exe
?????文件????1123328??2008-01-04?17:59??spooling\Debug\spooling1.pdb
?????文件?????126976??2008-01-04?17:59??spooling\Debug\vc60.pdb
?????文件???????7457??2008-01-04?17:59??spooling\spooling.cpp
?????文件??????14062??2008-01-04?17:34??spooling\spooling.txt
?????文件???????4319??2008-01-01?21:27??spooling\spooling1.dsp
?????文件????????541??2008-01-01?19:48??spooling\spooling1.dsw
?????文件??????50176??2008-01-04?18:00??spooling\spooling1.ncb
?????文件??????53760??2008-01-04?17:59??spooling\spooling1.opt
?????文件????????976??2008-01-04?17:59??spooling\spooling1.plg
?????文件?????120105??2008-01-04?17:55??spooling\spooling1.txt
?????目錄??????????0??2008-01-08?13:42??spooling\Debug
?????目錄??????????0??2008-01-08?13:42??spooling
-----------?---------??----------?-----??----
??????????????2097572????????????????????14
評論
共有 條評論