logo资料库

spooling模拟系统代码.docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
一、算法或原理的实现思想 SOOLING 打印模拟系统 在程序内设计一个输出井。当生成打印任务后,若输出井中无等待执行的 打印任务且打印机状态为空闲,则立即送入打印机开始打印;若打印机正在执行 上个打印任务,则新任务暂存于输出井。若输出井中有等待执行任务,将新任务 添加到已有任务之后,输出井中的任务按先进先出顺序在打印机空闲时依次送入 打印机执行。 二、程序(带注释) #include #define WELLSIZE 500 #define FALSE 0 #define TRUE 1 //定义进程控制块 pcb struct { int id; char status; int bufflag; int filec; } pcb[4]; //请求输出块 struct { int reqid; int size; int addr; } reqblock[10]; //进程号 //进程状态 //输出时的临时变量 //要输出的文件数 //请求进程名 //本次输出信息长度 //信息在输出井的手首址 //输出井,userbuf[1][50]为进程用户 1 的输出井,f 为输出井的空间 //第一个空闲输出块指针,剩余指针,下一个空闲指针 int well[WELLSIZE],userbuf[3][50],f[4]; int ebp=0,ebc=10,cbp=0,n; int wellsize=WELLSIZE,wellptr=0; int spoolserver(int p,int s); float random1()//产生随机数 { int m; static int seed; if((m=seed)<0) m=-m; seed=(25173*seed+13849)%65536; return(m/32767.0); } //生成文件 void userpro(int i) { static int j; int c; if(pcb[i].bufflag==FALSE) { pcb[i].bufflag=TRUE; c=j=0; while(c==0 && j==0) for(;j<49;++j) { c=(int)(random1()*10.0);
userbuf[i-1][j]=c; if(c==0) break; } if(c) userbuf[i-1][j]=0; } if(spoolserver(i,j+1)) if(pcb[i].filec==1) { pcb[i].status='c'; printf("\nUser%d program is completed!\n",i); } } int spoolserver(int p,int s) { int k; if(s>wellsize||ebc==0) return(FALSE); reqblock[ebp].reqid=p; reqblock[ebp].size=s; reqblock[ebp].addr=wellptr; ebc--; ebp=(ebp+1)%10; for(k=0;k
ebc++; } } //判断 x 的值,确定执行 user1,user2,user3 还是 spooling 进程 void schcduler() { float x; for(; ;) { x=random1(); if(x<0.30 && pcb[1].status=='e') userpro(1); else if(x>=0.30 && x<0.60 && pcb[2].status=='e') userpro(2); else if(x>=0.60 && x<0.90 && pcb[3].status=='e') userpro(3); else if(x>=0.90 && pcb[0].status=='e') spoolout(); if(n==0) break; } } int main() { int i,j; printf("\n* * * * SPOOLing SYSTEM * * * * \n"); for(i=0;i
输入样例:1 1 1 输出样例: 测试数据 2: 输入样例:2 1 1 输出样例: 四、参考文献 [1]汤小丹,计算机操作系统,西安电子科技大学出版社 [2]秦昌盛,帮助复习 C 语言语法 五、感想、体会或收获 在学习 spooling 进程之前,我认为打印机打印就只是近一个出一个那么简单,但是,实 际上要复杂得多,会有多个输入设备输信息到输入缓冲区,在进入输入井,输入井内部有多 个作业,在进入到下一个输入缓冲区,在进行管理,随后进入输出缓冲区进入输出井,进入 下一输出井,最后再有输出设备打印。 生活学习中有些事情就像打印机,看似很简单的任务,可是要想其条理有序的进行,就 必须要有一定的管理机制。
分享到:
收藏