• 大小: 400KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签:

资源简介

本实验用内存来模拟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


评论

共有 条评论

相关资源