操作系统课程设计报告

合集下载

操作系统课程设计

操作系统课程设计

操作系统课程设计一、课程目标知识目标: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. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。

计算机操作系统课程设计报告

计算机操作系统课程设计报告

计算机操作系统课程设计学院:同济大学浙江学院系(部):机械与电气信息工程系专业:计算机科学与技术姓名:学号:指导教师:构建工具:Microsoft Visual C++ 6.0实习地点:学校实习时间:2011.7.23—2011.9.1C++课程设计报告目录1.引言 (3)1.1编写目的 (3)1.2 背景说明 (3)1.3 定义 (3)1.4 参考资料 (3)2.任务概述 (3)2.1 目标 (3)2.2用户的特点 (4)2.3假定和约束 (4)3.需求分析 (5)3.1.功能需求 (5)4.总体设计 (6)5.测试报告 (7)5.1测试时间.地点和人员 (7)5.2测试环境描述 (7)5.3测试结果 (7)6.结论与心得 (7)1.引言1.1编写目的本文档将对《模拟内存模拟》软件开发需求进行描述,使专业人员了解本程序的设计思想,实现功能,便于更好地使用和维护。

1.2 背景说明本项目作为操作系统课程设计的训练项目提出。

在这次项目的设计开发过程中掌握内存管理的基本策略和算法,了解软件文档的相关标准和编写原则,训练并掌握软件各类文档写作的技巧,同时提高开发应用程序的能力。

本项目的名称:模拟内存分配本项目的提出者:贺向东本项目的开发者:同济大学浙江学院08计算机-陈佳1.3 定义模拟内存分配:展示操作系统中内存的分配过程和页面淘汰过程的平台1.4 参考资料《计算机操作系统(第2版)》作者:张海藩《软件工程导论》作者:彭民德肖健宇《Visual C++ 图形程序设计》作者:许志闻2.任务概述2.1 目标1、定义一个输入的数据格式要求和前面的作业调度和进程调度结合进行总体设计,定义一个符合模拟系统中程序运行所需要的输入数据的格式,设计模拟系统所需的数据格式2、实现存储管理2.1 分区管理分区管理要实现固定分区、可变分区两种模拟实现要求分区的分配可以直观地通过图形化的方式展示2.2 段页管理段页管理要实现段式、页式和段页式的模拟实现要求自己定义段式、页式、段页式的数据区域,结果用表格的方式实现2.3 页面置换算法页面置换算法要实现FIFO、LRU两种不同的置换要求自己定义所需的各种参数,要对算法执行的结果用表格或者图表的方式进行显示软件开发的最终目标是理解内存管理的基本策略和算法、软件文档写作规范以及了解如何在开发简单的软件,同时也希望最终产品能满足用户了解计算机内存工作方式的需求。

操作系统课程设计实验报告

操作系统课程设计实验报告

湖南科技大学计算机科学与工程学院操作系统课程设计报告学号:姓名:班级:目录实验一.........................................................一、实验题目.............................................二、实验目的.............................................三、总体设计.............................................一、实验题目二、实验目的.............................................三、总体设计.............................................四、详细设计.............................................五、实验结果与分析.......................................六、小结与心得体会.......................................实验四.........................................................一、实验题目.............................................二、实验目的.............................................三、总体设计.............................................四、详细设计.............................................三、总体设计.............................................四、详细设计.............................................五、实验结果与分析.......................................六、小结与心得体会....................................... 实验七.........................................................一、实验题目.............................................二、实验目的.............................................三、总体设计.............................................四、详细设计.............................................五、实验结果与分析.......................................2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows进程的“一生”。

操作系统课程设计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. 系统架构我们的操作系统设计采用了经典的分层结构,主要由硬件抽象层、内核和用户接口层组成。

1.硬件抽象层:负责与硬件进行交互,提供基本的底层硬件接口,如处理器管理、中断处理、设备控制等。

2.内核:实现操作系统的核心功能,包括进程管理、内存管理、文件系统管理等。

这一层是操作系统的核心,负责管理和调度系统资源。

3.用户接口层:为用户提供简单友好的界面,解析用户输入的命令并调用内核功能进行处理。

用户可以通过命令行或图形界面与操作系统进行交互。

4. 功能实现4.1 中断处理中断是操作系统与外部设备通信的重要机制,我们的操作系统设计中实现了基本的中断处理功能。

通过在硬件抽象层中捕获和处理硬件的中断信号,内核可以对中断进行相应的处理,保证系统的响应能力和稳定性。

4.2 进程调度进程调度是操作系统中的重要任务之一,它决定了系统如何分配和调度上下文切换。

我们的操作系统设计中实现了一个简单的进程调度算法,通过时间片轮转算法和优先级调度算法来管理多个进程的执行顺序,以提高系统的吞吐量和响应性能。

