资源简介
操作系统课程设计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
相关资源
- C语言编程常见问题解答.pdf
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
川公网安备 51152502000135号
评论
共有 条评论