资源简介
操作系统课程设计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语言实现,包括高通、
- C语言 谭浩强 第五版版 书后习题答案
- 纯C语言+libjpeg实现最简单jpeg图片解码
- C语言实现链表,创建、插入、查找、
- 南京大学C语言课件
- C语言知识点完整总结超清版)
- 一个简单的C语言通讯录程序
- 数据结构(c语言版)代码实现
- 51单片机C语言实现GPRS通信
- C语言学生管理系统(带文本数据库)
- C语言库函数 齐全 必备
- C语言五子棋代码 支持鼠标操作
- 卷积码硬判决 含编解码.zip
- Logistic回归C语言实现
- 机器学习C4.5算法C语言实现
- C语言 键盘记录
- C语言系统课程设计报告
- 图像处理,C++,C语言。二值化,灰度
- C语言钢琴程序
- Linuxsocket文件传输C语言支持断点
- C语言编写图形登陆界面
- C语言实现签到系统
- YUV合成 YUV裁剪 YUV_to_JPEG 纯c语言编写
- 改进的高斯混合背景建模算法的实现
- C语言实现遍历注册表
- Q学习算法C语言程序亲测完美运行
- 决策树C语言代码
- ADE7758三相电能芯片读写源程序,全部
- 北京林业大学操作系统B实验
- 数据结构c语言实现求最短路径
评论
共有 条评论