操作系统课程设计

合集下载

操作系统课程设计

操作系统课程设计

操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型和结构,掌握操作系统的五大核心功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口);2. 掌握操作系统的发展历程、主要操作系统(如Windows、Linux、Mac OS)的特点及应用场景;3. 了解操作系统的设计与实现原理,包括进程管理、内存管理、设备管理、文件系统等关键技术;4. 学会使用操作系统提供的命令行或图形界面进行基本的系统操作与维护。

技能目标:1. 培养学生对操作系统的实际操作能力,能够熟练使用至少一种操作系统进行日常管理与维护;2. 培养学生运用操作系统原理解决实际问题的能力,如分析系统性能、诊断故障、优化配置等;3. 提高学生的编程能力,使其能够编写简单的系统程序或脚本,实现特定功能。

情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学生学习计算机科学的热情;2. 培养学生的团队合作意识,使其在讨论、分析、解决问题的过程中学会倾听、交流、协作;3. 培养学生具备良好的信息素养,关注操作系统领域的最新发展,增强信息安全意识。

课程性质:本课程为计算机科学与技术专业(或相关领域)的必修课,具有较强的理论性和实践性。

学生特点:学生已具备一定的计算机基础知识,具有较强的学习兴趣和动手能力,但可能对操作系统原理的理解和应用尚有不足。

教学要求:注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,注重培养学生的实际操作能力和问题解决能力。

通过本课程的学习,使学生能够掌握操作系统的基本原理,提高实际应用水平,为后续专业课程学习打下坚实基础。

二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型,比较不同操作系统的特点,分析操作系统的发展趋势。

教材章节:第一章 操作系统概述2. 进程与线程管理:讲解进程与线程的概念、状态与转换,进程调度算法,同步与互斥,死锁与饥饿问题。

教材章节:第二章 进程管理3. 存储管理:介绍内存分配与回收策略,虚拟内存技术,页面置换算法,内存保护机制。

《操作系统》课程设计

《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。

技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。

情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。

课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。

学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。

在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。

二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。

- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。

- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。

- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。

操作系统课程设计pintos

操作系统课程设计pintos

操作系统课程设计pintos一、教学目标本课程的目标是让学生了解和掌握操作系统的基本原理和概念,通过学习Pintos操作系统,使学生能够理解操作系统的核心机制,包括进程管理、内存管理、文件系统和输入/输出系统等。

在技能方面,学生应能够使用Pintos进行简单的操作系统设计和实现,提升编程能力和系统分析能力。

在情感态度价值观方面,学生应培养对计算机科学和操作系统的兴趣,增强解决实际问题的责任感和使命感。

二、教学内容教学内容将按照Pintos操作系统的结构和功能进行,包括:1. 操作系统的概述和基本概念;2. 进程管理,包括进程的创建、调度和同步;3. 内存管理,包括物理内存管理和虚拟内存管理;4. 文件系统,包括文件和目录的、文件系统的实现;5. 输入/输出系统,包括设备驱动程序和中断处理。

三、教学方法为了激发学生的学习兴趣和主动性,将采用多种教学方法,包括:1. 讲授法,用于讲解操作系统的原理和概念;2. 讨论法,用于讨论操作系统的实现和应用;3. 案例分析法,通过分析具体的操作系统案例,让学生理解操作系统的实际应用;4. 实验法,通过实验操作,让学生亲手实现操作系统的核心机制。

四、教学资源教学资源包括:1. Pintos操作系统的教材和相关参考书;2. 多媒体资料,包括操作系统的教学视频和PPT;3. 实验设备,包括计算机和相关的硬件设备。

这些教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。

五、教学评估教学评估将采用多种方式进行,以全面、客观、公正地评价学生的学习成果。

评估方式包括:1. 平时表现,包括课堂参与、提问和讨论等,占总评的20%;2.作业,包括理论和实践作业,占总评的30%;3. 考试,包括期中考试和期末考试,占总评的50%。

考试内容将涵盖操作系统的原理、概念和实验操作。

六、教学安排教学安排将根据课程内容和学生的实际情况进行设计。

本课程计划在一个学期内完成,每周安排2次课时,每次课时1小时。

