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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、操作系统课程设计报告书河北大学工商学院 操作系统课程设计 题目: 操作系统课程设计 学 院 工商学院 学 部 信息科学与工程 专 业 计算机类 学 号 20144229166 姓 名 赵林华 指导教师 王煜 2016 年 6 月 24 日 设备管理 2 2.1设计任务.2 2.2设计要求.2四、程序设计及实验 6五、总结和讨论 9六、代码10一、引言1.1课程设计目的通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。1.2课程设计内容模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备

2、管理、文件管理和用户接口四部分。1.3小组人数 小组人员:赵林华 张铭 二、需求分析设备管理设备管理设备管理主要包括设备的分配和回收。模拟系统中有鼠标、键盘、打印机和视频四种设备,采用安全分配方式。设备采用设备状态的变化还有设备颜色的变化来判断设备所处的状态,当创建文件是就指明了要调用的设备,让后等进程运行时来知道调用的什么设备,最后颜色和状态的变化来反应调用的设备与每个设备所处的状态。设备用JButton图标显示,通过灰色和可见色判断是否被调用2.1设计任务设计一个设备管理分配程序,按先来先服务的算法,对设备进行分配。2.2设计要求 设备管理主要包括设备的分配和回收。(1)模拟系统中有A、B

3、、C三种独占型设备,A设备3个,B设备2个,C设备1个。(2)因为模拟系统比较小,因此只要设备表设计合理即可。(3)采用先来先服务分配策略,采用设备的安全分配方式。(4)屏幕显示三、算法及设计结构3.1算法的总体思想(流程)设备管理的功能是按照设备的类型和系统采用的分配策略,为请求I/O进程分配一条传输信息的完整通路。合理的控制I/O的控制过程,可最大限度的实现CPU与设备、设备与设备之间的并行工作。1.监视所有设备。为了能对设备实施有效的分配和控制,系统能获取设备的状态。设备状态保存在设备控制表(DeviceTable)中,并动态的记录状态的变化及有关信息。2.制定分配策略。按先来先服务的算

4、法,进行设备分配。 3.设备的分配。把设备分配给进程。 4.设备回收。当进程运行完毕后,要释放设备,则系统必须回收,一边其他进程使用。图3.13.2 Equipment模块3.2.1 功能记录设备的状态及相关信息检查设备是否被调用对设备进行分配进程结束对设备进行回收3.2.2 数据结构 一个DeviceTable类、一个DeviceTable函数。DeviceTable是设备分配表,说明设备的分配状况,是否被占用。Device类说明了设备是如何使用的。每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。 3.3 cpu模块3.3.1 功能进程对设备的调用,当进程使用设备时,检查

5、设备是否空闲。如果空闲,则调用该设备;如果设备正被使用,则将该进程阻塞到该设备的阻塞队列中,等到设备空闲时,再被唤醒,调用设备。3.3.2 数据结构一个设备的枚举类型DeviceType,一个cpu函数。Cpu函数中调用Equipment模块中的函数对设备进行检测。如果设备空闲,就调用该设备;如果设备真在被使用,则该进程被阻塞到该设备的阻塞队列中。3.3.3 算法通过调用Equipment模块中的函数对设背进行检测:如果设备空闲,则使用该设备;如果设备正在工作,则进程被阻塞。3.4 form1模块3.4.1 功能 界面管理 启动进程,如果要使用设备,按先来先服务的算法调用设备。此模块中有一个设

6、备调用函数public int Allocate(DeviceType type),根据设备的物理名调用设备,并将信息显示显示到界面中。3.4.2 算法 先来先服务(FCFS, First Come First Service)分配算法:每一设备有一队列管理,当多个作业或任务对同一设备提出I/O请求时,该算法把请求的先后次序排成一个等待该设备的队列,设备分配程序把设备分配给队列中的第一各作业。四、程序设计与实验对着目录节点点击右键可以添加执行文件,文本文件和新目录点击新建执行文件,输入文件名称弹出内容窗口,输入内容,然后退出保存,同时也可以用菜单栏编辑选项点击是以后,创建成功,执行文件扩展名为

