43316341操作系统课程设计指导书113301-113302
操作系统课程设计任务书

操作系统课程设计任务书操作系统课程设计任务书一、设计目的:本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、设计要求:从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;2、题目选定后报给班长,班长要注意班级内题目的平衡,根据所选题目进行协调,不要都选一样的题。
3、设计完成后由老师进行统一答辩,答辩时不能对自己提供的设计进行讲解的同学,视为抄袭;4、要求每位同学写出一份详细的课程设计报告(A4纸),同组者程序相同,但报告要自己独立完成。
5、最后每位同学要将自己的设计报告和电子文档(包括报告和源程序)交给学习委员,并由学习委员统一刻盘后上交。
三、设计内容:课题一、编制银行家算法通用程序,在实现资源分配时,能够有效地避免死锁的产生。
课题二、处理机调度算法设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。
也就是说能运行的进程数大于处理机个数。
为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。
要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。
设计要求:1.进程调度算法包括:先来先服务算法、时间片轮转法,短作业优先算法,动态优先级算法2.可选择进程数量,每个进程由一个进程控制块PCB来标识。
3.根据个人能力可实现其中的两种以上调度算法。
课题三、用多进程同步方法解决生产者-消费者问题设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码.提示:(1) 有界缓冲区可用数组实现.课题四、设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率:要求设计主界面以灵活选择某算法,且以下算法都要实现1、先进先出算法(FIFO)2、最近最久未使用算法(LRU)3、最佳置换算法(OPT)课题五、编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:要求设计主界面以灵活选择某算法,且以下算法都要实现1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN)课题六、编程模拟多进程共享临界资源:要求产生3个进程:1、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进入临界区…”,同时向管理进程提出申请;申请返回,表示进入了临界区。
操作系统-课程设计指导书

操作系统课程设计指导书1.操作系统课程设计1.1 课程的性质和目的“操作系统基础”是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。
操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。
本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握多道程序设计基本技能。
实验的目的:(1) 掌握进程和线程的概念;(2) 掌握进程控制原语或进程控制系统调用的使用;(3) 掌握多道程序设计的基本理论、方法和技术;(4) 掌握相关语言进程控制的函数及win98或windows2000的进程控制的API函数和MFC的使用;(5) 培养学生多道程序设计的能力。
1.2 课程的内容计算机操作系统是计算机系统中最不可缺少的、最常用的软件,也是核心的、最接近于计算机硬件的软件。
计算机操作系统是计算机专业及其相关专业的主要的基础课程之一,其内容综合了各种操作系统的结构、设计思想、方法、技术和理论,其特点是内容繁多、概念抽象,因此造成理解困难、掌握不易。
现代操作系统最为核心的概念是多道程序、进程和线程,它们对于操作系统的初学者掌握尤其不易。
本课程设计的内容为“多道程序间的协同操作”,其指导思想是通过这个课程设计掌握多道程序的基本要点,解决进程和线程概念的理解难点,以利用基本概念和原理的进行多道程序设计为重点,在有限的一周时间内,利用诸如VC++或Java掌握多道程序及其进程同步和互斥的设计的基本方法, 达到能用、会用、巧用的效果。
1.3 学时分配和辅导(1)基本任务简介、原理讲解2学时(2)软件设计4学时(3)上机编程、调试24学时(4)检查考核2学时每小班大约30人,每小班至少配备一名指导教师跟综辅导答疑,解决技术难题。
要求指导教师熟悉多道程序间的协同操作、进程同步和互斥的原理,具有VC++或Java程序设计的经验。
操作系统课程设计课程设计