操作系统课程设计Linux

操作系统课程设计Linux

操作系统课程设计Linux一、教学目标本课程的教学目标是使学生掌握Linux操作系统的核心概念、原理和应用技能。

通过本课程的学习,学生将能够:1.理解操作系统的基本原理,包括进程管理、内存管理、文件系统和输入/输出系统。

2.掌握Linux操作系统的安装、配置和管理方法。

3.熟练使用Linux命令行界面,进行日常操作和系统管理。

4.掌握Linux常用命令、 shell脚本编写和系统监控工具的使用。

5.了解Linux操作系统在服务器、嵌入式设备和云计算等领域的应用。

二、教学内容本课程的教学内容分为五个部分:1.操作系统概述:介绍操作系统的定义、功能和分类,以及Linux操作系统的历史和发展。

2.进程管理:讲解进程的基本概念、进程控制、进程同步和互斥、死锁及其解决方法。

3.内存管理:介绍内存分配与回收策略、内存保护、虚拟内存和分页分段机制。

4.文件系统:讲解文件和目录结构、文件访问控制、文件系统性能优化和磁盘空间分配策略。

5.输入/输出系统:介绍I/O设备管理、中断和DMA机制、设备驱动程序和I/O调度策略。

三、教学方法本课程采用多种教学方法相结合的方式,以提高学生的学习兴趣和主动性:1.讲授法:教师讲解操作系统的核心概念和原理,引导学生掌握基本知识。

2.讨论法:学生针对实际案例和问题进行讨论,培养学生的思考和分析能力。

3.案例分析法:分析Linux操作系统的实际应用案例,使学生了解操作系统的应用场景。

4.实验法:安排实验室课时,让学生亲自动手进行系统安装、配置和调试,提高学生的实践能力。

四、教学资源本课程的教学资源包括:1.教材:选用权威、实用的Linux操作系统教材,如《Linux操作系统原理与应用》。

2.参考书:提供相关的学术论文、技术博客和在线文档,供学生拓展阅读。

3.多媒体资料:制作课件、教学视频和演示文稿,辅助学生理解和记忆。

4.实验设备:提供Linux服务器、虚拟机和实验室环境,让学生进行实际操作。

操作系统-课程设计

操作系统-课程设计

操作系统-课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型及发展历程;2. 掌握操作系统的五大功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口)的工作原理;3. 了解操作系统的安全性、稳定性和性能评价标准;4. 熟悉至少一种主流操作系统(如Windows、Linux)的安装、配置及使用。

技能目标:1. 能够使用操作系统基本命令进行文件管理、系统监控等操作;2. 学会编写简单的批处理脚本,实现自动化操作;3. 掌握操作系统设置、优化及故障排除的基本方法;4. 能够分析操作系统的性能问题,并提出合理的解决方案。

情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会在团队中共同解决问题;3. 增强学生的信息安全意识,遵守网络道德规范,尊重知识产权;4. 培养学生的创新意识,敢于尝试新事物,勇于克服困难。

课程性质:本课程为信息技术学科,结合学生年级特点,注重理论与实践相结合,培养学生的实际操作能力。

学生特点:学生具备一定的计算机操作基础,对操作系统有一定了解,但深入理解不足,需要通过课程学习提高认识。

教学要求:以学生为主体,教师为主导,注重启发式教学,引导学生主动探究,提高学生的实践操作能力。

通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续相关课程的学习打下坚实基础。

二、教学内容1. 操作系统的基本概念:介绍操作系统的定义、功能、类型及发展历程,对应教材第一章内容。

2. 操作系统五大功能模块:- 处理器管理:讲解处理器分配、调度算法等,对应教材第二章;- 存储器管理:介绍内存分配、回收、地址映射等,对应教材第三章;- 设备管理:阐述设备分配、I/O调度、缓冲管理等,对应教材第四章;- 文件管理:讲解文件系统结构、文件存储、目录管理等,对应教材第五章;- 用户接口:介绍命令行接口、图形用户接口等,对应教材第六章。

课程设计操作系统

课程设计操作系统

课程设计操作系统一、教学目标本课程旨在让学生掌握操作系统的基本原理和概念,了解操作系统的运行机制和功能,培养学生运用操作系统知识解决实际问题的能力。

