课程设计的目的和意义.docx_第1页
课程设计的目的和意义.docx_第2页
课程设计的目的和意义.docx_第3页
课程设计的目的和意义.docx_第4页
课程设计的目的和意义.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

一 课程设计的目的和意义目的:1. 根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容。2. 通过调试典型例题或习题积累调试程序的经验。3. 通过完成辅导教材中的编程题,逐渐培养学生的编程能力,用计算机解决实际问题的能力。意义:1. 有助于加深我们对操作系统这门课程的理解,我们在课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定难度。通过课程设计,我们可以真正理解其内涵。2. 有利于我们逻辑思维的锻炼,程序设计能直接有效地训练学生的创新思维、培养分析问题、解决问题能力。即使是一个简单的程序,依然需要学生有条不理的构思。3. 有利于培养严谨认真的学习态度,在程序设计过程里,当我们输入程序代码的时候,如果不够认真或细心,那么可能就导致语法错误,从而无法得出运行结果。那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。二 进程调度算法模拟1 . 设计目的通过动态优先权算法的模拟加深进程概念和进程调度过程的理解。 2 . 设计要求写出带有完整标注的程序代码(可以用Java或C/C+实现,要求每个语句都要有标注)。3 . 使用动态优先权的进程调度算法的模拟3.1算法思路分析动态优先权是指在创建进程时所赋予的优先权,可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能.若所有的进程都具有相同的优先权初值,则显然是最先进入就绪队列的进程,将因其动态优先权变得最高而优先获得处理机,此即FCFS算法.因此,通过c程序模拟动态优先权程序调度算法,主要思路和方法就是,通过结构体模拟计算机的控制模块,构造一个PCB结构体即进程控制块结构体,用来记录当前进程的的相关状态信息,包括进程标识符、处理机状态、进程调度信息、进程控制信息。并通过C语言模拟计算机的动态优先调度算法,对构建的PCB进程进行模拟调度和运行,从而实现用计算机对进程的调度过程进行过程模拟。主要要构建的函数有:进程控制块函数input:输入各进程的基本信息进程优先级排列函数sort:用于对进程的优先级进行排列当前进程显示函数disp:用于显示当前进程进程查看函数check:检查等待队列的进程是否进入就绪队列进程就绪函数running:进程运行时间到,置就绪状态系统将所有就绪队列按优先级高低排成一个队列,每次调度时,将CPU分配给优先级最高的进程,并令其执行一个时间片,而后中断,寻找并运行下一个优先级最高的进程。而所有进程的优先权在随进程的推进或随其等待时间的增加而增加,而被调度之后的程序则降低一定的优先级,从而使所有进程都有运行的机会,从而保证系统能在给定的时间内响应所有用户的请求。优先权的变化规律可描述为:由于等待时间与服务时间之和,就是系统对该作业的响应时间,故该优先权又相当于响应比RP,即优先权=等待时间+要求服务时间要求服务时间。被运行过的进程优先权减一。3.2算法流程图主流程图3.3主要数据结构设计1. 包含PCB信息的结构体(1) 进程标识数ID。(2) 进程优先级PRIORITY,并规定优先级越大的进程,其优先权越高。(3) 进程已占用的CPU时间CPUTIME。(4) 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0(5) 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。(6) 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。(7) 进程状态STATE。(8) 队列指针NEXT,用来将PCB排成队列。用算法描述为struct pcb / 定义进程控制块PCB char name10; /定义进程名称 char state; /进程状态int super; /优先数 int ntime; /需要运行的时间int rtime; /已占用的CPU时间 struct pcb* link; /指向进程的下一个进程的指针 *ready=NULL,*p;2. 用队列结构存储进程序列3.4算法代码实现1.建立对进程进行优先级排列函数void sort() / 建立对进程进行优先级排列函数 PCB *first, *second; /定义指向当前进程和插入进程的指针 int insert=0;/各进程按优先数大小从大到小排列 if(ready=NULL)|(p-super)(ready-super) /优先级最大者,插入队首 p-link=ready; /p进程的下一个进程为原队首进程 ready=p; /队首进程为优先级最大者 else /进程比较优先级,插入适当的位置中 first=ready;/队首进程不变 second=first-link; /第二个进程则在当前进程后面 while(second!=NULL)/while循环,各进程比较优先级 if(p-super)(second-super) /若插入进程比当前进程优先数大 /插入到当前进程前面 p-link=second; /当前进程赋给插入进程的后面那个进程 first-link=p;/插入进程在放在当前进程所在位置 second=NULL;/当前进程为空 insert=1; /进程的排列与各优先数不对应 else /插入进程优先数最低,则插入到队尾 first=first-link; /将第一个进程的下一进程赋给first second=second-link;/将第二个进程的下一进程赋给second if(insert=0) first-link=p; /若插入进程比当前进程优先数小,则插入到当前进程后面 2.建立进程控制块函数void input() /建立进程控制块函数 int i,num; /定义进程号以及进程个数 system(cls); /清屏 printf(n 请输入进程号:); /输出输入提示 scanf(%d,&num); /输入进程号 for(i=0;iname); /输入进程名 printf(n 输入进程优先数:);/输出输入进程优先数提示 scanf(%d,&p-super); /输入进程优先数 printf(n 输入进程运行时间:);/ 输出输入进程运行时间提示 scanf(%d,&p-ntime);/输入进程运行时间 printf(n);/换行 p-rtime=0;/已占用cpu时间为0 p-state=w;/进程状态为就绪 p-link=NULL;/当前进程的下一个进程为 sort(); / 调用sort函数 建立进程显示函数,用于显示当前进程void disp(PCB * pr) /建立进程显示函数,用于显示当前进程 printf(n qname t state t super t ntime t rtime n); printf(%st,pr-name);/显示进程名 printf(%ct,pr-state); /显示进程状态 printf(%dt,pr-super);/显示进程优先级 printf(%dt,pr-ntime); /显示进程需要运行的时间 printf(%dt,pr-rtime);/显示进程占用CPU时间 printf(n); /换行 进程查看函数,检查等待队列的进程是否进入就绪队列 void check() / 建立进程查看函数,检查等待队列的进程是否进入就绪队列 PCB* pr; printf(n * 当前正在运行的进程是:%s,p-name); / 输出当前正在运行的进程 提示 disp(p);/显示当前 运行进程 pr=ready; printf(n *当前就绪队列为:n); /显示就绪队列状态 while(

温馨提示

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

评论

0/150

提交评论