7、.exe,此时磁盘显示占用:磁盘情况这是创建文件的过程就结束了。图4-1 进程调用设备。先调用A类设备, A类设备一共有三个,如果有空闲的设备,则进程就可调用;否则将进程阻塞到设备A的阻塞队列中,等待设备,等到A类设备有空闲设备时,就唤醒该进程,在断点处继续进行程序。再调用B类设备, B类设备一共有两个,如果有空闲的设备,则进程就可调用;否则将进程阻塞到设备B的阻塞队列中,等待设备,等到B类设备有空闲设备时,就唤醒该进程,在断点处继续进行程序。最后调用C类设备, C类设备只有一个,C设备是临界资源,如果C设备空闲,则进程就可调用;否则将进程阻塞到设备C的阻塞队列中,等待设备,等到C设备空闲,就

8、唤醒该进程,在断点处继续进行程序。五、总结和讨论设备管理主要监视所有设备的状态,制定分配策略,完成设备的分配回收,合理的控制I/O的控制过程,最大限度的实现CPU与设备、设备与设备之间的把并行工作。通过对这次操作系统课程设计的亲自参与和操作,使我深刻体会到了:只要你想做只要你想学没有弄不懂得事情,工程里面也不能不在乎细节,等等。感觉很受益匪浅。懂得了操作系统包括的四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理之间的内在联系。加深了我对这门课程的理解。锻炼了自己在考虑全局也不是细节的能力。通过这次实验,再一次熟悉并深入掌握了程序设计语言和界面设计。同时,我也深深体会到了团队的重要性

9、,如果没有同组人的互相鼓励和督促我跟本不能很快的完成任务。一滴水的力量是有限的,但汇聚成溪流将是美丽的。虽然我们每个人的力量都是有限的,但是激烈的讨论、相互的鼓励使我们在实践中成长。感谢和我一起面对的同伴们,因为有你们我才变得勤奋。更感谢给予我们谆谆教导的老师,在我们犹豫困惑时给予我们指导,谢谢您!通过java的Swing编程,简单的模拟了一下操作系统,部分功能并不完善,希望在之后的日子里可以做的更好;充分的体现的面相对象的思想,简单的通过时间片轮转的调度算法实现操作系统的进程模块小组成员的充分配合,分工合作共同完成一个项目的团结协作精神六、代码程序代码using System;using S

10、ystem.Collections.Generic;using System.Text;using System.Windows.Forms;namespace OS.ClassFolder public enum Interrupt IO, End, No public enum ProcessState Block, Ready, Execute, White public enum DeviceType a, b, c, no public struct PCB public int ProcessID; /进程块的编号(0-9) public string ProcessName; /

11、使用该进程块的进程名 public int PageAdress; /页表的首地址 public int Sum; /页表的长度 public int PC; /各个寄存器的状态 public string IR; public int DR; public Interrupt PSW; public int Pri; /优先级 public int WaitTime; /要使用设备多长时间 public int GetDeviceTime; /获得设备的时间 public int ExecuteTime; /开始执行的时间 public DeviceType NeedDevice; /申请失

12、败的设备类型 public DeviceType HaveDevice; /正在使用的设备类型 public int DN; /使用的是哪个设备 public string BlockReason; /阻塞的原因 public int Next; class CPU public int PC; public int DR; public string IR; public Interrupt PSW; public Interrupt PSW1; public PCB PCBArray=new PCB10; public DateTime XTTime; public int XDTime;

13、 public int White;/空白 public int Ready;/就绪 public int Block;/阻塞 public int Execute;/执行 private DeviceType type; private int time; public OS.ClassFolder.MainRam ram = new MainRam(); public OS.ClassFolder.Device Dev = new Device(); private void Init() / /初始化PCB块 / White = 0; Ready =Block=Execute=10; f

14、or (int i = 0; i 10; i+) PCBArrayi.ProcessID = i; PCBArrayi.Next = i + 1; / /初始化寄存器 / PC = 0; PSW = Interrupt.No; PSW1 = Interrupt.No; IR = ; / /初始化时间 / XTTime = Convert.ToDateTime(00:00:00); XDTime = 0; / /构造函数 / public CPU() Init(); #region cpu类的事件和委托 / /申请设备的事件和委托 / public class DeviceStateChange

15、EventArgs : EventArgs private int _Atime; private DeviceType _type; private int _DN; private string _processname; private int _needtime; public int Atime get return _Atime; set _Atime = value; public DeviceType type get return _type; set _type = value; public int DN get return _DN; set _DN = value;

16、public string processname get return _processname; set _processname = value; public int needtime get return _needtime; set _needtime = value; public delegate void DeviceStateChangeEventHander(object sender, DeviceStateChangeEventArgs e); public event DeviceStateChangeEventHander DeviceStateChange; p

