《操作系统原理与Linux》课程设计报告.doc_第1页
《操作系统原理与Linux》课程设计报告.doc_第2页
《操作系统原理与Linux》课程设计报告.doc_第3页
《操作系统原理与Linux》课程设计报告.doc_第4页
《操作系统原理与Linux》课程设计报告.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

操作系统原理与Linux课程设计报告专 业 班 级 学 号 姓 名 指导教师 完成时间 成 绩 进程调度算法一、设计题目:进程调度算法二、设计目的 通过对进程调度算法的编写加强对操作系统的加深了解,从而进一步的让我们清楚个进程之间的运行情况,对优先权算法与轮转调度算法的模拟加强对进程概念和进程的调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。三、设计要求要求实现先来先服务,短作业优先,时间片轮转,优先权调度算法四种算法并进行对比分析.四、设计思想说明1、先来先服务算法:按照进程进入就绪队列的先后次序,分派CPU,当前进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。在进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前进程让出CPU。先来先服务算法的实现过程如图所示。 设置信号量:就绪队列互斥信号量s,初值为1; 就绪队列中进程个数n,初值为0。2、短作业优先:选择就绪队列中估计运行时间最短的进程投入运行。通常后来的短作业不抢先正在执行的作业。比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间提高系统的吞吐量。3、时间片轮转调度算法:通过时间片轮转,提高进程并发性和响应时间特性,从而提高资源利用率。将系统中所有的就绪进程按照FCFS原则,排成一个队列。 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过CPU现场切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU(如阻塞)。 4、优先权调度算法:优先选择就绪队列中优先级最高的进程投入运行。分为:非抢占式优先级算法:仅发生在进程放弃CPU。抢占式优先级算法:可剥夺当前运行进程CPU。五、系统结构的说明六、数据结构的说明用C语言或C+语言来实现对N个进程采用优先算法以及轮转算法的调度。队列指针Next用来将多个进错控制块PCB链接为队列。void init();/*产生idle进程,输入用户进程数目,调用insert()*/void print(PCB *pcb);/*输出进程属性信息*/void print_init(PCB *pcb);/*输出所有PCB的初始值*/void insert();/*生成进程属性信息,插入进程就绪队列*/void Run_priority(PCB *pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/void block(PCB *pcb);/*调用destroy()将进程插入阻塞队列*/void wakeup();/*唤醒进程,插入就绪队列*/void proc_priority();/*优先权调度算法模拟*/void Run_loop(PCB *pcb);void proc_loop();/*轮转法调度算法模拟*/void update(PCB *pcb);/*更新进程信息*/void pushback_queue(PCB *queue,PCB *item);/*将item插入到队列的尾部*/void insert_queue(PCB *queue,PCB *item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/void sort_queue(PCB *&queue);/*对queue中的结点进行排序,按照优先级从大到小*/PCB *ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/七、程序清单:短作业优先:#include struct sjfchar name10;float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;sjf a100;void input(sjf *p,int N) int i;printf(intput the processs name & arrivetime & servicetime:nfor exmple: a 0 100n);for(i=0;i=N-1;i+)printf(input the %dth processs information:n,i+1);scanf(%s%f%f,&,&pi.arrivetime,&pi.servicetime);void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)int k; printf(run order:); printf(%s,);for(k=1;k%s,); printf(nthe processs information:n); printf(nnametarrivetservicetstarttfinishtzztdqzzn); for(k=0;k=N-1;k+) printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); /pai xuvoid sort(sjf *p,int N) for(int i=0;i=N-1;i+) for(int j=0;j=i;j+) if(pi.arrivetimepj.arrivetime) sjf temp; temp=pi; pi=pj; pj=temp; /yun xing jieduanvoid deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) int k; for(k=0;k=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; void sjff(sjf *p,int N)float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;sort(p,N); for(int m=0;mN-1;m+) if(m=0) pm.finishtime=pm.arrivetime+pm.servicetime; else pm.finishtime=pm-1.finishtime+pm.servicetime; int i=0; for(int n=m+1;n=N-1;n+) if(pn.arrivetime=pm.finishtime) i+; float min=pm+1.servicetime;int next=m+1;/m+1=n for(int k=m+1;km+i;k+) if(pk+1.servicetimemin) min=pk+1.servicetime; next=k+1; sjf temp; temp=pm+1; pm+1=pnext; pnext=temp; deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);void main() int N; printf(-短作业优先调度算法-n); printf(input the processs number:n); scanf(%d,&N); input(a,N); sjf *b=a; sjf *c=a; sjff(b,N);八、使用说明书(即用户手册)(内容包含如何登录、退出等操作说明)1、登陆Microsoft Visual C+6.0编译器,创建一个新文件;2、将每个算法的程序代码逐个输入并进行试调运行。(1)、先来先服务算法程序运行结果:当3个不同的进程进入系统时,系统会根据每一个进程的到达时间的快慢对进程的先后顺序进行调整排序,依次从最快到慢的程序开始运行。(2)、短作业优先算法程序运行结果:当3个不同的进程进入到系统时,系统会根据每一个进程的作业时间长短对进程的先后顺序进行调整排序,并依次从最短作业时间开始运行直到最后一个也是作业时间最长的一个便结束调度。(3)、高优先级优先调度算法程序运行结果:当3个不同进程进入系统时,系统根据每一个进程的优先级大小对进程的先后顺序进行调整排序,通过从高优先级的进程开始调度运行到最低级的进程便结束此次进程调度。(4)、优先级时间轮转算法程序运行结果:当3个不同的进程进入系统时,系统根据进程的优先级别对每一个进程进行时间片分配,从第一个进程开始调用运行,每一个进程运行结束便销毁,接着运行下一个进程直到所有的进程结束。3、退出Microsoft Visual C+6.0编译器九、体会,建议:通过本次综合课程设计使我体会到了团队合作的重要性,也终于明白了一个程序可以由几十个人甚至几百个人共同完成的道理。此次的课程设计对于像我这样基础不扎实的人来说确实有难度,不过好在有我们的组员的帮忙与合作,还是勉强完成了此次设计任务!而

温馨提示

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

评论

0/150

提交评论