操作系统课程设计简介操作系统课程设计旨在让学生通过设计和开发一个简单的操作系统来深入了解操作系统的基本概念和原理。
在本文档中,我们将介绍课程设计的主要内容,包括设计目标、技术要求和项目要求。
设计目标操作系统课程设计的主要设计目标是让学生掌握操作系统的基本原理和技术。
通过这个项目,学生应该能够:•理解操作系统的基本概念和原理•实现一个简单的操作系统内核•学会编写和调试操作系统的核心代码•掌握计算机系统底层的技术和知识技术要求操作系统课程设计的技术要求主要包括以下几点:编程语言操作系统课程设计要求学生使用C或Assembly等语言编写代码。
因为这些语言可以更好地控制计算机硬件,并且能够更好地实现操作系统。
系统架构操作系统课程设计要求学生设计和开发一个基于x86架构的操作系统内核。
这是因为x86架构被广泛使用,并且有很多相关的资料和资源可以参考。
开发环境操作系统课程设计要求学生使用VMware或VirtualBox等模拟器来模拟计算机硬件,以便在虚拟环境中测试和调试操作系统代码。
相关知识操作系统课程设计要求学生掌握计算机系统底层的知识和相关技术,如计算机组成原理、汇编语言、操作系统原理等。
项目要求操作系统课程设计的项目要求主要包括以下几点:设计和实现内核学生需要设计和实现一个简单的操作系统内核。
该内核应该具有基本的操作系统功能,如进程调度、CPU调度、内存管理等。
设计和实现系统调用学生需要设计和实现系统调用,并提供相应的API。
系统调用应该能够支持常见的操作系统功能,如文件管理、进程管理等。
实现Shell学生需要实现一个简单的Shell程序,该程序应该能够支持常见的Shell命令,并且能够与操作系统内核进行交互。
测试和调试学生需要在虚拟机中测试和调试操作系统内核和相关代码。
该过程需要包括单元测试、集成测试和系统测试等不同层次的测试。
总结操作系统课程设计是一门重要的计算机科学课程,对于学生掌握操作系统的基本原理和技术是非常重要的。
操作系统课程设计指导书

操作系统课程设计指导书操作系统课程设计指导书李晓东编电子与信息工程学院计算机系-9一、课程设计的目的和意义本课程设计是学生在学完了《操作系统》课程后,培养学生程序设计能力的一个重要教学环节。
课程设计为学生提供了一个动手、动脑并独立实践的机会,有助于学生将教材的理论知识和实践相结合,从而锻炼学生分析问题、解决问题的能力,提高学生实际编写程序的能力,为学生学习计算机专业的后续课程打下良好基础。
本课程设计要求对操作系统的分析以加深对计算机硬件结构和系统软件的认识,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力,为毕业设计和以后的工程实践打下良好的基础。
本课程设计的主要目的:1.熟悉并巩固《操作系统》的基本概念和基本理论,加强对操作系统有关原理的理解;2.培养学生自主学习、独立思考的能力,学会查找资料并善于分析资料的能力;3.培养学生严谨的工作作风,提倡互相学习培养团队精神;4.提高学生独立设计、独立调试程序的能力;5.初步养成良好的系统软件分析和设计能力,形成良好的编程风格。
二、本课程设计有关要求基本要求:1、巩固和加深对操作系统原理的理解,提高综合运用本课程所学知识的能力。
2、培养学生选用参考书,查阅手册及文献资料的能力。
培养独立思考、深入研究、分析问题、解决问题以及团队协作能力。
3、经过实际操作系统的分析设计、编程调试,掌握系统软件的分析方法和工程设计方法。
4、能够按要求编写课程设计报告书,能正确阐述设计和实验结果、正确绘制系统和程序框图。
5、经过课程设计,培养学生严谨的科学态度,严肃认真的工作作风,和团队协作精神。
具体要求:1.认真阅读本课程设计指导书,明确课程设计的目的、意义和要求;2.根据要求完成课程设计的系统开发和调试任务,提供可运行的课程设计系统,参加上机面试答辩。
3.根据学校有关格式要求,完成本课程设计的课程设计说明书。
(必须绘制系统工作原理图及算法流程图)重点:本设计的重点是要求根据任务要求,确定操作系统有关算法并加以实现,注重实际应用能力的培养。
《操作系统》课程设计说明书

河南城建学院《操作系统》课程设计说明书设计题目:UNIX/Linux文件系统分析专业:计算机科学与技术指导教师:邵国金耿永军陈红军班级:0614082学号:061408261姓名:贠炳森同组人:叶矿辉、陈宇计算机科学与工程系2011年1月7日前言在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。
同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。
例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。
但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。
本操作系统课程设计,是给同学提供一个集中实验的机会。
希望同学们通过该设计加深对所学习课程的理解。
本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。
我做的课程设计是:Linux/Unix文件系统分析。
在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub 系统的源代码,对不同介质上的FAT格式文件系统进行分析。
要求在Linux环境下设计出C语言程序,实现以下功能:1)分析UNIX SysV/Linux系统引导记录的作用;2)分析UNIX SysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIX SysV/Linux文件系统内各部分的定位。
3)至少要实现对给定i节点文件的只读访问目录一.系统环境 (3)1.1硬件环境 (3)1.2软件环境 (3)二.设计目的及要求 (3)三.总体设计 (5)四.详细设计 (6)五.调试与测试 (6)六.设计中遇到的问题及解决方法 (6)七.Linux/Unix文件系统分析源程序清单 (7)7.1 头文件 (7)7.2 示例程序 (10)八.运行结果及分析 (16)8.1 linux文件系统读取 (16)8.2 UNIX文件系统读取 (18)九.心得体会 (19)十.参考文献 (20)Linux/Unix文件系统分析一.系统环境1.1硬件环境cpu为pentium4双线程技术,频率为2.8GHZ,内存为256MB。
操作系统课程设计任务书

