欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    操作系统课程设计spooling课程设计报告(共13页).doc

    • 资源ID:12226875       资源大小:73.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统课程设计spooling课程设计报告(共13页).doc

    精选优质文档-倾情为你奉上1 需求分析SPOOLING是Simultaneous Peripheral Operation On-Line (即外部设备联机并行操作)的缩写,它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。SPOOLING技术实际上是一种外围设备同时联机操作技术,又称为排队转储技术。它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节。进程基本状态有3种,分别为可执行,等待和结束。可执行态就是进程正在运行或等待调度的状态;等待状态又分为等待状态1,等待状态2,等待状态3。状态变化的条件为:1>进程执行完成时,置为“结束”态。2>服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。3>SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。4>SPOOLING进程输出一个信息快后,应立即释放该信息快所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。5>服务程序在输出信息到输出井并形成输出请求信息快后,若SPOOLING进程处于等待态则将其置为“可执行状态”。 6>当用户进程声请请求输出快时,若没有可用请求快时,调用进程进入“等待状态3”。满足条件:1)设计一个实现SPOOLING技术的进程设计一个SPOOLING输出服务进程、一个SPOOLING输出进程、两个用户请求进程。用户进程请求输出一系列信息,调用输出服务进程,由输出服务进程将该信息送入输出井。等待SPOOLING进程进行输出。SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息将其输出。2)设计进程调度算法进程调度采用随机算法,两个请求输出的用户进程的调度概率各为45%,SPOOLING输出进程为10%,这由随机数发生器产生的随机数来模拟决定。2 概要设计数据结构:(1)进程控制块(PCB)Struct pcb int id;/进程标示 int status; /进程状态 int firstaddr; int length;/输出长度 int outbufword;*PCB3;PCB(Process Control Block),进程控制块是操作系统用于记录和刻画进程状态及有关信息的数据结构,也是操作系统掌握进程的唯一资料结构,是操作系统控制和管理进程的主要依据。它包括了进程执行时的情况,以及进程让出处理器所处的状态、断点等信息。对于输出进程和spooling 进程两种不同的进程,采用相同的结构处理,包括进程标识,进程状态,输出缓冲,输出指针,信息块首地址,输出长度等内容。需要支持在不同状态之间的转换,输出缓冲晴空等操作。(2)请求输出快reqblockstructint reqname; /请求进程名int length; /输出长度int addr; /信息在输出井的首地址reqblock10;输出请求块的作用是定义标识要求输出进程的变量和相关信息并且定义输出首地址。要求输出的进程标识,输出长度,输出首地址等内容。(3) 输出井BUFFERSPOOLING系统为每个请求输出的进程在输出井中分别开辟一个区。本实验可设计一个二维数组(int buffer210)作为输出井。每个进程在输出井最多可占用10个位置。函数调用关系图:程序框图如下:入口PCB、输出请求块、输出井等初始化生成随机数x(0-1)90判x及进程状态均不满足x>0.9且SPOOLING进程为可执行状态x<=0.45且进程1为可执行状态0.45<x<=9且进程1为可执行状态执行请求输出进程1(r=1)执行请求输出进程3(r=3)执行请求输出进程2 int reqname; /请求进程名 int length; /输出长度 int addr; /信息在输出井的首地址(r=2)输出请求完成全部结束 SPOOLING模拟系统主控图3 运行环境Windows xp系统下 vc+6.04 开发工具和编程语言Vc+6.0 开发工具 c语言编程5 详细设计请求函数:void request(int i) /定义请求函数 int j,m,length=0; struct req*run; if(i=1) t1-; else t2-; printf("用户%d请求数据:n",i);/输出标注 run=&reqblocktail%10;/定义输出块 run->reqname=i; run->length=0; if(tail=0) run->addr=0; else int index=(tail-1)%10; run->addr=reqblockindex.addr+reqblockindex.length; for( m=0;m<100;m+) if(bufferi-1m=0) run->addr=m; break; while(1) j=rand()%10; if(j=0) run->length=length; break; bufferi-1(run->addr+length)=j; length+; printf("%d",j); printf("n"); PCBi-1->length+=length; length=0; if(PCB2->status=2) PCB2->status=0; tail+;Spooling函数:void spooling() int i,j; struct req*run; printf("调用SPOOLING输出服务程序输出数据:n"); run=&reqblockhead%10; printf("%d ",run->reqname); fprintf(f,"%d ",run->reqname); for(i=0;i<run->length;i+) printf("%d",bufferrun->reqname-1run->addr+i ); fprintf(f,"%d",bufferrun->reqname-1run->addr+i ); printf("n"); fprintf(f,"n"); head+; for( j=0;j<2;j+) if(PCBj->status=1) PCBj->status=0; 主函数:void main() int i,n; f=fopen("result.txt","w"); for(i=0;i<2;i+) for(n=0;n<100;n+) bufferin=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; PCBi=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,"%dn",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,"%dn",t2); srand(unsigned)time(NULL); while(1) i=rand()%100; /用随机数模拟进程执行概率 if(i<=45)/执行请求输出用户进程1 if(PCB0->status=0)&&(t1>0) request(1); else if(i<=90)&&(t2>0)/执行请求输出用户进程2 if(PCB1->status=0) request(2); else spooling();/执行SPOOLING进程 if(t1=0)&&(t2=0)&&(head=tail) break; for(i=0;i<3;i+) free(PCBi); PCBi=NULL;/PCB值为空 fclose(f); /主函数结束6 调试分析1.该实验中花费了我不少时间去思考如何更加明显的把两个用户分别的调度进程更好的显示出来,由于进程个数的不一样,所以就思考了动态的实现进程的数目,更加方便利用是spooling技术。从而更加直观的调度方便的显示了信息。2.思考将结果用文件的形式保存,但是对于函数fprint的运用错误,忽略了最基本的定义,耗费了好多的时间,还是出现了一个错误:C:Documents and SettingsAdministrator桌面liuhaoliu.cpp(99) : error C2440: '=' : cannot convert from 'struct _iobuf *' to 'int'C:Documents and SettingsAdministrator桌面liuhaoliu.cpp(83) : error C2065: 'f' : undeclared identifier最后在前面定义了一个FILE *f;3. C:Documents and SettingsAdministrator桌面liuhaoliu.cpp(85) : error C2065: 'reqname' : undeclared identifier之类的错误的出现由于已经给结构体stuct req通过struct req*run;所以必须在用指针指向run的变量。7 测试结果.1.提示输入进程个数: 2回车后显示虚脱机工作: 参考文献 1 边肇祺,模式识别(第二版),北京:清华大学出版社,1988,25352 李永忠,几种小波变换的图像处理技术,西北民族学院学报(自然科学版),2001.6,22(3),15181汤子瀛,梁红兵计算机操作系统(第三版)西安电子科技大学出版社20072任满杰操作系统原理实用教程电子工业出版社 20063张丽芬 刘利雄操作系统实验教程北京;清华大学出版社 20064张尧杰 史美林计算机操作系统教程实验指导 北京;清华大学出版社20005罗宇操作系统课程设计机械工业出版社 2006 心得体会 在这几天的操作系统课程设计中,我的题目是: SPOOLING技术模拟实现,这两周课程设计中, 通过该题目的设计过程,学会如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。通过这两天的上机实验,我也遇到了很多的麻烦,原来以为spooling技术很简单,但是真正的去实践的时候才发觉自己的水平是多么的差啊,纸上得来终觉浅,绝知此事要躬行,这句话说的一点也没错。在以后的学习中我们要学到嵌入式操作系统,我想在一开始学的是时候我就应该自觉地去实践,然后达到自觉性,作为一名计算机学科的学生,我在这里真的是感到无比的压力,不过压力才能产生动力。专心-专注-专业

    注意事项

    本文(操作系统课程设计spooling课程设计报告(共13页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开