4.3 内存管理内存管理是操作系统中必不可少的功能,它负责对系统内存的分配和回收。

我们的操作系统设计中实现了基本的内存管理功能,包括内存分区、内存空闲管理和地址映射等。

通过合理的内存管理,可以提高系统的内存利用率和性能。

课程设计操作系统

课程设计操作系统

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

具体目标如下: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.实验设备:配置相应的实验设备,让学生动手实践,提高操作能力。

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

课程设计说明书设计题目:操作系统课程设计班级:信息学管理与信息系统2011级学号: 2姓名:克乾山东科技大学2013年12 月11 日课程设计任务书学院信息科学与工程专业信息学管理与信息系统班级2011-2 克乾一、课程设计题目:操作系统课程设计二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育. 2007.3. (2)c++面向对象程序设计电子工业(3)计算机操作系统(第三版)电子科技大学三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现(2)死锁相关算法的实现(3)磁盘调度算法的实现四、课程设计相关附件(如:图纸、软件等):(1)程序源代码(2)五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1指导教师签字:指导教师对课程设计的评语成绩:指导教师签字:年月日设计1 CPU调度算法的模拟实现一、设计目的利用C++编写CPU调度算法,实现先来先服务调度算法FCFS、优先级调度算法PS、短作业优先调度算法SJF、时间片轮转调度算法RR的运行过程和实现的结果,针对模拟进程,利用编写的CPU调度算法对需要运行的进程进行调度。

进行算法评价,计算平均周转时间和平均等待时间。

二、设计要求针对模拟进程,利用CPU调度算法进行调度,最后要进行算法评价,计算平均周转时间和平均等待时间,并且输出调度结果和输出算法评价指标。

调度所需的进程参数由输入产生(手工输入或者随机数产生)。

三、设计说明时间片轮转算法需要输入相应的时间片,所以独立编写一个程序,系统主体结构如下:实现的结构体如下:struct task_struct{char name[10]; /*进程名称*/int number; /*进程编号*/float come_time; /*到达时间*/float run_begin_time; /*开始运行时间*/float run_time; /*运行时间*/float run_end_time; /*运行结束时间*/int priority; /*优先级*/int order; /*运行次序*/int run_flag; /*调度标志*/}tasks[MAX];运用switch语句对输入的进程进行相应的算法运行,进入相应的算法函数后会对进程进行调度并输出结果,并对结果进行评估。

1.先来先服务算法(FCFS)可用于作业调度,也可用于进程调度。

每次调度都是从后备队列中选择一个或者多个最先进入队列的作业或进程,将他们调入存进行分配资源,创建进程,放入就绪队列并开始执行。

实现函数:int fcfs() /*先来先服务*/ 主要实现方法如下:2. 短作业优先调度算法(SJF ),即从后备队列中选择一个或几个估计运行时间最短的作业或进程对其分配资源,并进行调度执行。

实现函数:int sjf() /*短作业优先*/主要实现方法如下:3. 优先级调度算法即在将第一个到达的进程执行完毕后,会在此刻已经到达的进程或作业中选择优先权最高的一个或者几个进程对其进行资源分配并创建进程执行。

实现函数:int ps() /*优先级调度*/主要实现方法如下:4. 在时间片调度算法的模拟实现中,时间片就是分配给进程运行的一段时间。

在轮转法中,系统将所有的可运行(即就绪)进程按先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。

当某进程执行的时间片用完时,系统发出信号,通知调度程序,调度程序便据此信号来停止该进程的执行,并将刚运行的进程送到运行队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

这样就可以保证运行队列中的所有进程,在一个给定的时间,均能获得一时间片的处理机执行时间。

实现函数(单独程序)主要实现方法如下:四、运行结果及分析设有如下3个进程:进程名称到达时间运行时间优先级A 4 5 3B 6 10 1C 5 8 2 注:"优先级"一栏,数字大的表示优先级越高。

根据本例来运行本算法,结果如下:采用先来先服务算法:采用优先级调度:采用短作业优先:时间片轮转算法:本程序已通过测试阶段,未出现进程调度错误情况。

运行程序后,只需按照提示输入相应的进程的信息(进程名尽量输入单个字母)后选择需要的调度算法即可得出相应结果,并且可以循环运行多次。

后期进行相应的美化加工,如需要,可进行可视化改造。

结果分析:对于进程调度后得出的各项数据基本准确,当输入时间或其他数据信息出现精确度较高的数值时可能会出现一些误差,属于误差围之。

程序基本可以实现CPU调度算法的过程解释。

五、总结通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。

在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。