《操作系统》课程实验指导书一、设计题目题目一:模拟实现页式虚拟存储管理页面置换算法题目二:模拟实现虚拟存储管理(请求分页存储管理)题目三:模拟实现可变分区存储管理题目四:模拟实现算法多级反馈队列进程调度算法题目五:模拟银行家算法二、设计目的《操作系统》课程实验是计算机类专业的集中实践性环节之一,是学习完《操作系统》课程后进行的一次全面的综合练习。
其目的在于加深对操作系统课程的理解,使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,理解操作系统在计算机系统中的作用、地位和特点,具有分析实际操作系统,设计、构造和开发现代操作系统的基本能力,为今后从事的各种实际工作,如设计、分析和改进各种系统软件和应用软件提供必要的软件理论基础。
、设计内容设计内容一页式虚拟存储管理页面置换算法1.目的和要求在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。
2.设计内容阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。
模拟实现页式虚拟存储管理的三种页面置换算法(OPT、FIFO和LRU),并通过比较性能得出结论。
前提:(1)页面分配采用固定分配局部置换。
(2)作业的页面走向和分得的物理块数预先指定。
可以从键盘输入也可以从文件读入。
(3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。
3.设计环境Windows操作系统、VC++6.0C语言4.设计提示(1)基础知识存储管理是操作系统进行资源管理的一个重要功能。
现代操作系统广泛采用虚拟存储的技术对内存进行扩充。
实现虚拟存储的一个主要技术手段就是将辅存和主存统一管理,在二者之间进行对换,从而形成物理上两级而逻辑上一级的存储管理系统。
一个置换算法的好坏对这个逻辑上的单级虚存的性能起着极其重要的作用,而且会影响处理机的调度性能。
操作系统课程设计(完整规范版)

操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统的设计与实现方法,培养学生在实际操作系统中分析和解决问题的能力。
通过本次课程设计,学生将能够:1. 加深对操作系统理论知识的理解与应用;2. 提高动手实践能力,培养创新精神和团队协作意识;3. 为今后从事操作系统相关领域的研究和工作奠定基础。
二、设计要求(1)进程管理:包括进程的创建、撤销、调度等;(2)内存管理:实现内存分配、回收、页面置换等;(3)文件系统:实现文件的创建、删除、读写等操作;(4)设备管理:实现设备的分配、回收、驱动等功能。
(1)代码规范:编写清晰、易读、易维护的代码;(3)团队协作:合理分工,确保团队成员共同参与、共同进步。
三、设计步骤1. 需求分析:分析课程设计所需实现的功能,明确各个模块的具体要求;2. 概要设计:根据需求分析,制定总体设计方案,划分模块,确定模块间接口;3. 详细设计:针对每个模块,进行具体实现方案的设计;4. 编码实现:按照设计文档,编写代码,实现各个功能模块;5. 测试与调试:对实现的功能进行测试,发现问题并进行调试;6. 优化与改进:根据测试结果,对代码进行优化,提高系统性能;四、预期成果1. 完成一套具有基本功能的模拟操作系统,能够演示进程管理、内存管理、文件系统和设备管理的主要操作;2. 提供完整的,包括注释,以便他人理解和学习;3. 形成一份详尽的课程设计报告,记录设计过程中的思考、遇到的问题及解决方案;4. 通过课程设计,提升个人在操作系统领域的理论知识和实践能力。
五、评价标准1. 功能完整性:各功能模块是否按照要求实现,系统是否能正常运行;3. 创新性:设计过程中是否有独特的想法,是否对现有技术有所改进;4. 团队协作:团队成员之间沟通是否顺畅,分工是否合理,协作是否高效;5. 文档质量:课程设计报告是否详细、准确,是否能够完整反映设计过程和成果。
操作系统课程设计任务指导书

《操作系统原理》课程设计--进程调度模拟程序一、课程设计目的《操作系统原理》是计算机科学与技术专业的一门专业核心课程,也是研究生入学考试中计算机专业综合中所涉及的内容。
该课程理论性强,纯粹的理论学习相对枯燥乏味,不易理解。
通过课程设计,可加强学生对原理知识的理解。
二、课程设计的任务和要求本次课程设计的题目是,时间片轮转调度算法的模拟实现。
要求在充分理解时间片轮转调度算法原理的基础上,编写一个可视化的算法模拟程序。
具体任务如下:1、根据需要,合理设计PCB(进程控制块)结构,以适用于时间片轮转调度算法;2、设计模拟指令格式,并以文件形式存储,程序能够读取文件并自动生成指令序列。
3、根据文件内容,建立模拟进程队列,并能采用时间片轮转调度算法对模拟进程进行调度。
任务要求:1、进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件。
2、需将调度过程输出到一个运行日志文件。
3、开发平台及语言不限。
4、要求设计一个Windows可视化应用程序。
三、模拟程序的描述:模拟指令的格式:操作命令+操作时间● C :表示在CPU上计算●I :表示输入●O :表示输出●W :表示等待●H :表示进程结束操作时间代表该操作命令要执行多长时间。
这里假设I/O设备的数量没有限制,I和O设备都只有一类。
I,O,W三条指令实际上是不占有CPU的,执行这三条指令就应该将进程放入对应的等待队列(输入等待队列,输出等待队列,其他等待队列)。
例如,有一虚拟程序文件prc.txt描述如下:P1C10 // 在CPU上运算10个时间单位I20 // 输入,占用20个时间单位C40 // 在CPU上运算40个时间单位I30 // 输入,占用30个时间单位C20 // 在CPU上运算20个时间单位O30 // 输出,占用30个时间单位H00 // 进程结束P2I10C50O20H00P3C10I20W20 // 等待20个时间单位C40O10H00................四、实验报告要求除了编程实现设计的要求,在运行调试完成后,要书写出课程设计报告,总结归纳课设的各个方面,锻炼自己实践和总结报告的能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计题目1 进程调度算法1.1 设计目的进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。
在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。
本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。
下面回顾一下进程管理的相关内容。
1.1.1 进程控制块为了管理和控制进程,系统在创建每一个进程时,都为其开辟一个专用的存储区,用以随时记录它在系统中的动态特性。
而当一个进程被撤消时,系统就收回分配给它的存储区。
通常,把这一存储区称为该进程的“进程控制块”(Process Control Block)。
由于PCB是随着进程的创建而建立,随着进程的撤消而取消的,因此系统是通过PCB 来“感知”一个个进程的,PCB是进程存在的唯一标志。
随操作系统的不同,PCB的格式、大小以及内容也不尽相同。
一般地,在PCB中大致应包括如下4方面的信息。
·标识信息:进程名等。
·说明信息:进程状态、程序存放位置、数据存放位置等。
·现场信息:通用寄存器内容、控制寄存器内容、断点地址等。
·管理信息:进程优先数、队列指针等。
1.1.2 进程控制块队列在多道程序设计环境里,同时会创建多个进程。
当计算机系统只有一个CPU时,每次只能让一个进程运行,其他的进程或处于就绪状态,或处于阻塞状态。
为了对这些进程进行管理,操作系统要做三件事。
(1)把处于相同状态的进程的PCB,通过各自的队列指针链接在一起,形成一个个队列。
通常有运行队列、就绪队列、阻塞队列。
(2)为每一个队列设立一个队列头指针,它总是指向排在队列之首的进程的PCB。
(3)排在队尾的进程的PCB,它的“队列指针”项内容应该为“NULL”,或一个特殊的符号,以表示这是该队的队尾PCB。
在单CPU系统中,任何时刻都只有一个进程处于运行状态,因此运行队列中只能有一个PCB;系统中所有处于就绪状态的进程的PCB排成一队,称其为“就绪队列”。
一般地,就绪队列中会有多个进程的PCB排在里面,它们形成处理机分配的候选对象。
如果就绪队列里没有PCB存在,则称该队列为空;所有处于阻塞状态进程的PCB,应该根据阻塞的原因进行排队,每一个都称为一个“阻塞队列”。
比如等待磁盘输入/输出进程的PCB排成一个队列,等待打印机输出进程的PCB排成一个队列等。
所以,系统中可以有多个阻塞队列,每个阻塞队列中可以有多个进程的PCB,也可以为空。
1.1.3 进程调度算法进程调度算法用于确定就绪队列中的哪一个进程即将获得CPU。
常用的进程调度算法有先来先服务法、时间片轮转法、优先数法等。
1.先来先服务调度算法先来先服务调度算法的基本思想是:以到达就绪队列的先后次序为标准来选择占用处理机的进程。
一个进程一旦占有处理机,就一直使用下去,直至正常结束或因等待某事件的发生而让出处理机。
采用这种算法时,应该这样来管理就绪队列:到达的进程的PCB总是排在就绪队列末尾;调度程序总是把CPU分配给就绪队列中的第一个进程使用。
2.时间片轮转法时间片轮转调度算法的基本思想是:为就绪队列中的每一个进程分配一个称为“时间片”的时间段,它是允许该进程运行的时间长度。
在使用完一个时间片后,即使进程还没有运行完毕,也要强迫其释放处理机,让给另一个进程使用。
它自己则返回到就绪队列末尾,排队等待下一次调度的到来。
采用这种调度算法时,对就绪队列的管理与先来先服务完全相同。
主要区别是进程每次占用处理机的时间由时间片决定,而不是只要占用处理机就一直运行下去,直到运行完毕或为等待某一事件的发生而自动放弃。
3.优先数调度算法优先数调度算法的基本思想是:为每一个进程确定一个优先数,进程就绪队列按照优先数排序。
如何确定进程的优先数(也就是进程的优先级)?可以从如下几个方面考虑。
(1)根据进程的类型。
系统中既有系统进程,又有用户进程。
系统进程完成的任务是提供系统服务,分配系统资源,因此,给予系统进程较高的优先数能够提高系统的工作效率。
(2)根据进程执行任务的重要性。
重要性和紧迫性高的进程应当被赋予较高的优先级。
(3)根据进程程序的性质。
一个CPU繁忙的进程,由于需要占用较长的运行时间,影响系统整体效率的发挥,因此只能给予较低的优先数。
一个I/O繁忙的进程,给予它较高的优先数后,就能充分发挥CPU和外部设备之间的并行工作能力。
(4)根据对资源的要求。
系统资源有处理机、内存储器和外部设备等。
可以按照一个进程所需资源的类型和数量,确定它的优先数。
比如给予占用CPU时间短或内存容量少的进程以较高的优先数,这样可以提高系统的吞吐量。
(5)根据用户的请求。
系统可以根据用户的请求,给予它的进程很高的优先数,作“加急”处理。
4.多级队列调度算法多级队列调度算法也称多级反馈队列调度算法,它是时间片调度算法与优先数调度算法的结合。
实行这种调度算法时,系统中将维持多个就绪队列,每个就绪队列具有不同的调度级别,可以获得不同长度的时间片。
例如,系统维持N个就绪队列,第1级就绪队列中进程的调度级别最高,可获得的时间片最短,第N级就绪队列中进程的调度级别最低,可获得的时间片最长。
具体的调度方法是:创建一个新进程时,它的PCB将进入第1级就绪队列的末尾。
对于在第1级到第N-1级队列中的进程,如果在分配给它的时间片内完成了全部工作,那么就撤离系统;如果在时间片没有用完时提出了输入/输出请求或要等待某事件发生,那么就进入相应的阻塞队列里等待。
在所等待的事件出现时,仍回到原队列末尾,参与下一轮调度(也就是每个队列实行先来先服务调度算法);如果用完了时间片还没有完成自己的工作,那么只能放弃对CPU的使用,降到低一级队列的末尾,参与那个队列的调度。
对位于最后一个队列里的进程,实行时间片轮转调度算法。
整个系统最先调度1级就绪队列;只有在上一级就绪队列为空时,才去下一级队列调度。
当比运行进程更高级别的队列中到达一个进程(可以肯定,在此之前比运行进程级别高的所有队列全为空)时,系统将立即停止当前运行进程的运行,让它回到自己队列的末尾,转去运行级别高的那个进程。
可以看出,多级队列调度算法优先照顾I/O繁忙的进程。
I/O繁忙的进程在获得一点CPU 时间后就会提出输入/输出请求,因此它们总是被保持在1、2级等较前面的队列中,总能获得较多的调度机会。
对于CPU繁忙的进程,它们需要较长的CPU时间,因此会逐渐地由级别高的队列往下降,以获得更多的CPU时间,它们“沉”得越深,被调度到的机会就越少。
但是,一旦被调度到,就会获得更多的CPU时间。
1.2 设计要求1.2.1 界面要求实验要求采用简单的控制台界面,包括一级功能菜单,如图1-1所示。
图1-1 界面要求1.2.2功能要求实验应该包括以下功能:1.运行先来先服务进程调度算法;2.运行时间片轮转进程调度算法;3.运行优先数进程调度算法;4.运行多级反馈队列进程调度算法;5.显示就绪进程队列;6.显示运行进程队列;7.显示阻塞进程队列;8.创建新进程;9.阻塞进程;10.唤醒进程;11.删除进程;12.退出程序。
1.3 设计步骤1.3.1 总体设计确定程序包含多少个模块,每个模块有哪些功能、包括哪些函数,模块之间的调用关系如何。
由于本实验并不复杂,所以只用一个模块实现。
要求宏、数据结构、全局变量和函数原型放在头文件中,而函数实现放在源文件中。
假设头文件名为process_schedule.h,源程序文件名为process_schedule.cpp。
实验中用到的主要数据结构是进程控制块,其结构如图1-2所示。
实验中用到1个宏和8个全局变量,如图1-3所示。
实验中用到的主要函数有10个,如图1-4所示。
图1-2 进程控制块图1-3 宏和全局变量图1-4 函数名称及作用1.3.2 详细设计及实现1. 头文件头文件中含有图1-2、图1-3和图1-4的内容。
#include <conio.h>#include <stdlib.h>#include <stdio.h>#include <io.h>#include <string.h>#define MAX_PROCESS 10int process_number=0; //下一个可用的进程编号typedef struct pcb{struct pcb *next; //下一个进程控制块指针char process_name[20]; //进程名int process_number; //进程编号int process_start_moment; //进程启动时刻int process_need_time; //要求运行时间int process_time_slice; //时间片int process_priority; //优先数}PCB; //自定义数据类型:进程控制块PCB pcb_table[MAX_PROCESS]; //进程控制块表PCB *pcb_run=NULL; //进程运行队列头指针PCB *pcb_free=NULL; //进程空闲队列头指针PCB *pcb_ready=NULL; //进程就绪队列头指针PCB *pcb_ready_rear=NULL; //进程就绪队列尾指针PCB *pcb_blocked=NULL; //阻塞队列头指针PCB *pcb_blocked_rear=NULL; //阻塞队列尾指针void init_pcb_table( ); //初始化进程控制块表void print_space(int num); //显示若干个空格void display_process_queue(PCB *queue); //显示进程队列PCB *create_process( ); //创建进程函数,成功时返回新创建进程的PCB,失败时返回NULL。
void block_process_by_name( ); //阻塞指定名称的进程。
void wakeup_process( ); //唤醒进程void FCFS( ); //先来先服务进程调度算法void RR( ); //时间片轮转进程调度算法void HPF( ); //优先数进程调度算法void MFBQ( ); //多级反馈队列进程调度算法2. 主函数main主函数用来初始化进程队列,显示菜单,接收用户输入的菜单选项,并根据用户的选项执行相应的功能。
其处理流程如下:main( ){初始化进程控制块表;while(1){显示菜单;输出提示信息;接收用户输入的选项,如果输入不是数字1~8或者字母a~d则重新输入;switch(选项){case …1‟:调用先来先服务进程调度算法;break;case …2‟:调用时间片轮转进程调度算法;break;case …3‟:调用优先数进程调度算法;break;case …4‟:调用多级反馈队列进程调度算法;break;case …5‟:显示就绪进程队列;break;case …6‟:显示阻塞进程队列;break;case …7‟:显示运行进程队列;break;case …a‟:调用创建进程函数;break;case …b‟:调用删除进程函数;break;case …c‟:调用阻塞进程函数;break;case …d‟:调用唤醒进程函数;break;case …8‟:返回;}}返回;}说明:通常用循环语句和多分支语句实现菜单。