资源简介
SPOOLing算法模拟 C++实现
SPOOLing算法模拟 C++实现
SPOOLing算法模拟 C++实现
SPOOLing算法模拟 C++实现
代码片段和文件信息
#include
#include
#include
struct pcb
{
int id; /* 进程标识数*/
int status; /* 进程状态*/
int firstaddr; /*信息块首地址*/
int length; /* 本次输出信息长度*/
int outbufword; /*输出缓冲字*/
}*PCB[3];
/*进程状态status的可能取值
* 0为可执行状态;
* 1为等待状态1,即输出井满等待
* 2为等待状态2,即输出井空等待
* 3为等待状态3,即请求块用完时等待
* 4为结束状态
*/
FILE *f;
struct req /*请求输出块*/
{
int reqname; /* 请求进程名*/
int length; /* 本次输出信息长度*/
int addr; /* 信息在输出井的首地址*/
}reqblock[10];
int buffer[2][100] C3=10; /*buffer为输出井*/
int l1=1 l2=1;
int head=0 tail=0; /*输出井的头尾指针*/
int t1 t2;
void request(int i) /*i为请求输出的进程标识1或2*/
{
int jlength=0 m;
struct req *run;
if(i==1)
{
t1--;
}
else
{
t2--;
}
run=&reqblock[tail%10];
run->reqname=i;
run->length=0;
if(tail==0)
{
run->addr=0;
}
else
{
int index=(tail-1)%10;
run->addr=reqblock[index].addr+reqblock[index].length;
}
for(m=0;m<100;m++)
{
if(buffer[i-1][m]==0)
{
run->addr=m;
break;
}
}
while(1)
{
j=rand()%10;
if(j==0)
{
run->length=length;
break;
}
buffer[i-1][(run->addr+length)]=j;
length++;
}
PCB[i-1]->length+=length;
length=0;
if(PCB[2]->status==2)
{
PCB[2]->status=0;
}
tail++;
}
void spooling()
{
int ij;
struct req *run;
run=&reqblock[head%10];
printf(“%d “run->reqname);
fprintf(f“%d “run->reqname);
for(i=0; ilength; i++)
{
printf(“%d “buffer[run->reqname-1][run->addr+i]);
fprintf(f“%d “buffer[run->reqname-1][run->addr+i]);
}
printf(“\n“);
fprintf(f“\n“);
head++;
for(j=0; j<2; j++)
{
if(PCB[j]->status==1)
{
PCB[j]->status=0;
}
}
}
int main()
{
int i n;
f=fopen(“result.txt““w“);
for(i=0; i<2; i++)
for(n=0; n<100; n++)
buffer[i][n]=0;
for(i=0; i<3; i++)
{
struct pcb *tmpPcb=(struct pcb *)malloc(sizeof(struct pcb));
tmpPcb->id=i;
tmpPcb->status=0;
tmpPcb->firstaddr=0;
tmpPcb->length=0;
tmpPcb->outbufword=1;
PCB[i]=tmpPcb;
}
printf(“How many work do p1 want to do?“);
fprintf(f“How many work do p1 want to do?“);
scanf(“%d“&t1);
fprintf(f“%d\n“t1);
printf(“How many work do p2 want to do?“);
fprintf(f“How many work do p2 want to do?“);
scanf(“%d“&t2);
fprintf(f“%d\n“t2);
srand((unsigned)time(NULL));
while(1)
{
i=rand()%100;
if(i<=45)
{
if((PCB[0]->status==0)&&(t1>0))
{
request(1);
}
}
else if ((i<=90)&&(t2>0))
{
if(PCB[1]->status==0)
{
request(2);
}
}
else
{
spooling();
}
if((t1==0)&&(t2==0)&&(head==tail))
break;
}
for(i=0; i<3; i++)
{
free(PCB[i]);
PCB[i]=NULL;
}
fclose(f);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 541 2008-12-30 09:15 SPOOLing\SPOOLing.dsw
文件 33792 2008-12-30 09:16 SPOOLing\SPOOLing.ncb
文件 33792 2008-12-30 09:16 SPOOLing\Debug\vc60.idb
文件 45056 2008-12-30 09:16 SPOOLing\Debug\vc60.pdb
文件 223536 2008-12-30 09:16 SPOOLing\Debug\SPOOLing.pch
文件 8568 2008-12-30 09:16 SPOOLing\Debug\SPOOLing.obj
文件 212472 2008-12-30 09:16 SPOOLing\Debug\SPOOLing.ilk
文件 200792 2008-12-30 09:16 SPOOLing\Debug\SPOOLing.exe
文件 427008 2008-12-30 09:16 SPOOLing\Debug\SPOOLing.pdb
文件 2912 2008-12-30 09:16 SPOOLing\SPOOLing.cpp
文件 892 2008-12-30 09:16 SPOOLing\SPOOLing.plg
文件 210 2008-12-30 09:16 SPOOLing\result.txt
文件 48640 2008-12-30 09:16 SPOOLing\SPOOLing.opt
文件 4308 2008-12-30 09:16 SPOOLing\SPOOLing.dsp
目录 0 2008-12-30 09:15 SPOOLing\Debug
目录 0 2008-12-30 09:15 SPOOLing
----------- --------- ---------- ----- ----
1242519 16
相关资源
- 操作系统3种页面置换算法 C++实现
- BCH(168)编解码,c++实现
- C++实现的JPEG压缩算法
-
c++实现的简单xm
l解析器 - c++实现Ftp服务器
- 使用C++实现的CYK算法
- 牛顿-柯特斯公式C++实现
- C++实现的共享内存缓冲区
- c++实现算术编码-数据压缩
- C++实现文件复制视频,图像,文本,
- 课程设计全国交通咨询模拟系统C++实
- fastMatch的c++实现(需要opencv支持)
- 普通算术编码的C++实现
- linux C/C++实现的通过url访问网页提取网
- 图的建立与遍历c++实现邻接矩阵存储
- C++实现小型数据库DBMS,具备建表以及
- g711音频编解码(C/C++)实现
- 银行家算法 c++实现代码+报告
- c++实现找出数组最大值函数
- 设计模式之委托模式的demo
- C/C++实现FAT文件系统的读写
- C++实现回归算法(逻辑回归 线性回归
- 植物大战僵尸基于OpenCv和C++实现
- C++实现银行储蓄系统 MFC界面
- MD5 C++实现代码,带注释
- linux 上用C++实现的网络嗅探器
- c/c++实现银行家算法模拟
- C++实现的旅行商问题
- 套接字编程Socketc++实现源码
- 分水岭图像分割算法 c++实现
评论
共有 条评论