ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:205.50KB ,
资源ID:4383002      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4383002.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计报告书.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计报告书.docx

1、操作系统课程设计报告书 课 程 设 计 报 告( 2011-2012年度第二学期)课程名称: 操作系统实验 课设题目: SPOOLING假脱机输入输出技术模拟 院 系: 控制与计算机工程学院 班 级: 软件1002 姓 名: 王怡 指导教师: 贾静平 设计周数: 一周 成 绩: 2012年6月27 日 需求分析SPOOLING技术实质上是用户进程利用一个共享设备的一个存储区,并不是真正占有这一设备,用户进程把要完成的任务以文件的形式存入存储区,在存储区中排队并等待SPOOLING系统调度,只有被SPOOLING系统调度并输出,此项任务才真正完成,通过SPOOLING技术可以使独占设备成为共享设

2、备,由此大大提高了设备的使用率,节约了硬件资源。 整体功能及设计1.整体功能SPOOLING系统由专门负责I/O的常驻内存的进程以及输入井、输出井组成;它将独占设备改造为共享设备,实现了虚拟设备功能。将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLING技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。2.设计思

3、想本次课程设计采用进程的随机调度法模拟Spooling,一共有2个用户进程和一个SPOOLING进程。其中有45%的概率调度用户进程1,45%的概率调度用户进程2,10%的概率调度SPOOLING进程。进程基本状态有3种,分别为可执行,等待和结束。可执行态就是进程正在运行或等待调度的状态;等待状态又分为等待状态1,等待状态2,等待状态3。状态变化的条件为:1进程执行完成时,置为“结束”态。2服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。3SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。4SPOOLING进程输出一个信息块后,应立即释放该信息

4、块所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。5服务程序在输出信息到输出井并形成输出请求信息块后,若SPOOLING进程处于等待态则将其置为“可执行状态”。6当用户进程申请请求输出块时,若没有可用请求块时,调用进程进入“等待状态3”。3程序框图(1)SP00LING输出模拟系统主控流程图如图1所示。图1 SP00LING输出模拟系统主控流程图(2)SP00LING输出服务程序由请求输出的两个用户进程调用,程序流程图如图2所示。图2 输出请求服务的程序框图(3)SPOOLING输出进程流程图如图3所示。 图3 SP00LING输出进程流程图 编程实现在本次课程设计中,程序的主要功

5、能的实现一共使用了3个类。 PCB类:Class CPcbpublic: int m_id; /进程标识id int m_status; /进程状态 int m_count; /要输出的文件个数 int m_x; /进程在输出时的临时变量 Repblock类:Class CRepblockpublic: int m_reqname; /请求进程id int m_length; /本次输出长度 int m_addr; /信息在输出井的首地址 SPLDlg对话框类:Class CSPLDlgPublic:CPcb pcb3; /三个进程,其中pcb0、pcb1为用户进程,pcb2为输出进程 CRe

6、qBlock req10; /用户请求输出块 int buffer2100; /用户输出井 int c12; /用户输出井剩余大小 int c222; /输出井使用情况 int c3; /请求输出块剩余大小 int ptr1; /请求输出块使用情况 int ptr2; void init(); /初始化个数据块 void print(); /打印请求数据块内容 void DispatchUser(int id); / 输出请求服务的程序 void DispatchSpooling(); /SP00LING输出进程 核心函数:void CSPLDlg:DispatchUser(int id) i

7、nt x=1; int count=0; if(pcbid.m_status=0) while(pcbid.m_count0) x=rand()%10; while (x) if(c1id0)/第一个输出井不满 bufferidc2id1=x; c2id1=(c2id1+)%100; c1id-; count+; x=rand()%10; else pcbid.m_status=1;/等待 return; pcbid.m_count-; if(c30)/请求控制块不为满 reqptr2.m_reqname=id;/第一个进程 reqptr2.m_length=count; reqptr2.m_

8、addr=c2id0;/输出井的起始位置 c3-; ptr2=(ptr2+)%10; c2id0=c2id1; if(pcb2.m_status=2) pcb2.m_status=0; return; return; else pcbid.m_status=3; return; Spooling进程调度函数:void CSPLDlg:DispatchSpooling() if (pcb2.m_status=0) if (c3!=10) if(reqptr1.m_length0) print(); if(pcb0.m_status=1|pcb1.m_status=1) if (pcb0.m_st

9、atus=1) pcb0.m_status=0; else if(pcb1.m_status=1) pcb1.m_status=0; return; else ptr1=(ptr1+)%10; c3+; if (pcb0.m_status=3|pcb1.m_status = 3) if(pcb0.m_status=3) pcb0.m_status = 0; else if(pcb1.m_status=3) pcb1.m_status = 0; return; else if (pcb0.m_count=0&pcb0.m_count=0) pcb2.m_status=4; return; else pcb2.m_status=2; 使用说明图4 主界面如图4所示:输入完第一个和第二个进程打印的文件个数后打击打印按钮,即可显示文件的打印顺序。 结果分析 图5 结果分析图 图6 结果分析图当用户输出第一个用户进程和第二个用户进程的文件数量分别为3和2时,程序随机调度进程并为每一个文件产生内容,从图5的打印序列可以看出,程序首先调度用户进程2,直到用户进程2的三个文件都送到输出井。然后调用用户进程1,将用户进程1的三个文件送入输入井。Spooling进程可能在两个用户进程间调用,也可能在进程1调用完之后调用。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1