具体目标如下:1.知识目标:(1)理解操作系统的基本概念、功能和作用;(2)掌握操作系统的运行机制,包括进程管理、内存管理、文件管理和设备管理;(3)了解操作系统的发展历程和主流操作系统的基本特点。

2.技能目标:(1)能够运用操作系统知识分析和解决实际问题;(2)具备基本的操作系统使用和维护能力;(3)掌握操作系统的基本配置和优化方法。

3.情感态度价值观目标:(1)培养学生对操作系统知识的兴趣和好奇心;(2)树立正确的计算机使用观念,提高信息素养;(3)培养学生团队协作、创新思考和持续学习的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.操作系统概述:介绍操作系统的定义、功能、作用和分类;2.进程管理:讲解进程的概念、进程控制、进程同步与互斥、死锁等问题;3.内存管理:讲解内存分配与回收策略、虚拟内存、页面置换算法等;4.文件管理:讲解文件和目录的概念、文件存储结构、文件访问控制、磁盘空间分配等;5.设备管理:讲解设备驱动程序、I/O调度策略、中断处理和DMA传输等;6.操作系统实例分析:分析主流操作系统(如Windows、Linux)的基本特点和运行机制。

三、教学方法本课程采用多种教学方法相结合,以提高学生的学习兴趣和主动性:1.讲授法:讲解操作系统的基本概念、原理和知识点;2.讨论法:学生针对操作系统相关问题进行讨论,培养学生的思维能力和团队协作精神;3.案例分析法:分析实际案例,让学生了解操作系统在实际应用中的作用和意义;4.实验法:安排实验课程,让学生动手实践,巩固所学知识。

四、教学资源为实现课程目标,我们将采用以下教学资源:1.教材:选用权威、实用的操作系统教材,为学生提供系统、全面的知识体系;2.参考书:提供相关领域的参考书籍,拓展学生的知识视野;3.多媒体资料:制作精美的PPT课件,辅助讲解和展示操作系统的相关概念和实例;4.实验设备:配置相应的实验设备,让学生动手实践,提高操作能力。

UCOSII操作系统课程设计

UCOSII操作系统课程设计

UCOSII操作系统课程设计一、课程目标知识目标:1. 理解UCOSII操作系统的基本原理和核心概念,包括任务管理、时间管理、通信与同步机制;2. 掌握UCOSII的移植方法和配置过程,学会在不同硬件平台上搭建UCOSII 操作系统环境;3. 学会使用UCOSII提供的API进行多任务编程,了解实时操作系统的任务调度和资源管理策略。

技能目标:1. 能够运用C语言在UCOSII环境下编写多任务应用程序,实现任务间的同步与通信;2. 能够分析并解决实际嵌入式系统开发中与操作系统相关的问题,提高系统稳定性和可靠性;3. 掌握UCOSII调试技巧,能够运用调试工具对操作系统运行状态进行跟踪和分析。

情感态度价值观目标:1. 培养学生对操作系统知识的好奇心和探索精神,激发学习兴趣和热情;2. 培养学生具备良好的团队合作精神和沟通能力,提高解决实际问题的能力;3. 增强学生的创新意识,鼓励他们在实际项目中积极尝试和应用所学知识。

课程性质:本课程为高年级专业课,以实际应用为导向,注重理论与实践相结合。

学生特点:学生已具备一定的C语言编程基础和嵌入式系统知识,具有较强的学习能力和实践能力。

教学要求:教师需采用项目驱动教学法,引导学生通过实际案例掌握UCOSII 操作系统的应用与开发。

在教学过程中,关注学生的个体差异,提供个性化指导,确保课程目标的实现。

同时,注重培养学生的自主学习能力和创新能力,为将来的职业发展打下坚实基础。

二、教学内容1. UCOSII操作系统概述:介绍实时操作系统的基本概念、特点及应用场景,引出UCOSII的背景、架构和优势。

教材章节:第一章 实时操作系统概述2. UCOSII内核原理:讲解UCOSII的核心组件,包括任务管理、时间管理、通信与同步机制等。