六.附录(完整代码)#include<iostream>using namespace std;#define MAX 10struct task_struct{char name[10]; /*进程名称*/int number; /*进程编号*/float come_time; /*到达时间*/float run_begin_time; /*开始运行时间*/float run_time; /*运行时间*/float run_end_time; /*运行结束时间*/int priority; /*优先级*/int order; /*运行次序*/int run_flag; /*调度标志*/}tasks[MAX];int counter; /*实际进程个数*/int fcfs(); /*先来先服务*/int ps(); /*优先级调度*/int sjf(); /*短作业优先*/int hrrn(); /*响应比高优先*/int pinput(); /*进程参数输入*/int poutput(); /*调度结果输出*/int main(){int option;pinput();printf("请选择调度算法(0~4):\n");printf("1.先来先服务\n");printf("2.优先级调度\n");printf("3.短作业优先\n");printf("0.退出\n");scanf("%d",&option);switch (option){case 0:printf("运行结束。

\n");break;case 1:printf("对进程按先来先服务调度。

\n\n");fcfs();break;case 2:printf("对进程按优先级调度。

\n\n");ps();break;case 3:printf("对进程按短作业优先调度。

\n\n");sjf();break;}}int fcfs() /*先来先服务*/{float time_temp=0;int i;int number_schedul;time_temp=tasks[0].come_time;for(i=0;i<counter;i++){tasks[i].run_begin_time=time_temp;tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time;tasks[i].run_flag=1;time_temp=tasks[i].run_end_time;number_schedul=i;tasks[number_schedul].order=i+1;}poutput();return main();}int ps() /*优先级调度*/{float temp_time=0;int i=0,j;int number_schedul,temp_counter;int max_priority;max_priority=tasks[i].priority;j=1;while ((j<counter)&&(tasks[i].come_time==tasks[j].come_time)) {if (tasks[j].priority>tasks[i].priority){max_priority=tasks[j].priority;i=j;}j++;}/*查找第一个被调度的进程*//*对第一个被调度的进程求相应的参数*/number_schedul=i;tasks[number_schedul].run_begin_time=tasks[number_schedul].c ome_time;tasks[number_schedul].run_end_time=tasks[number_schedul].run_ begin_time+tasks[number_schedul].run_time;tasks[number_schedul].run_flag=1;temp_time=tasks[number_schedul].run_end_time;tasks[number_schedul].order=1;temp_counter=1;while (temp_counter<counter){max_priority=0;for(j=0;j<counter;j++){if((tasks[j].come_time<=temp_time)&&(!tasks[j].run_flag))if (tasks[j].priority>max_priority){max_priority=tasks[j].priority;number_schedul=j;}}/*查找下一个被调度的进程*//*对找到的下一个被调度的进程求相应的参数*/tasks[number_schedul].run_begin_time=temp_time;tasks[number_schedul].run_end_time=tasks[number_schedul].run_ begin_time+tasks[number_schedul].run_time;tasks[number_schedul].run_flag=1;temp_time=tasks[number_schedul].run_end_time;temp_counter++;tasks[number_schedul].order=temp_counter;}poutput();return main();}int sjf() /*短作业优先*/{float temp_time=0;int i=0,j;int number_schedul,temp_counter;float run_time;run_time=tasks[i].run_time;j=1;while ((j<counter)&&(tasks[i].come_time==tasks[j].come_time)) {if (tasks[j].run_time<tasks[i].run_time){run_time=tasks[j].run_time;i=j;}j++;} /*查找第一个被调度的进程*//*对第一个被调度的进程求相应的参数*/number_schedul=i;tasks[number_schedul].run_begin_time=tasks[number_schedul].c ome_time;tasks[number_schedul].run_end_time=tasks[number_schedul].run_ begin_time+tasks[number_schedul].run_time;tasks[number_schedul].run_flag=1;temp_time=tasks[number_schedul].run_end_time;tasks[number_schedul].order=1;temp_counter=1;while (temp_counter<counter){for(j=0;j<counter;j++){if((tasks[j].come_time<=temp_time)&&(!tasks[j].run_flag)){run_time=tasks[j].run_time;number_schedul=j;break;}}for(j=0;j<counter;j++){if((tasks[j].come_time<=temp_time)&&(!tasks[j].run_flag))if(tasks[j].run_time<run_time){run_time=tasks[j].run_time;number_schedul=j;}}/*查找下一个被调度的进程*//*对找到的下一个被调度的进程求相应的参数*/tasks[number_schedul].run_begin_time=temp_time;tasks[number_schedul].run_end_time=tasks[number_schedul].run_ begin_time+tasks[number_schedul].run_time;tasks[number_schedul].run_flag=1;temp_time=tasks[number_schedul].run_end_time;temp_counter++;tasks[number_schedul].order=temp_counter;}poutput();return main();}int pinput() /*进程参数输入*/{int i;printf("please input the process counter:\n"); scanf("%d",&counter);if(counter==0)return 0;else{for(i=0;i<counter;i++){ printf("******************************************\n");printf("please input the process of %d th :\n",i+1);printf("please input the name:\n");scanf("%s",tasks[i].name);printf("please input the come_time:\n");scanf("%f",&tasks[i].come_time);printf("please input the run_time:\n");scanf("%f",&tasks[i].run_time);printf("please input the priority:\n");scanf("%d",&tasks[i].priority);tasks[i].run_begin_time=0;tasks[i].run_end_time=0;tasks[i].order=0;tasks[i].run_flag=0;}}return 0;}int poutput() /*调度结果输出*/{int i;float turn_round_time=0,f1,w=0;printf("name come_time run_time run_begin_time run_end_time priority order turn_round_time\n");for(i=0;i<counter;i++){f1=tasks[i].run_end_time-tasks[i].come_time;turn_round_time+=f1;w+=(f1/tasks[i].run_time);printf(" %s, %5.3f, %5.3f, %5.3f, %5.3f, %d, %d, %5.3f\n",tasks[i].name,tasks[i].come_time,tasks[i].run _time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks[i].priority,t asks[i].order,f1);}printf("average_turn_round_timer=%5.2f\n",turn_round_time/count er);printf("weight_average_turn_round_timer=%5.2f\n",w/counter); return 0;}#include <stdio.h>#include <stdlib.h>#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n")typedef struct PCB{int ID;int ReachTime;int TotalTime;}PCB; //进程号,到达时间和服务时间typedef struct NOTE //备份{int TotalTime;}NOTE;PCB A[100]; //5个进程PCB a[100];NOTE temp;int queue[50]; //记录调度的进程int K=0; //调度进程数组的标识void INIT(int M)//初始化{int i;int m;m=M;for(i=0;i<m;i++){A[i].ID=-1;}}int GetNum(int M)//计算进程数{int m;m=M;int i;int j=0;for(i=0;i<m;i++){if(A[i].ID!=-1){j++;}}return j;}int GetReach(int time,int M)//找出到达进程号{int i;int m;m=M;for(i=0;i<m;i++){if(a[i].ReachTime<=time)a[i].ReachTime=100;return i;}}return -1;}int GetInsert(int M)//找出插入位置{int i;int m;m=M;for(i=0;i<m;i++){if(A[i].ID==-1)return i;}return -1;}void Forward(int num)//前移{int i;for(i=0;i<num-1;i++){A[i].ID=A[i+1].ID;A[i].TotalTime=A[i+1].TotalTime;}A[num-1].ID=-1;}void Process(int Jiange)//执行进程{int jiange;jiange=Jiange;queue[K]=A[0].ID;K++;A[0].TotalTime=A[0].TotalTime+jiange;temp.ID=A[0].ID;temp.TotalTime=A[0].TotalTime; }int main(){int i;int time;int t=0;int reach;int insert;int num;int M;int Jiange;printf("RR算法\n\n");printf("请输入进程个数\n");scanf("%d",&M);printf("请输入R值\n");scanf("%d",&Jiange);INIT(M);for(i=0;i<M;i++){printf("请输入进程ID:");scanf("%d",&a[i].ID);printf("请输入到达时间:");scanf("%d",&a[i].ReachTime);printf("请输入服务时间:");scanf("%d",&a[i].TotalTime);}for(i=0;i<M;i++)//运行时间{t=t+a[i].TotalTime;}for(i=0;i<50;i++)//初始化{queue[i]=-1;}for(time=0;time<=t;time++){reach=GetReach(time,M);if(reach!=-1)//有进程到达{insert=GetInsert(M);A[insert].ID=a[reach].ID;A[insert].TotalTime=a[reach].TotalTime;num=GetNum(M);if(num==1)continue;//进程数为1else{//进程数不为1Process(Jiange);Forward(num);if(temp.TotalTime!=0){A[num-1].ID=temp.ID;A[num-1].TotalTime=temp.TotalTime;}}}else//没有进程到达{num=GetNum(M);if(num==1){//进程数为1Process(Jiange);if(temp.TotalTime==0){A[0].ID=-1;}}else if(num==0)continue;//进程数为0else{Process(Jiange);Forward(num);if(temp.TotalTime!=0){A[num-1].ID=temp.ID;A[num-1].TotalTime=temp.TotalTime;}}}}printf("\n");printf("调度顺序为:\n");Myprintf;for(i=0;i<50;i++){if(queue[i]!=-1)printf("|%2d ",queue[i]);}printf("|\n");Myprintf;printf("\n");return 0;}设计2 死锁相关算法的实现一、设计目的编写算法,实现银行家算法、安全性算法、死锁检测算法判断系统安全状态、判断进程的资源请否可以被满足、判定系统是否为死锁状态。

相关文档
最新文档