操作系统课程设计 操作系统课程设计.doc_第1页
操作系统课程设计 操作系统课程设计.doc_第2页
操作系统课程设计 操作系统课程设计.doc_第3页
操作系统课程设计 操作系统课程设计.doc_第4页
操作系统课程设计 操作系统课程设计.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计 题目 操作系统课程设计操作系统课程设计 学 院 工商学院 学 部 信息科学与工程 专 业 计算机类 学 号 20144229166 姓 名 赵林华 指导教师 王煜 2016 年 6 月 24 日 装 订 线 河北大学工商学院 目目 录录 目 录 2 一 引言 1 1 11 1 课程设计目的课程设计目的 1 1 1 21 2 课程设计内容课程设计内容 1 1 1 31 3 小组人数及编程语言小组人数及编程语言 1 1 二 需求分析 2 设备管理设备管理 2 2 2 1 设计任务 2 2 2 设计要求 2 三 算法及数据结构 2 3 3 1 1 算法的总体思想 流程 算法的总体思想 流程 3 3 3 23 2 EquipmentEquipment 模块模块 3 3 3 2 13 2 1 功能功能 3 3 3 2 23 2 2 数据结构数据结构 3 3 3 33 3 cpucpu 模块模块 4 4 3 3 13 3 1 功能功能 4 4 3 3 23 3 2 数据结构数据结构 4 4 3 3 33 3 3 算法算法 5 5 3 43 4 form1form1 模块模块 5 5 3 4 13 4 1 功能功能 5 5 3 4 23 4 2 算法算法 6 6 四 程序设计及实验 6 五 总结和讨论 9 六 代 码 10 0 一 引言一 引言 1 1 课程设计目的课程设计目的 通过模拟操作系统的实现 加深对操作系统工作原理理解 进一步了解操作系统的实 现方法 并可练习合作完成系统的团队精神和提高程序设计能力 1 2 课程设计内容课程设计内容 模拟采用多道程序设计方法的单用户操作系统 该操作系统包括进程管理 存储管理 设备管理 文件管理和用户接口四部分 1 3 小组人数小组人数 小组人员 赵林华 张铭 二 需求分析二 需求分析 设备管理设备管理 设备管理设备管理主要包括设备的分配和回收 模拟系统中有鼠标 键盘 打印机和视 频四种设备 采用安全分配方式 设备采用设备状态的变化还有设备颜色的变化来判断设 备所处的状态 当创建文件是就指明了要调用的设备 让后等进程运行时来知道调用的什 么设备 最后颜色和状态的变化来反应调用的设备与每个设备所处的状态 设备用 JButton 图标显示 通过灰色和可见色判断是否被调用 2 12 1 设计任务设计任务 设计一个设备管理分配程序 按先来先服务的算法 对设备进行分配 1 2 22 2 设计要求设计要求 设备管理主要包括设备的分配和回收 1 模拟系统中有 A B C 三种独占型设备 A 设备 3 个 B 设备 2 个 C 设备 1 个 2 因为模拟系统比较小 因此只要设备表设计合理即可 3 采用先来先服务分配策略 采用设备的安全分配方式 4 屏幕显示 三 三 算法及设计结构算法及设计结构 3 13 1 算法的总体思想 流程 算法的总体思想 流程 设备管理的功能是按照设备的类型和系统采用的分配策略 为请求 I O 进程 分配一条传输信息的完整通路 合理的控制 I O 的控制过程 可最大限度的实现 CPU 与设备 设备与设备之间的并行工作 1 监视所有设备 为了能对设备实施有效的分配和控制 系统能获取设备的状 态 设备状态保存在设备控制表 DeviceTable 中 并动态的记录状态的变化及 有关信息 2 制定分配策略 按先来先服务的算法 进行设备分配 3 设备的分配 把设备分配给进程 4 设备回收 当进程运行完毕后 要释放设备 则系统必须回收 一边其他 进程使用 2 图 3 1 3 23 2 EquipmentEquipment 模块模块 3 2 13 2 1 功能功能 记录设备的状态及相关信息 检查设备是否被调用 对设备进行分配 进程结束对设备进行回收 3 2 23 2 2 数据结构数据结构 一个 DeviceTable 类 一个 DeviceTable 函数 DeviceTable 是设备分配表 说明设备的分配状况 是否被占用 Device 类说明了设备是如何使用的 每个设备是否被使用 哪 个进程在使用该设备 哪些进程在等待使用该设备 3 3 33 3 cpucpu 模块模块 3 3 13 3 1 功能功能 进程对设备的调用 当进程使用设备时 检查设备是否空闲 如果空闲 则调用该设备 如果设备正被使用 则将该进程阻塞到该设备的阻塞队列中 等 到设备空闲时 再被唤醒 调用设备 3 3 23 3 2 数据结构数据结构 一个设备的枚举类型 DeviceType 一个 cpu 函数 Cpu 函数中调用 Equipment 模块中的函数对设备进行检测 如果设备空 闲 就调用该设备 如果设备真在被使用 则该进程被阻塞到该设备的阻塞 队列中 3 3 33 3 3 算法算法 通过调用 Equipment 模块中的函数对设背进行检测 如果设备空闲 则 使用该设备 如果设备正在工作 则进程被阻塞 4 3 43 4 form1form1 模块模块 3 4 13 4 1 功能功能 界面管理 启动进程 如果要使用设备 按先来先服务的算法调用设备 此模块中 有一个设备调用函数 public int Allocate DeviceType type 根据设备的物理名调用设备 并 将信息显示显示到界面中 3 4 23 4 2 算法算法 先来先服务 FCFS First Come First Service 分配算法 每一设备有一队列管理 当多个作业或任务对同一设备提出 I O 请求时 该算法把请求的先后次序排成一个等待该设备的队列 设备分配程序把设备 分配给队列中的第一各作业 5 四 四 程序设计与实验程序设计与实验 对着目录节点点击右键可以添加执行文件 文本文件和新目录 点击新建执行文件 输入文件名称 弹出内容窗口 输入内容 然后退出保存 同时也可以用菜单栏编辑选项 点击是以后 创建成功 执行文件扩展名为 exe 此时磁盘显示占用 6 磁盘情况 这是创建文件的过程就结束了 7 Y N N N Y 执行的进程根据设备 的物理名调用设备 设备 a 是 否空闲 设备 b 是 否空闲 设备 c 是 否空闲 进程结束 回收设备 Y 将该进程放到设备 a 的阻塞队列中 将该进程放到设备 b 的阻塞队列中 将该进程放到设备 c 的阻塞队列中 图 4 1 进程调用设备 先调用 A 类设备 A 类设备一共有三个 如果有空闲的设 备 则进程就可调用 否则将进程阻塞到设备 A 的阻塞队列中 等待设备 等到 A 类设备 有空闲设备时 就唤醒该进程 在断点处继续进行程序 再调用 B 类设备 B 类设备一 共有两个 如果有空闲的设备 则进程就可调用 否则将进程阻塞到设备 B 的阻塞队列中 等待设备 等到 B 类设备有空闲设备时 就唤醒该进程 在断点处继续进行程序 最后调 用 C 类设备 C 类设备只有一个 C 设备是临界资源 如果 C 设备空闲 则进程就可调 8 用 否则将进程阻塞到设备 C 的阻塞队列中 等待设备 等到 C 设备空闲 就唤醒该进程 在断点处继续进行程序 五 总结和讨论五 总结和讨论 设备管理主要监视所有设备的状态 制定分配策略 完成设备的分配回收 合理 的控制 I O 的控制过程 最大限度的实现 CPU 与设备 设备与设备之间的把并行工作 通过对这次操作系统课程设计的亲自参与和操作 使我深刻体会到了 只要你想做只要 你想学没有弄不懂得事情 工程里面也不能不在乎细节 等等 感觉很受益匪浅 懂得了 操作系统包括的四部分内容 文件管理和用户接口 存储管理 设备管理 进程管理之间 的内在联系 加深了我对这门课程的理解 锻炼了自己在考虑全局也不是细节的能力 通 过这次实验 再一次熟悉并深入掌握了程序设计语言和界面设计 同时 我也深深体会到 了团队的重要性 如果没有同组人的互相鼓励和督促我跟本不能很快的完成任务 一滴水 的力量是有限的 但汇聚成溪流将是美丽的 虽然我们每个人的力量都是有限的 但是激 烈的讨论 相互的鼓励使我们在实践中成长 感谢和我一起面对的同伴们 因为有你们我 才变得勤奋 更感谢给予我们谆谆教导的老师 在我们犹豫困惑时给予我们指导 谢谢您 通过 java 的 Swing 编程 简单的模拟了一下操作系统 部分功能并不完善 希望在之后的 日子里可以做的更好 充分的体现的面相对象的思想 简单的通过时间片轮转的调度算法实现操作系统的进程 模块 小组成员的充分配合 分工合作共同完成一个项目的团结协作精神 9 六 代码六 代码 程序代码 using System using System 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 使用该进程块的进程名 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 开始执行的时间 10 public DeviceType NeedDevice 申请失败的设备类型 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 PCB 10 public DateTime XTTime public int XDTime 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 for int i 0 i 10 i PCBArray i ProcessID i PCBArray i Next i 1 初始化寄存器 PC 0 PSW Interrupt No PSW1 Interrupt No IR 11 初始化时间 XTTime Convert ToDateTime 00 00 00 XDTime 0 构造函数 public CPU Init region cpu类的事件和委托 申请设备的事件和委托 public class DeviceStateChangeEventArgs 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 public string processname get return processname set processname value public int needtime 12 get return needtime set needtime value public delegate void DeviceStateChangeEventHander object sender DeviceStateChangeEventArgs e public event DeviceStateChangeEventHander DeviceStateChange public 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 FinishIRHander FinishIR public delegate void ExecuteIsWhiteHander object sender EventArgs e public event ExecuteIsWhiteHander ExecuteIsWhite endregion 空闲PCB链表的操作 public int GetOneFromWhite int a White if a 10 White PCBArray a Next return a public void InsertOneToWhite int a PCBArray a Next White White a 就绪PCB链表的操作 public void InsertOneToReady int a PCBArray a Next Ready Ready a public void GetOneFromReady int a 13 int b Ready if a b Ready PCBArray a Next else while b 10 则申请失败 int a GetOneFromWhite int b if str Length 0 int sum str Length 15 16 if a 10 if ram Judge sum true 分配内存并加载到内存 14 b ram Allocate sum ram LoadContent str b 初始化PCB PCBArray a ProcessName Name PCBArray a PageAdress b PCBArray a Sum sum PCBArray a PC 0 PCBArray a IR PCBArray a DR 0 PCBArray a PSW Interrupt No PCBArray a WaitTime 10 PCBArray a Pri 1024 str Length PCBArray a ExecuteTime 0 PCBArray a NeedDevice DeviceType no PCBArray a HaveDevice DeviceType no PCBArray a GetDeviceTime 0 PCBArray a DN 1 PCBArray a BlockReason InsertOneToReady a 是否转向进程调度 int c JudgeAttemper if c 10 Attemper c else InsertOneToWhite a MessageBox Show 内存不足或文件太长 创建进程失败 消息 MessageBoxButtons OK MessageBoxIcon Error else MessageBox Show PCB块不足 创建进程失败 消息 MessageBoxButtons OK MessageBoxIcon Information 15 else MessageBox Show 文件为空 不能创建进程 错误 MessageBoxButtons OK MessageBoxIcon Error Destroy函数 撤销程序 public void Destory int a 回收内存 int p PCBArray a PageAdress int sum PCBArray a Sum ram DeAllocate p sum 回收PCB块 InsertOneToWhite a Execute 10 显示结果 BlockProcess函数 阻塞进程 public void BlockProcess int a DeviceType b int time 保护CPU现场 PCBArray a PC PC PCBArray a IR IR PCBArray a DR DR 16 判断申请设备是否成功 根据不同情况填写BlockReason项 bool d Dev JudgeDevice b if d false PCBArray a NeedDevice b PCBArray a HaveDevice DeviceType no PCBArray a BlockReason 申请 b 设备失败 PCBArray a PC PCBArray a PC 4 else PCBArray a DN Dev Allocate b PCBArray a HaveDevice b PCBArray a NeedDevice DeviceType no PCBArray a GetDeviceTime XDTime PCBArray a WaitTime time PCBArray a BlockReason 等待IO输入输出 if DeviceStateChange null DeviceStateChangeEventArgs e new DeviceStateChangeEventArgs e DN PCBArray a DN e type b e processname PCBArray a ProcessName e needtime time e Atime XDTime DeviceStateChange null e 修改进程状态 InsertOneToBlock a Execute 10 转向进程调度 int c JudgeAttemper if c 10 Attemper c 17 WakeUp函数 唤醒进程 public void WakeUp int ID DeviceType device 唤醒自己 int d Block if Block ID Block PCBArray ID Next InsertOneToReady ID else while PCBArray d Next 10 if PCBArray d Next ID PCBArray d Next PCBArray ID Next InsertOneToReady ID break d PCBArray d Next 检查第一个节点 while Block 10 Block PCBArray h Next InsertOneToReady h 检查其他节点 if Block 10 int a Block while PCBArray a Next 10 18 if PCBArray PCBArray a Next NeedDevice device int h PCBArray a Next PCBArray a Next PCBArray PCBArray a Next Next InsertOneToReady h else a PCBArray a Next int c JudgeAttemper if c 10 Attemper c 判断是否需要进行进程的调度 若需要则返回进程块号 0 9 不需要则返回10 public int JudgeAttemper 选出就绪链表中优先级最高 int k if Ready 10 int p Ready int a PCBArray Ready Pri k Ready 优先级最高的块号 while PCBArray p Next a a PCBArray PCBArray p Next Pri k PCBArray p Next p PCBArray p Next else 19 return 10 跟执行链表内的PCB块进行比较 if Execute PCBArray Execute Pri return k else return 10 else return k 进程调度函数 public void Attemper int a 保护CPU现场 if Execute 10 PCBArray Execute PC PC PCBArray Execute IR IR PCBArray Execute DR DR InsertOneToReady Execute 选择一个进程 初始化CPU中的寄存器 GetOneFromReady a Execute a PC PCBArray a PC IR PCBArray a IR 20 DR PCBArray a DR 主函数cpu public void cpu if true switch PSW case Interrupt End 写入out文件 撤销进程 进行进程调度 Destory Execute int a JudgeAttemper if a 10 Attemper a PSW Interrupt No break case Interrupt IO BlockProcess Execute type time PSW Interrupt No break default break switch PSW1 case Interrupt IO 21 int b Block while b 10 if XDTime PCBArray b GetDeviceTime 1 PCBArray b WaitTime Dev DeAllocate PCBArray b HaveDevice PCBArray b DN WakeUp b PCBArray b HaveDevice PCBArray b DN 1 PCBArray b GetDeviceTime 0 PCBArray b Hav

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论