教材章节:第二章 UCOSII内核原理3. UCOSII移植与配置:介绍在不同硬件平台上移植和配置UCOSII的方法,以实际案例为例进行讲解。

操作系统内核课程设计

操作系统内核课程设计

操作系统内核课程设计一、课程目标知识目标:1. 让学生理解操作系统内核的基本概念、结构和功能,掌握操作系统的进程管理、内存管理、文件系统等核心模块的工作原理。

2. 使学生掌握操作系统内核编程的基本方法,学会使用相关工具和接口进行系统调用和驱动程序开发。

3. 帮助学生了解操作系统安全性、稳定性的重要性,掌握基本的系统调试和优化技巧。

技能目标:1. 培养学生具备分析操作系统内核源代码的能力,能够阅读和理解常见的操作系统内核模块。

2. 培养学生具备设计、编写和调试简单的操作系统内核模块的能力,能够实现特定功能并进行性能优化。

3. 提高学生运用所学知识解决实际问题的能力,能够针对具体场景提出合理的操作系统内核设计方案。

情感态度价值观目标:1. 培养学生热爱操作系统内核技术,树立积极探索、持续学习的信念。

2. 培养学生的团队协作意识,学会与他人共同分析问题、解决问题,形成良好的沟通与协作能力。

3. 引导学生关注操作系统内核技术的发展趋势,认识到技术进步对社会发展的重要性,树立社会责任感。

本课程针对高年级学生,课程性质为专业核心课。

在教学过程中,需充分考虑学生的认知特点,注重理论与实践相结合,引导学生主动探究、动手实践。

通过本课程的学习,期望学生能够掌握操作系统内核的基本知识和技能,为未来从事相关领域的研究和工作打下坚实基础。

二、教学内容本课程教学内容围绕以下三个方面展开:1. 操作系统内核基础理论- 深入讲解操作系统内核的基本概念、结构、功能和设计原理。

- 分析进程管理、内存管理、文件系统、设备管理等核心模块的工作机制。

2. 操作系统内核编程实践- 介绍操作系统内核编程的基本方法,包括系统调用、驱动程序开发等。

- 结合教材示例,指导学生阅读和分析操作系统内核源代码。

教学大纲安排:1)第1-4周:操作系统内核基础理论2)第5-8周:进程管理、内存管理编程实践3)第9-12周:文件系统、设备管理编程实践3. 操作系统内核优化与调试- 讲解操作系统内核安全性、稳定性方面的知识,分析常见漏洞和防护措施。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计题目: 操作系统课程设计学 院 工商学院 学 部 信息科学与工程专 业 计算机类学 号 20144229166姓 名 赵林华指导教师 王煜2016 年 6 月 24 日装订线 河北大学工商学院目录目录 (2)一、引言 (1)1.1课程设计目的 (1)1.2课程设计内容 (1)1.3小组人数及编程语言 (1)二、需求分析 (1)设备管理 (2)2.1设计任务 (2)2.2设计要求 (2)三算法及数据结构 (2)3.1算法的总体思想(流程) (3)3.2 Equipment模块 (3)3.2.1 功能 (3)3.2.2 数据结构 (3)3.3 cpu模块 (4)3.3.1 功能 (4)3.3.2 数据结构 (4)3.3.3 算法 (5)3.4 form1模块 (5)3.4.1 功能 (5)3.4.2 算法 (6)四、程序设计及实验 (6)五、总结和讨论 (9)六、代码 (10)一、引言1.1课程设计目的通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。

1.2课程设计内容模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。

1.3小组人数小组人员:赵林华张铭二、需求分析设备管理设备管理设备管理主要包括设备的分配和回收。

模拟系统中有鼠标、键盘、打印机和视频四种设备,采用安全分配方式。

设备采用设备状态的变化还有设备颜色的变化来判断设备所处的状态,当创建文件是就指明了要调用的设备,让后等进程运行时来知道调用的什么设备,最后颜色和状态的变化来反应调用的设备与每个设备所处的状态。

设备用JButton图标显示,通过灰色和可见色判断是否被调用2.1设计任务设计一个设备管理分配程序,按先来先服务的算法,对设备进行分配。

2.2设计要求设备管理主要包括设备的分配和回收。

(1)模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。

