《操作系统第五次实验进程调度模拟(共16页).doc》由会员分享,可在线阅读,更多相关《操作系统第五次实验进程调度模拟(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上操作系统课程实验报告姓名学号系计算机任课教师贺辉指导教师贺辉评阅教师贺辉实验地点B102实验时间2015.0507实验编号与实验名称:第5次 进程调度模拟实验目的:进程调度是处理机管理的核心内容。通过本实验可以加深理解有关进程控制块(进程的概念)、进程队列的概念及进程调度算法的理解并体会和了解优先级和时间片轮转调度算法的具体实施办法。实验内容及要求(详见实验讲义):设计进程控制块PCB表结构,分别适用于优先级调度算法和轮转调度算法。建立进程就绪队列。对两种不同算法编制入队子程序。编制两种进程调度算法:1)优先级调度;2)轮转调度本实验要求用C语言编写和调试一个简单的进
2、程调度模拟程序。须在实验报告中给出详细算法描述和流程图。实验用到的软件(:)c-free,word,ProcessOn实验内容、关键步骤(流程图、代码等)及结果分析(70分)算法描述:1、 轮转调度:轮转调度中,每个进程都会被分配一个相同的时间片,允许该进程在该时间段中运行。如果在时间片结束时该进程还在运行,则将剥夺CPU并分配给另一个进程。如果该进程在时间片结束前阻塞或结束,则CPU立即进行切换。其中每个进程分配的相同时间片的大小是有自己来设计的,一个进程如果在该时间片当中没有结束,则将会被强制结束,将CPU分配给下一个进程,该进程将会被插入整个进程队列的最后,如果一个进程在规定的时间结束,
3、则将CPU立刻分配给下一个进程,该进程从进程队列中移除。2、 优先级调度:轮转调度的基本思想就是:每个进程被赋予一个优先级,允许优先级最高的可运行进程先运行。该算法的实现跟轮转调度非常像,只不过在进程表初始化的时候,每个进程都会被赋予一个优先级数,进程之间都会以优先级从高到低进行排序,之后开始执行进程,在规定的时间片当中,如果进程能够执行完毕,就从进程队列当中移除该进程,否则的话,减小该进程的优先级(在本作业当中是将优先级减10),插入进程队列当中,整个进程队列依旧是按照优先级从高到低的顺序进行排序,之后继续执行,判断进程队列是否为空,如果不为空,则就绪队列的首进程投入运行。最后直到进程队列为
4、空。设计的程序流程图如下:程序的输出信息如下:选择算法:P/R(优先级调度/轮转调度)p输入进程数:5输入进程号和进程时间1 22 33 44 55 6 优先数算法输出信息:*进程号 cpu时间 所需时间 优先级 状态1 0 2 98 R2 0 3 97 W3 0 4 96 W4 0 5 95 W5 0 6 94 W进程号 cpu时间 所需时间 优先级 状态2 0 3 97 R3 0 4 96 W4 0 5 95 W5 0 6 94 W1 1 1 88 W进程号 cpu时间 所需时间 优先级 状态3 0 4 96 R4 0 5 95 W5 0 6 94 W1 1 1 88 W2 1 2 87
5、W进程号 cpu时间 所需时间 优先级 状态4 0 5 95 R5 0 6 94 W1 1 1 88 W2 1 2 87 W3 1 3 86 W进程号 cpu时间 所需时间 优先级 状态5 0 6 94 R1 1 1 88 W2 1 2 87 W3 1 3 86 W4 1 4 85 W进程号 cpu时间 所需时间 优先级 状态1 1 1 88 R2 1 2 87 W3 1 3 86 W4 1 4 85 W5 1 5 84 W进程号 cpu时间 所需时间 优先级 状态2 1 2 87 R3 1 3 86 W4 1 4 85 W5 1 5 84 W1 2 0 78 F进程号 cpu时间 所需时间
6、优先级 状态3 1 3 86 R4 1 4 85 W5 1 5 84 W2 2 1 77 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 1 4 85 R5 1 5 84 W2 2 1 77 W3 2 2 76 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 1 5 84 R2 2 1 77 W3 2 2 76 W4 2 3 75 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态2 2 1 77 R3 2 2 76 W4 2 3 75 W5 2 4 74 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态3 2 2 76 R
7、4 2 3 75 W5 2 4 74 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 2 3 75 R5 2 4 74 W3 3 1 66 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 2 4 74 R3 3 1 66 W4 3 2 65 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态3 3 1 66 R4 3 2 65 W5 3 3 64 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 3 2 65 R5 3 3 64 W3 4 0
8、56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 3 3 64 R4 4 1 55 W3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 4 1 55 R5 4 2 54 W3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 4 2 54 R4 5 0 45 F3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 5 1 44 R4 5 0 45 F3 4 0 56 F2 3 0 67 F1
9、2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 6 0 34 F4 5 0 45 F3 4 0 56 F2 3 0 67 F1 2 0 78 F选择算法:P/R(优先级调度/轮转调度)p输入进程数:5输入进程号和进程时间1 22 33 44 55 6 优先数算法输出信息:*进程号 cpu时间 所需时间 优先级 状态1 0 2 98 R2 0 3 97 W3 0 4 96 W4 0 5 95 W5 0 6 94 W进程号 cpu时间 所需时间 优先级 状态2 0 3 97 R3 0 4 96 W4 0 5 95 W5 0 6 94 W1 1 1 88 W进程号 cpu时间 所需时间
10、 优先级 状态3 0 4 96 R4 0 5 95 W5 0 6 94 W1 1 1 88 W2 1 2 87 W进程号 cpu时间 所需时间 优先级 状态4 0 5 95 R5 0 6 94 W1 1 1 88 W2 1 2 87 W3 1 3 86 W进程号 cpu时间 所需时间 优先级 状态5 0 6 94 R1 1 1 88 W2 1 2 87 W3 1 3 86 W4 1 4 85 W进程号 cpu时间 所需时间 优先级 状态1 1 1 88 R2 1 2 87 W3 1 3 86 W4 1 4 85 W5 1 5 84 W进程号 cpu时间 所需时间 优先级 状态2 1 2 87
11、R3 1 3 86 W4 1 4 85 W5 1 5 84 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态3 1 3 86 R4 1 4 85 W5 1 5 84 W2 2 1 77 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 1 4 85 R5 1 5 84 W2 2 1 77 W3 2 2 76 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 1 5 84 R2 2 1 77 W3 2 2 76 W4 2 3 75 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态2 2 1 77 R3 2 2 76 W4 2 3
12、 75 W5 2 4 74 W1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态3 2 2 76 R4 2 3 75 W5 2 4 74 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 2 3 75 R5 2 4 74 W3 3 1 66 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 2 4 74 R3 3 1 66 W4 3 2 65 W2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态3 3 1 66 R4 3 2 65 W5 3 3 64 W2 3 0 67 F1
13、 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 3 2 65 R5 3 3 64 W3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 3 3 64 R4 4 1 55 W3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态4 4 1 55 R5 4 2 54 W3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 4 2 54 R4 5 0 45 F3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu
14、时间 所需时间 优先级 状态5 5 1 44 R4 5 0 45 F3 4 0 56 F2 3 0 67 F1 2 0 78 F进程号 cpu时间 所需时间 优先级 状态5 6 0 34 F4 5 0 45 F3 4 0 56 F2 3 0 67 F1 2 0 78 F代码如下:#include stdio.h#include stdlib.h#include string.h#include ctype.h#include conio.h#include malloc.htypedef struct node char name10; int prio; int round; int cpu
15、time; int needtime; int count; char state; struct node *next;PCB;PCB *finish,*ready,*tail,*run;int N; void firstin() run=ready; run-state=R; ready=ready-next; void prt1(char a) if(toupper(a)=P) printf( 进程号 已占用CPU时间 所需时间 优先数 状态n); else printf( 进程号 已占用CPU时间 所需时间 计数 时间片长度 状态n); void prt2(char a,PCB *q)
16、 if(toupper(a)=P) printf( %-10s%-15d%-10d%-7d %cn,q-name, q-cputime,q-needtime,q-prio,q-state); else printf( %-10s%-10d%-10d%-10d%-10d %-cn,q-name, q-cputime,q-needtime,q-count,q-round,q-state); void prt(char algo) PCB *p; prt1(algo); if(run!=NULL) prt2(algo,run); p=ready; while(p!=NULL) prt2(algo,p
17、); p=p-next; p=finish; while(p!=NULL) prt2(algo,p); p=p-next; getch(); void insert1(PCB *q) PCB *p1,*s,*r; int b; s=q; p1=ready; r=p1; b=1; while(p1!=NULL)&b) if(p1-prio=s-prio) r=p1; p1=p1-next; else b=0; if(r!=p1) r-next=s; s-next=p1; else s-next=p1; ready=s; void insert2(PCB *p2) tail-next=p2; ta
18、il=p2; p2-next=NULL; void create1(char alg) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; printf(输入进程号、运行时间:n); for(i=1;iname,na); p-cputime=0; p-needtime=time; p-state=w; p-prio=100-time; if(ready!=NULL) insert1(p); else p-next=ready; ready=p; printf( 优先数算法输出信息:n); printf(*n); p
19、rt(alg); run=ready; ready=ready-next; run-state=R; void create2(char alg) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; printf(Enter name and time of round processn); for(i=1;iname,na); p-cputime=0; p-needtime=time; p-count=0; p-state=w; p-round=2; if(ready!=NULL) insert2(p); els
20、e p-next=ready; ready=p; tail=p; printf( 轮转调度算法输出信息n); printf(*n); prt(alg); run=ready; ready=ready-next; run-state=R;void priority(char alg)while(run!=NULL) run-cputime=run-cputime+1; run-needtime=run-needtime-1; if(run-needtime=0) run-next=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL)
21、 firstin(); prt(alg); void roundrun(char alg) while(run!=NULL) run-cputime=run-cputime+1; run-needtime=run-needtime-1; run-count=run-count+1; if(run-needtime=0) run-next=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL) firstin(); else if(run-count=run-round) run-count=0; if(ready!=NULL) run-state=W; insert2(run); firstin(); prt(alg); int main() char algo; printf(选择算法:P/R(优先级算法/时间片轮转算法);输入e结束n); scanf(%c,&algo); printf(输入进程数:n); scanf(%d,&N); if(algo=P|algo=p) create1(algo); priority(algo); else if(algo=R|algo=r) create2(algo); roundrun(algo);