广西师范大学计算机科学与信息工程学院操作系统实验书
{ printf(\ //屏幕输出 k++; }
printf(\
reqblock[cbp].reqid=0; reqblock[cbp].size=0;
n--;//输入文件数减一 wellsize+=size;//增加输入井剩余空间 ebc++;//输入请求块组的空闲块增一 } } }
//--------------------------------------------------------------------------------
//登记输入请求块,将用户缓冲区mybuf的数据送入输入井well。若成功送入,返回TRUE,否则返回FALSE.
//idnum为进程号,charnum为输出的字符个数. int spoolserver(int idnum,int charnum) {
int k;
if (charnum>wellsize || ebc==0)//字符数超过输入井剩余空间的大小或输出请求块的空闲块数为0
return (FALSE);//无法输出
//登记输出请求块
reqblock[ebp].reqid=idnum; reqblock[ebp].size=charnum;
reqblock[ebp].addr=wellptr;//字符在输入井中的起始位置 ebc--;//空闲输出请求块数减一
ebp=(++ebp);//空闲块指针指向下一块
//把数据用户缓冲区传到输入井,起始位置由输出井当前指针决定 for (k=0;k well[wellptr++]=mybuf[k]; wellptr=wellptr%WELLSIZE; } wellsize=wellsize-charnum; 6 广西师范大学计算机科学与信息工程学院操作系统实验书 return (TRUE); } //--------------------------------------------------------------------- //SPOOLing进程的程序 void spoolin() { int x1,j,i; printf(\输入到哪个用户?(1,2,3)\ scanf(\ if(file[x1] //输出缓冲区数据到输入井 if( spoolserver(x1,j)) file[x1]++; for(i=0;i<50;i++) mybuf[i]=0; } else printf(\该用户文件输入到输入#已达到数量\\n\ if(n==0) pcb[0].status='c'; } 四、程序运行结果截图 7 广西师范大学计算机科学与信息工程学院操作系统实验书 8 广西师范大学计算机科学与信息工程学院操作系统实验书 五、实验总结及进一步改善建议 1、通过今天的实验操作Linux下U盘的访问和模拟spooling系统,自己初步熟悉理解了设备虚拟分配技术原理,特别是对spooling系统的输入和输出有了更深刻的理解。 2、这次实验过程中数据结构有了更深刻的理解,特别是对pcb和输入请求块链表的各项操作,以及链表等数据结构在操作系统中的应用,每次的对我的思考能力也是不小的锻炼。 3、要有坚信自己可以独立完成的信心,敢于攻坚,越是难的问题,越是要有挑战的心理,要迎难而上,不要半途放弃。 4、善于同学间的讨论,遇到问题,和自己班上同学讨论能够受益匪浅。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 9