(2)因为模拟系统比较小,因此只要设备表设计合理即可。

(3)采用先来先服务分配策略,采用设备的安全分配方式。

(4)屏幕显示三、算法及设计结构3.1算法的总体思想(流程)设备管理的功能是按照设备的类型和系统采用的分配策略,为请求I/O进程分配一条传输信息的完整通路。

合理的控制I/O的控制过程,可最大限度的实现CPU与设备、设备与设备之间的并行工作。

1.监视所有设备。

为了能对设备实施有效的分配和控制,系统能获取设备的状态。

设备状态保存在设备控制表(DeviceTable)中,并动态的记录状态的变化及有关信息。

2.制定分配策略。

按先来先服务的算法,进行设备分配。

3.设备的分配。

把设备分配给进程。

4.设备回收。

当进程运行完毕后,要释放设备,则系统必须回收,一边其他进程使用。

图3.13.2 Equipment模块3.2.1 功能记录设备的状态及相关信息检查设备是否被调用对设备进行分配进程结束对设备进行回收3.2.2 数据结构一个DeviceTable类、一个DeviceTable函数。

DeviceTable是设备分配表,说明设备的分配状况,是否被占用。

Device类说明了设备是如何使用的。

每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。

3.3 cpu模块3.3.1 功能进程对设备的调用,当进程使用设备时,检查设备是否空闲。

如果空闲,则调用该设备;如果设备正被使用,则将该进程阻塞到该设备的阻塞队列中,等到设备空闲时,再被唤醒,调用设备。

3.3.2 数据结构一个设备的枚举类型DeviceType,一个cpu函数。

Cpu函数中调用Equipment模块中的函数对设备进行检测。

如果设备空闲,就调用该设备;如果设备真在被使用,则该进程被阻塞到该设备的阻塞队列中。

3.3.3 算法通过调用Equipment模块中的函数对设背进行检测:如果设备空闲,则使用该设备;如果设备正在工作,则进程被阻塞。

3.4 form1模块3.4.1 功能界面管理启动进程,如果要使用设备,按先来先服务的算法调用设备。

此模块中有一个设备调用函数public int Allocate(DeviceType type),根据设备的物理名调用设备,并将信息显示显示到界面中。

3.4.2 算法先来先服务(FCFS, First Come First Service)分配算法:每一设备有一队列管理,当多个作业或任务对同一设备提出I/O请求时,该算法把请求的先后次序排成一个等待该设备的队列,设备分配程序把设备分配给队列中的第一各作业。

四、程序设计与实验对着目录节点点击右键可以添加执行文件,文本文件和新目录点击新建执行文件,输入文件名称弹出内容窗口,输入内容,然后退出保存,同时也可以用菜单栏编辑选项点击是以后,创建成功,执行文件扩展名为.exe,此时磁盘显示占用:磁盘情况这是创建文件的过程就结束了。

图4-1进程调用设备。

先调用A类设备,A类设备一共有三个,如果有空闲的设备,则进程就可调用;否则将进程阻塞到设备A的阻塞队列中,等待设备,等到A类设备有空闲设备时,就唤醒该进程,在断点处继续进行程序。

再调用B类设备,B类设备一共有两个,如果有空闲的设备,则进程就可调用;否则将进程阻塞到设备B的阻塞队列中,等待设备,等到B类设备有空闲设备时,就唤醒该进程,在断点处继续进行程序。

最后调用C 类设备,C类设备只有一个,C设备是临界资源,如果C设备空闲,则进程就可调用;否则将进程阻塞到设备C的阻塞队列中,等待设备,等到C设备空闲,就唤醒该进程,在断点处继续进行程序。

五、总结和讨论设备管理主要监视所有设备的状态,制定分配策略,完成设备的分配回收,合理的控制I/O的控制过程,最大限度的实现CPU与设备、设备与设备之间的把并行工作。

通过对这次操作系统课程设计的亲自参与和操作,使我深刻体会到了:只要你想做只要你想学没有弄不懂得事情,工程里面也不能不在乎细节,等等。

感觉很受益匪浅。

懂得了操作系统包括的四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理之间的内在联系。

加深了我对这门课程的理解。