17、ublic delegate void ErrorIREventHander(object sender, EventArgs e); public event ErrorIREventHander ErrorIR; public delegate void QueueChangeHander(object sender, EventArgs e); public event QueueChangeHander QueueChange; public delegate void FinishIRHander(object sender,EventArgs e); public event Fi

18、nishIRHander FinishIR; public delegate void ExecuteIsWhiteHander(object sender, EventArgs e); public event ExecuteIsWhiteHander ExecuteIsWhite; #endregion / /空闲PCB链表的操作 / public int GetOneFromWhite() int a = White; if (a10) White = PCBArraya.Next; return a; public void InsertOneToWhite(int a) PCBArr

19、aya.Next = White; White = a; / /就绪PCB链表的操作 / public void InsertOneToReady(int a) PCBArraya.Next = Ready; Ready = a; public void GetOneFromReady(int a) int b = Ready; if (a = b) Ready = PCBArraya.Next; else while (b 10,则申请失败 / int a = GetOneFromWhite(); int b; if (str.Length 0) int sum = (str.Length

20、+ 15) / 16; if (a 10) if (ram.Judge(sum) = true) / /分配内存并加载到内存 / b = ram.Allocate(sum); ram.LoadContent(str, b); / /初始化PCB / PCBArraya.ProcessName = Name; PCBArraya.PageAdress = b; PCBArraya.Sum = sum; PCBArraya.PC = 0; PCBArraya.IR = ; PCBArraya.DR = 0; PCBArraya.PSW = Interrupt.No; PCBArraya.WaitT

21、ime = -10; PCBArraya.Pri = 1024 / str.Length; PCBArraya.ExecuteTime = 0; PCBArraya.NeedDevice = DeviceType.no; PCBArraya.HaveDevice = DeviceType.no; PCBArraya.GetDeviceTime = 0; PCBArraya.DN = -1; PCBArraya.BlockReason = ; InsertOneToReady(a); / /是否转向进程调度 / int c = JudgeAttemper(); if (c 10) Attempe

22、r(c); else InsertOneToWhite(a); MessageBox.Show(内存不足或文件太长,创建进程失败, 消息, MessageBoxButtons.OK, MessageBoxIcon.Error); else MessageBox.Show(PCB块不足,创建进程失败, 消息, MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show(文件为空,不能创建进程,错误,MessageBoxButtons.OK,MessageBoxIcon.Error); / /Destroy函数,撤

23、销程序 / public void Destory(int a) / /回收内存 / int p = PCBArraya.PageAdress; int sum = PCBArraya.Sum; ram.DeAllocate(p,sum); / /回收PCB块 / InsertOneToWhite(a); Execute = 10; / /显示结果 / / / / / /BlockProcess函数,阻塞进程 / public void BlockProcess(int a,DeviceType b,int time) / /保护CPU现场 / PCBArraya.PC = PC; PCBAr

24、raya.IR = IR; PCBArraya.DR = DR; / /判断申请设备是否成功,根据不同情况填写BlockReason项 / bool d = Dev.JudgeDevice(b); if (d = false) PCBArraya.NeedDevice = b; PCBArraya.HaveDevice = DeviceType.no; PCBArraya.BlockReason = 申请 + b + 设备失败; PCBArraya.PC = PCBArraya.PC - 4; else PCBArraya.DN = Dev.Allocate(b); PCBArraya.Hav

25、eDevice = b; PCBArraya.NeedDevice = DeviceType.no; PCBArraya.GetDeviceTime = XDTime; PCBArraya.WaitTime = time; PCBArraya.BlockReason = 等待IO输入输出; if (DeviceStateChange != null) DeviceStateChangeEventArgs e=new DeviceStateChangeEventArgs(); e.DN = PCBArraya.DN; e.type = b; e.processname = PCBArraya.P

26、rocessName; e.needtime = time; e.Atime = XDTime; DeviceStateChange(null,e); / /修改进程状态 / InsertOneToBlock(a); Execute = 10; / /转向进程调度 / int c = JudgeAttemper(); if (c 10) Attemper(c); / /WakeUp函数,唤醒进程 / public void WakeUp(int ID,DeviceType device) / /唤醒自己 / int d = Block; if (Block = ID) Block = PCBArrayID.Next; InsertOneToReady(ID); else while (PCBArrayd.Next 10) if (PCBArrayd.Next = ID) PCBArrayd.Next = PCBArrayID.Next; InsertOneToReady(ID); break; d = PCBArrayd.Next; / /检查第一个节点 / while(Block10&PCBArrayBlock

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

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