时间片轮转算法课程设计
时间片轮转算法课程设计

一、实验目的本课程设计以Windows操作系统为实验平台,进行源代码分析和修改。
通过该课程设计,使学生掌握Windows操作系统各部分结构、实现机理和各种典型算法;系统地了解操作系统的设计和实现思路,运用内核开发环境实现对内核的修改,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。
二、实验内容1.分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。
2.画出程序的基本结构框图和流程图。
3.对程序的每一部分要有详细的设计分析说明。
4.源代码格式要规范。
5.设计合适的测试用例,对得到的运行结果要有分析。
6.设计中遇到的问题,设计的心得体会。
7.按期提交完整的程序代码、可执行程序和课程设计报告。
三、实验步骤1、任务分析:时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。
算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。
时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息。
实现的过程即运用指针指向某一个进程,判断当前的进程是否是就绪状态“r”,如果是,则为该进程分配一个时间片,同时,已运行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的时间减少至0时,则将该进程的状态设置为“e”。
然后,将指针指向下一个未运行完成的进程,重复判断,直至所有的进程都运行结束。
2、概要设计:(1)所用数据结构及符号说明typedef struct PCB{char name[10]; //进程名struct PCB *next; //循环链指针int need_time; //要求运行时间int worked_time; //已运行时间,初始为0char condition; //进程状态,只有“就绪”和“结束”两种状态int flag; //进程结束标志,用于输出}PCB;PCB *front,*rear; //循环链队列的头指针和尾指针int N; //N为进程数(2)主程序的流程图:PCB1 PCB2 PCB3 PCB4 PCB5 (3)程序详细设计步骤:a.首先建立PCB的数据结构,为了便于正确输出,加上了进程结束标志flag。
操作系统课程设计时间片轮转算法java实现

操作系统课程设计时间片轮转算法j a v a实现 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】学校代码:10128课程设计题目:处理机管理模拟系统的设计与实现学生姓名:学院:信息工程学院系别:软件工程系专业:软件工程班级:指导教师:副教授讲师2013年1月8日内蒙古工业大学课程设计任务书(四)学院(系):信息学院软件工程系课程名称:操作系统课程设计指导教师(签名):专业班级:学生姓名:学号:摘要操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。
对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业优先调度算法;在分时系统中,为保证系统具有合理的响应时间,采用时间片轮转法进行调度。
采用算法时,则要考虑多方面因素,以便达到最佳效果。
本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过程。
用Java模拟进程调度过程,可以方便地将运行结果直观地表示出来。
Java语言独有的多线程操作,可以实现许多其他语言不能实现的功能,极大地方便了程序开发人员对程序的开发。
此外,利用JavaGUI编程,可以使系统提供的界面更加友好。
实验中,应用文件I/O操作、线程、AWT、Swing、内部类、接口、异常处理等技术,开发此系统。
关键字:时间片轮转; Java编程; GUI图形用户界面;文件操作;AbstractThe operating system is a key component of the computer system, responsible for the management and configuration memory, decided to system resources supply and demand priority, control input and output equipment, operation and management of network file system, and other basic different systems and system target, computers usually use different scheduling algorithm, such as in a Batch Processing System, in order to take care of a lot of short operation, using Short Job First algorithm;In systems with time sharing, to ensure the system has reasonable response time, need time slice Round Robin algorithm for scheduling. The algorithm, we should consider various factors, in order to achieve the best Course Design uses time slice Round Robin algorithm to simulate the process scheduling task execution process.With Java simulation process scheduling process, which can be conveniently will run results intuitively said addition, the use of JavaGUI programming, can make the system to provide theinterface more , application file I/O operation, threads, AWT, Swing, internal class, interface, abnormal processing technology, the development of this system.Keywords: time slice Round Robin; Java Programming; ;File Operation;目录第一章问题分析设计目的在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。
采用时间片轮转算法调度程序

采用时间片轮转算法调度程序学号:姓名:专业:指导教师:日期:目录一、需求分析 (3)1、设计要求: (3)2、解决方案: (3)二、课程设计简介 (4)1、课程设计题目 (4)2、课程设计目的 (4)3、课程设计内容 (4)4、时间安排 (4)三、概要设计 (4)1、基本原理 (4)2、算法思想设计 (5)3、数据结构及模块说明: (5)四、主要函数及其说明 (6)五、调试分析 (7)1、调试过程及步骤 (7)2、结果分析(以三个进程数为例) (8)六、总结及参考文献 (9)1、总结: (9)2、参考文献 (9)附录:程序源代码 (9)一、需求分析1、设计要求:在多道程序或多任务系统中,系统同时处于就绪状态的进程有若干个。
为了使系统中各进程能有条不紊地进行,必须选择某种调度策略,以选择一进程占用处理机。
要求用时间片轮转算法模拟单处理机调度,以巩固和加深处理机调度的概念。
2、解决方案:(1)、假设系统有5个进程,每个进程用一个进程控制块PCB来表示。
PCB包括:进程名、链接指针、到达时间、估计运行时间和进程状态。
其中,进程名即进程标识。
链接指针指出下一个到达进程的进程控制块地址,按照进程到达的顺序排队,统设置一个队头和队尾指针分别指向第一个和最后一个进程,新生成的进程放队尾。
估计运行时间:可由设计者任意指定一个时间值。
到达时间:进程创建时的系统时间或由用户指定,调度时,总是选择到达时间最早的进程。
进程状态:为简单起见,假定进程有三种状态,就绪、等待和完成,并假定进程一创建就处于就绪状态,用R表示,当一个进程运行结束时,就将其置成完成状态,用F表示。
当一个进程未运行完成并且时间片不足时,就将其置成等待状态,用W表示。
(2)、为每个进程任意确定一个要求运行时间和到达时间。
(3)、按照进程到达的先后顺序排成一个循环队列。
再设一队首指针指向第一个到达进程的首址。
(4)、执行处理机调度时,开始选择队首的第一个进程运行。
时间片轮转、强占式短进程优先算法

学号:课程设计题目进程调度模拟设计——时间片轮转、强占式短进程优先算法学院计算机科学与技术学院专业班级姓名指导教师吴利军2013 年 1 月16 日课程设计任务书学生姓名:指导教师:吴利军工作单位:计算机科学与技术学院题目: 进程调度模拟设计——时间片轮转、强占式短进程优先算法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日进程调度模拟设计时间片轮转、强占式短进程优先算法一、需求分析本次课程设计需要通过设计一个模拟进程调度的系统,来实现进程调度过程的模拟,对进程调度的功能以及进程调度的算法有更加深层次的理解。
时间片轮转法的基本思路是每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。
计算机操作系统时间片循环轮转算法

Proc p=H->n ext;
while (p->All_Time > p->Ru ned_Time) { //即未结束的进程
roun d++;
cout<<endl<<"Round "<<round<<"--正在运行"<<p->name<<"进程"<<endl;
PCB3
PCB4
PCB5
(4)处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,
所以,对被选中的进程并不实际的启动运行,而是执行:
已运行时间+1
来模拟进程的一次运行,表示进程已经运行过一个单位的时间。
请注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,
do {
if (p->state != 'E') //如果该进程的状态不是End的话
{
cout<<"进程名:"<<p->name<<"\t总运行时间:"<<p->All_Time
<<"\t已运行时间:"<<p->Runed_Time
<<"\t状态:"<<p->state<<endl;
p=p->n ext;
(2)每次运行所设计的进程调度程序前,为每个进程任意确定它的“要求运行时间”。
计算机操作系统时间片循环轮转算法

计算机操作系统时间片循环轮转算法实验报告书课程名:«计算机操作系统»题目:时间片循环轮转调度班级:软件081班学号:110831116姓名:陈点点(4) 处置器调度总是选择标志单元指示的进程运转。
由于本实验是模拟处置器调度的功用,所以,对被选中的进程并不实践的启动运转,而是执行:已运转时间+1来模拟进程的一次运转,表示进程曾经运转过一个单位的时间。
请留意:在实践的系统中,当一个进程被选中运转时,必需置上该进程可以运转的时间片值,以及恢复进程的现场,让它占有处置器运转,直到出现等候事情或运转满一个时间片。
在这时省去了这些任务,仅用〝已运转时间+1〞来表示进程曾经运转满一个时间片。
(5) 进程运转一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运转的进程。
同时,应判别该进程的要求运转时间与已运转时间,假定该进程的要求运转时间 已运转时间,那么表示它尚未执行完毕,应待到下一轮时再运转。
假定该进程的要求运转时间=已运转时间,那么表示它曾经执行完毕,应指点它的形状修正成〝完毕〞〔E〕且参与队列。
此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。
(6) 假定〝就绪〞形状的进程队列不为空,那么重复下面的〔4〕和〔5〕的步骤,直到一切的进程都成为〝完毕〞形状。
(7) 在所设计的顺序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运转一次后进程队列的变化。
(8) 为五个进程恣意确定一组〝要求运转时间〞,启动所设计的处置器调度顺序,显示或打印逐次被选中的进程名以及进程控制块的静态变化进程。
五、流程图与源顺序int ProcNum; // 总进程个数// 初始化就绪队列void InitPCB(Proc &H) {cout<<"请输入总进程个数: ";cin>>ProcNum; // 进程总个数int Num=ProcNum;H=(Proc)malloc(sizeof(PNode)); // 树立头节点H->next=NULL;Proc p=H; //定义一个指针cout<<"总进程个数为 "<<ProcNum<<" 个,请依次输入相应信息\n\n";while (Num--) {p=p->next=(Proc)malloc(sizeof(PNode));cout<<"进程名总运转时间已运转时间 :";cin>>p->name>>p->All_Time>>p->Runed_Time;p->state='R';p->next=NULL;}p->next=H->next;}//输入运转中的进程信息void DispInfo(Proc H) {Proc p=H->next;do {if (p->state != 'E') //假设该进程的形状不是End的话{cout<<"进程名:"<<p->name<<"\t总运转时间:"<<p->All_Time <<"\t已运转时间:"<<p->Runed_Time<<"\t形状:"<<p->state<<endl;p=p->next;}else p=p->next;} while (p != H->next); // 整个进程链条一直完整,只是形状位有差异}// 时间片轮转法void SJP_Simulator(Proc &H) {cout<<endl<<"-------------------START--------------------\n";int flag=ProcNum; // 记载剩余进程数int round=0; // 记载轮转数Proc p=H->next;while (p->All_Time > p->Runed_Time) { // 即未完毕的进程round++;cout<<endl<<"Round "<<round<<"--正在运转 "<<p->name<<" 进程"<<endl; p->Runed_Time++; // 更矫正在运转的进程的已运转时间DispInfo(H); // 输入此时为就绪形状的进程的信息if (p->All_Time == p->Runed_Time) { // 并判别该进程能否完毕p->state='E';flag--;cout<<p->name<<" 进程已运转完毕,进程被删除!\n";}p=p->next;while (flag && p->All_Time == p->Runed_Time)p=p->next; // 跳过先前已完毕的进程}cout<<endl<<"--------------------END---------------------\n";}void main() {Proc H;InitPCB(H); // 数据初始化DispInfo(H); // 输入此刻的进程形状SJP_Simulator(H); // 时间片轮转法system("pause");}六、测试数据与实验结果七、结果剖析与实验体会时间片轮转算法中,系统将一切的就绪顺序按先来先效劳的原那么排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。
时间片轮转课程设计讲解

武汉理工大学华夏学院课程设计报告书课程名称:操作系统原理题目:时间片轮转调度算法系名:信息工程系专业班级:姓名:学号:指导教师:司晓梅2015 年 6 月 26 日武汉理工大学华夏学院信息工程系课程设计任务书课程名称:操作系统原理课程设计指导教师:司晓梅班级名称:计算机1131-2 开课系、教研室:自动化与计算机一、课程设计目的与任务操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux系统、C语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。
学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。
二、课程设计的内容与基本要求1、课程设计题目时间片轮转进程调度模拟算法的实现2、课程设计内容用c/c++语言实现时间片轮转的进程调度模拟算法。
要求:1.至少要有5个以上进程2.进程被调度占有CPU后,打印出该进程正在运行的相关信息提示:时间片轮转调度算法中,进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。
在使用完一个时间片后,进程还没有完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待再次运行。
1)进程运行时,只打印出相关提示信息,同时将它已经运行的时间片加1就可以了。
2)为进程设计出PCB结构。
PCB结构所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息等。
3、设计报告撰写格式要求:1设计题目与要求 2 设计思想3系统结构 4 数据结构的说明和模块的算法流程图5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;三、课程设计步骤及时间进度和场地安排本课程设计将安排在第17周, 现代教育技术中心。
时间片轮转调度算法设计与实现

郑州轻工业学院实验报告课程名称:操作系统姓名:学号:专业班级:任课教师:黄伟2016 年11 月 2 日实验报告成绩评定表实验报告正文实验二时间片轮转调度算法设计与实现一、实验目的目的:了解并掌握时间片轮转调度算法的理论,熟悉并掌握时间片设置的大小对系统的影响。
任务:模拟实现时间片轮转调度算法。
二、实验内容1.任务描述1)时间片轮转调度算法问题简介时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。
算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。
时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息。
实现的过程即运用指针指向某一个进程,判断当前的进程是否是就绪状态“r”,如果是,则为该进程分配一个时间片,同时,已运行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的时间减少至0时,则将该进程的状态设置为“e”。
然后,将指针指向下一个未运行完成的进程,重复判断,直至所有的进程都运行结束。
2)设计任务简介模拟实现时间片轮转调度算法,具体如下:设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W——等待,R——运行,F——完成),进程间的链接指针进程初始化:由用户输入进程名、服务时间进行初始化,同时,初始化进程的状态为W。
显示函数:在进程调度前、调度中和调度后进行显示。
排序函数:对就绪状态的进程按照进入就绪队列的时间排序,新到达的进行应优先于刚刚执行过的进程进入就绪队列的队尾。
注意考虑到达时间调度函数:每次从就绪队列队首调度优一个进程执行,状态变化。
并在执行一个时间片后化,服务时间变化,状态变化。
当服务时间为0时,状态变为F。
删除函数:撤销状态为F的进行。
2.调度问题的表示方案首先每一个进程用一个进程控制块PCB来代表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的本课程设计以Windows操作系统为实验平台,进行源代码分析和修改。
通过该课程设计,使学生掌握Windows操作系统各部分结构、实现机理和各种典型算法;系统地了解操作系统的设计和实现思路,运用内核开发环境实现对内核的修改,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。
二、实验内容1.分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。
2.画出程序的基本结构框图和流程图。
3.对程序的每一部分要有详细的设计分析说明。
4.源代码格式要规范。
5.设计合适的测试用例,对得到的运行结果要有分析。
6.设计中遇到的问题,设计的心得体会。
7.按期提交完整的程序代码、可执行程序和课程设计报告。
三、实验步骤1、任务分析:时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。
算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。
时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息。
实现的过程即运用指针指向某一个进程,判断当前的进程是否是就绪状态“r”,如果是,则为该进程分配一个时间片,同时,已运行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的时间减少至0时,则将该进程的状态设置为“e”。
然后,将指针指向下一个未运行完成的进程,重复判断,直至所有的进程都运行结束。
2、概要设计:(1)所用数据结构及符号说明typedef struct PCB{c har name[10];先建立PCB的数据结构,为了便于正确输出,加上了进程结束标志flag。
输入进程信息(包括进程名和要求运行的时间),并为每个进程创建一个PCB并初始化形成一个循环链队列,用函数creatPCB()来实现。
b.建立函数judge()用来判断进程全部运行结束标志,即当所有进程的状态变为’e’(即完成状态)后,循环结束,表示所有进程都已运行成功。
c.建立时间片轮转算法creatProcess()对进程进行轮转运行,首先指针s指向第一个进程PCB,即s=front,判断该进程的状态是否为’r’(就绪状态),即if(s->condition == 'r'),若是则表示此进程尚未执行结束,则执行s->worked_time++且s->need_time--,if(s->need_time==0),则表示此进程已运行结束,将其状态置为结束,即s->condition='e',并根据状态位输出完成信息,且以后不会再运行此进程。
将指针指向下个进程,s=s->next,并判断所有进程是否已全部运行结束,没有则重复上面算法。
当所有进程的状态位都变成’e’表示所有进程运行完成,则循环结束。
d.建立主函数main(),输入进程数N,调用初始化循环链队列函数creatPCB()和时间片轮转算法creatProcess(N),每次选中进程的进程名以及运行一次后进程队列的变化,实现处理器的调度。
4、调试分析:a.调试过程中遇到的问题及解决方案开始运行到Q5运行完成后显示错误,如下图所示:原因:经检查程序发现语句if(s->condition=='e' ){printf("进程%s已经运行完成!\n\n",s->name);}有错误,因为当某个进程运行完成后,其状态标志已修改为’e’,所以再次循环运行未完成的进程时,当运行到此句时仍会将前面已完成的进程重新输出一遍完成信息,导致输出错误。
解决方案:为每个进程加上一个结束标志flag,并赋初值为0,当进程运行完成后,将flag改为1,再将后面输出改为if(s->condition=='e' || s->flag==0 ){printf("进程%s已经运行完成!\n\n",s->name);s->flag==0;},这样在前面进程运行完成输出后,后面再循环时就不会重新输出一遍了。
b.改进设想:本实验较简单,但还不够完善,如未实现插入进程功能,即进程在运行过程中可以插入其他的进程再运行。
还有未进行进程优先级判别,本实验默认进程的优先级按输入的先后顺序从大到小排列的,还有其他功能等,希望在以后的实验中逐步完善。
5、测试结果:a.首先输出五个进程的初始状态b.开始从进程Q1开始按时间片轮转运行进程,Q4先运行完成c.接着Q1运行完成d.接着Q5运行完成e.再Q3运行完成f.最后Q2运行完成四、实验总结因在早期的时间片轮转法中,系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度是,把CPU分配给队首进程,并令其执行一个时间片。
当执行的时间片用完时,调度程序停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
在时间片轮转算法中,时间片的大小对系统性能有很大的影响。
如果选择很小的时间片将有利于短作业,因为它能较快地完成,但会频繁的发生中断、进程上下文的切换,从而增加系统的开销;反之,如果选择太长时间片,使得每个进程都能在一个时间片内完成,所以,一般定为时间片略大于一次典型地交互所需要的时间。
在完成时间片轮转算法的实现过程中,我们遇到了一些问题,比如怎样运用循环队列,如何设计结构体等等,也积极配合并思考进行解决。
整体来说,我们的算法虽然实现了体现进程动态运行变化的过程,但是相对而言比较简单。
实验中,我们小组不断讨论对算法进行优化,使得运行结果看起来更容易理解,也达到了处理机调度的功能。
做实验让我们对于时间片轮转的思想理解的更加透彻,巩固了理论知识的学习。
实验心得体会:首先,我们认为这次课程设计是对学习《操作系统》的一次综合考察,锻炼我们综合分析问题、解决问题的能力。
初次得到课程设计的题目时,为程序本身的简单而窃喜过;实验过程中也出现了一些难题需要解决,为此去苦苦探索过。
课程设计期间,几乎有几天我们完全投入进去了,就像是在做一个相当重要的项目一样的感觉。
曾经跑过图书馆几次,只是为了一种新的想法得到实现,也曾多次登录网站浏览网页,为了弥补一些知识上的纰漏,为此曾洒下了真实的汗水。
当我们的想法得到实现,又学会了新的知识的时候,心中满是欣喜,或许这是实践出真知的真实验证,有付出就有回报的真实写照吧。
其次,我们感受了真诚的友谊。
在实验中,遇到的问题是多方面的,而且有那么一部分是以前学过的C问题,但是已经忘却或是以前没有真正的理解过。
但是你会发现就在你的身边,会有那么一批人在背后热心的帮助你,让你身处困境却感到无限希望。
这好像是人生的一种历程,风风雨雨中我们一起走过,然后为了一些坑坑洼洼彼此真诚的帮助过和无私的付出过。
团队的协作和彼此心的交流让我们彼此丰厚起来,这也是我们成长中必不可失的重要部分。
最后,我认识到了自己的不足。
平心而论,以前真的没有认真的学习过,即使是在听课,可是后来却没有对学习中出现的问题而仔细分析过。
得过且过,迷失了我前进的方向,而现在却又重新敞开了。
不论是以后的学习还是工作,我想这都是很重要的,我们需要不断进步的动力。
总的说来知识上的收获很是重要,精神上的丰收也是更加可喜的,让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆。
五、源程序实验源程序如下:#include""#include""#include""#include""#define NULL 0typedef struct PCB{char name[10]; //进程名struct PCB *next; //链指针int need_time; //要求运行时间int worked_time; //已运行时间char condition; //进程状态,只有"就绪"和"结束"两种状态int flag; //进程结束标志}PCB;PCB *front,*rear;int N; //N为进程数void creatPCB(){ //为每个进程创建一个PCB并初始化形成一个循环链队列PCB *p,*l;l = (PCB *)malloc(sizeof(PCB));printf("请输入各进程名和要求运行时间\n");scanf("%s%d",l->name,&l->need_time);l->condition = 'r'; //进程初始状态为就绪l->worked_time = 0;l->next=NULL;l->flag=0;front=l;for(int i = 1;i < N ;i ++){p = (PCB *)malloc(sizeof(PCB));scanf("%s%d",p->name,&p->need_time);p->condition = 'r';p->worked_time = 0;p->flag=0;l->next = p;l=l->next;}rear=l;rear->next=front;}void output(){ //进程输出函数printf("进程名已运行时间需要时间状态\n");for(int j=1;j<=N;j++){printf(" %-4s\t %-4d\t %-4d\t%-c\n",front->name, front->worked_time, front->need_time, front->condition);front=front->next;}printf("\n");}int judge(PCB *p){ //判断所有进程运行结束int flag = 1;for(int i=0;i<N;i++){if(p->condition != 'e'){flag = 0;break;}p=p->next;}return flag;}void creatProcess(int n){ //时间片轮转算法PCB *s,*p;int i,j,flag1=0;s = (PCB *)malloc(sizeof(PCB));s=front;printf("\n--------------------------------------------\n");output();printf("请按任意键继续\n\n");getch(); //按任意键继续s=front;while(flag1 != 1){if(s->condition == 'r'){s->worked_time++;s->need_time--;if(s->need_time==0)s->condition='e';output();printf("请按任意键继续\n\n");getch();}if(s->condition=='e' && s->flag==0){printf("进程%s已经运行完成!\n\n",s->name);s->flag=1;}s=s->next;flag1=judge(s);}printf("--------------------------------------------\n"); }void main(){printf("请输入进程总数\n");scanf("%d",&N);creatPCB();creatProcess(N);}。