锻炼了自己在考虑全局也不是细节的能力。

通过这次实验,再一次熟悉并深入掌握了程序设计语言和界面设计。

同时,我也深深体会到了团队的重要性,如果没有同组人的互相鼓励和督促我跟本不能很快的完成任务。

一滴水的力量是有限的,但汇聚成溪流将是美丽的。

虽然我们每个人的力量都是有限的,但是激烈的讨论、相互的鼓励使我们在实践中成长。

感谢和我一起面对的同伴们,因为有你们我才变得勤奋。

更感谢给予我们谆谆教导的老师,在我们犹豫困惑时给予我们指导,谢谢您!通过java的Swing编程,简单的模拟了一下操作系统,部分功能并不完善,希望在之后的日子里可以做的更好;充分的体现的面相对象的思想,简单的通过时间片轮转的调度算法实现操作系统的进程模块小组成员的充分配合,分工合作共同完成一个项目的团结协作精神六、代码程序代码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; //开始执行的时间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 = "";////初始化时间//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{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){int b = Ready;if (a == b){Ready = PCBArray[a].Next;}else{while (b < 10){if (PCBArray[b].Next == a){PCBArray[b].Next = PCBArray[PCBArray[b].Next].Next; }b = PCBArray[b].Next;}}}////阻塞PCB链表的操作//public void InsertOneToBlock(int a){PCBArray[a].Next = Block;Block = a;}////Creat函数,创建进程//public void Creat(string Name,string str){////申请PCB,a>10,则申请失败//int a = GetOneFromWhite();int b;if (str.Length > 0){int sum = (str.Length + 15) / 16;if (a < 10){if (ram.Judge(sum) == true){////分配内存并加载到内存//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, rmation);}}{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;////判断申请设备是否成功,根据不同情况填写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);}}////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&&PCBArray[Block].NeedDevice == device){int h = Block;Block = PCBArray[h].Next;InsertOneToReady(h);}////检查其他节点//if(Block<10){int a = Block;while (PCBArray[a].Next < 10){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 < 10){if (PCBArray[PCBArray[p].Next].Pri > a){a = PCBArray[PCBArray[p].Next].Pri;k = PCBArray[p].Next;}p = PCBArray[p].Next;}}else{return 10;}////跟执行链表内的PCB块进行比较//if (Execute < 10){if (PCBArray[k].Pri > 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;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:{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].HaveDevice = DeviceType.no;PCBArray[b].WaitTime = -10;}b = PCBArray[b].Next;}PSW1 = Interrupt.No;break;}default:{break;}}if (Execute < 10){IR = ram.SendToIR(PCBArray[Execute].PageAdress, PC);PC = PC + 4;bool str = ram.JudgeIR(IR);if (str == true){switch (IR[1]){case'=':{DR = Convert.ToInt32(IR[2].ToString());break;}case'+':{DR++;break;}case'-':{DR--;break;}case'a':case'A':{type=DeviceType.a;time=Convert.ToInt32(IR[2].ToString()); PSW = Interrupt.IO;break;}case'b':case'B':{type = DeviceType.b;time = Convert.ToInt32(IR[2].ToString());PSW = Interrupt.IO;break;}case'c':case'C':{type = DeviceType.c;time = Convert.ToInt32(IR[2].ToString());PSW = Interrupt.IO;break;}case'n':{PSW = Interrupt.End;break;}}PCBArray[Execute].ExecuteTime++;if (FinishIR != null){EventArgs e = new EventArgs();FinishIR(null, e);}}else{Destory(Execute);int b = JudgeAttemper();if (b < 10){Attemper(b);}if (ErrorIR != null){EventArgs e = new EventArgs();ErrorIR(null,e);}}}else{////do nothing//if (this.ExecuteIsWhite != null){EventArgs e = new EventArgs();ExecuteIsWhite(null,e);}}int k = Block;while (k < 10){if (XDTime - PCBArray[k].GetDeviceTime == PCBArray[k].WaitTime) {PSW1 = Interrupt.IO;}k = PCBArray[k].Next;}if (QueueChange != null){EventArgs e = new EventArgs();QueueChange(null, e);}XDTime++;IR = "";}}}}。

相关文档
最新文档