好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

2022年操作系统课程设计spooling课程设计报告.docx

13页
  • 卖家[上传人]:资****
  • 文档编号:269760599
  • 上传时间:2022-03-23
  • 文档格式:DOCX
  • 文档大小:178.37KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 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%,SPOOLIN输G 出进程为 10%,这由随机数发生器产生地随机数来模拟打算 .2 概要设计数据结构:〔1〕 进程掌握块( PCB) Struct pcb{ int id ;// 进程标示int status ; // 进程状态int firstaddr ;int length ;// 输出长度int outbufword ;}*PCB[3] ;PCB(Process Control Block ), 进程掌握块是操作系统用于记录和刻画进 程状态及有关信息地数据结构 , 也是操作系统把握进程地唯独资料结构 , 是操作系统掌握和治理进程地主要依据 . 它包括了进程执行时地情形 , 以及进程让出处理器所处地状态、断点等信息 . 对于输出进程和 spooling 进程两种不同地进程 , 采纳相同地结构处理 , 包括进程标识 , 进程状态 , 输出缓冲 , 输出指针 , 信息块首地址, 输出长度等内容 . 需要支持在不同状态之间地转换 , 输出缓冲晴空等操作 .( 2)恳求输出快 reqblock struct{int reqname ; // 恳求进程名int length ; // 输出长度int addr ; // 信息在输出井地首地址}reqblock[10] ;输出恳求块地作用是定义标识要求输出进程地变量和相关信息并且定义输出首地址 . 要求输出地进程标识 , 输出长度 , 输出首地址等内容 .〔3〕 输出井 BUFFERSPOOLING系统为每个恳求输出地进程在输出井中分别开创一个区 . 本试验可设计一个二维数组 〔int buffer[2][10]〕 作为输出井 . 每个进程在输出井最多可占用 10 个位置.函数调用关系图:程序框图如下:入口PCB 、输出恳求块、输出井等初始生成随机数1)x ( 0-判 x 及进程状态均不满意x<=0.45 且进程1 为 可 执 行 状态0.450.9 且SPOOLING 进 程为可执行状态执行恳求输出进程 1( r=1)执行恳求输出进程2int执 行 请 求输 出 进程 3( r=3)reqname; // 恳求输出恳求完成全部终止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-- ;elset2-- ;printf〔" 用户%d恳求数据 :\n",i〕 ;// 输出标注run=&reqblock[tail%10] ;// 定义输出块run->reqname=i ;run->length=0 ;if〔tail==0〕run->addr=0 ;else{int index=〔tail-1〕%10 ;run->addr=reqblock[index].addr+reqblock[index].length ;}for〔 m=0 ;m<100;m++〕{if〔buffer[i-1][m]==0〕{run->addr=m ;break ;}}while〔1〕{j=rand〔〕%10 ;if〔j==0〕{run->length=length ;break ;}buffer[i-1][〔run->addr+length〕]=j ;length++ ;printf〔"%d",j〕 ;}printf〔"\n"〕 ;PCB[i-1]->length+=length ;length=0 ;if〔PCB[2]->status==2〕PCB[2]->status=0 ;tail++ ;}Spooling 函数:void spooling〔〕{int i,j ;struct req*run ;printf〔" 调用 SPOOLING输出服务程序输出数据 :\n"〕 ;run=&reqblock[head%10] ;printf〔"%d ",run->reqname〕 ;fprintf〔f,"%d ",run->reqname〕 ;for〔i=0 ;ilength ;i++〕 printf〔"%d",buffer[run->reqname-1][run->addr+i] 〕 ;fprintf〔f,"%d",buffer[run->reqname-1][run->addr+i] 〕 ;printf〔"\n"〕 ;fprintf〔f,"\n"〕 ;head++ ;for〔 j=0 ;j<2 ;j++〕{if〔PCB[j]->status==1〕PCB[j]->status=0 ;}}主函数:void main〔〕{ int i,n ;f=fopen〔"result.txt","w"〕 ;for〔i=0 ;i<2 ;i++〕for〔n=0 ;n<100;n++〕 buffer[i][n]=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 ;PCB[i]=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,"%d\n",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,"%d\n",t2〕 ;srand〔〔unsigned〕time〔NULL〕〕 ;while〔1〕{i=rand〔〕%100 ; // 用随机数模拟进程执行概率if〔i<=45〕// 执行恳求输出用户进程 1{if〔〔PCB[0]->status==0〕&&〔t1>0〕〕 request〔1〕 ;}else if〔〔i<=90〕&&〔t2>0〕〕// 执行恳求输出用户进程 2{if〔PCB[1]->status==0〕request〔2〕 ;}elsespooling〔〕 ;// 执行 SPOOLING进程 if〔〔t1==0〕&&〔t2==0〕&&〔head==tail〕〕break ;} for〔i=0 ;i<3 ;i++〕{free〔PCB[i]〕 ;PCB[i]=NULL ;//PCB 值为空}fclose〔f〕 ;}// 主函数终止6 调试分析1. 该试验中花费了我不少时间去摸索如何更加明显地把两个用户分别地调度进程更好地显示出来 ,由于进程个数地不一样 ,所以就摸索了动态地实现进程地数目,更加便利利用是 spooling 技术.从而更加直观地调度便利地显示了信息 .2. 摸索将结果用文件地势式储存 , 但是对于函数 fprint 地运用错误 , 忽视了最基本地定义 , 耗费了好多地时间 , 仍是显现了一个错误:桌面\liuhao\liu.cpp〔99〕 : error C2440:'=' : cannot convert from 'struct _iobuf *' to 'int''f' : undeclared identifier最终在前面定义了一个 FILE *f ;桌面\liuhao\liu.cpp〔83〕 : error C2065:3. C:\Documents and 桌 面 \liuhao\liu.cpp〔85〕 : error C2065: 'reqname' : undeclared identifier之类地错误地显现由于已经给结构体 stuct req 通过 struct req*run;所以必需在用指针指向 run地变量.7 测试结果.1.提示输入进程个数:2 回车后显示虚脱机工作:参考文献[1] 边肇祺,模式识别(其次版) ,北京:清华高校出版社 ,1988,25~35[2] 李永忠 ,几种小波变换地图像处理技术 , 西北民族学院学报(自然科学。

      点击阅读更多内容
      相关文档
      浙江省温州市洞头区2025年九年级下学期数学基础素养第一次适应性检测试题含答案.pptx 四川省内江市2025年九年级中考数学第一次模拟考试卷.pptx 浙江省宁波市镇2025年中考数学一模试卷含答案.pptx 湖南省长沙市2025中考第一次模拟考试数学试卷含答案.pptx 浙江省金华市2025年中考一模数学模拟试题含答案.pptx 浙江省宁波市2025年九年级学业水平质量检测数学试卷含答案.pptx 湖南省长沙市2025年中考数学模拟卷含答案.pptx 浙江省宁波市镇海区2025年中考一模数学试题含答案.pptx 湖南省长沙市望城区2025年中考一模数学试题含答案.pptx 四川省内江市2025年中考一模考试数学试题含答案.pptx 广东省深圳市2025年九年级下学期第二次学业质量监测数学试卷(二模).pptx 浙江省温州市2025年中考一模数学试卷含答案.pptx 四川省绵阳市平武县2025年一模数学试题含答案.pptx 浙江省温州市2025年九年级学生学科素养检测数学试卷(二模)含答案.pptx 四川省绵阳市北川羌族自治县2025年中考一模数学试题含答案.pptx 浙江省绍兴市2025年初中毕业生学业水平调测数学试题含答案.pptx 四川省广元市2025年九年级中考一诊数学试题含答案.pptx 浙江省金华市2025年中考模拟预测数学试题含答案.pptx 湖南省长沙市2025年九年级中考一模数学试题.pptx 高考语文一轮复习讲义 课时精炼专题15 对点精练五 精准赏析艺术技巧.docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.