还剩19页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
中南大学《操作系统》课程设计报告设计报告题目处理机调度模拟程序学院信息科学与工程学院专业电子信息0802姓名王昊学号学指导教师张晓完09080925成时间年月日2011712Prtl结束四.操作截图:主界面设计(1,2,3算法4退出)K S作系统课程设HSb理机选良.exeCOMPUTEROSBORKBywanghaoClass2cHooseoneoFfoHov/insr:1-PRIORITY.
2.ROUNDROBIN.3-SHORTTASK-
4.EXIT-pleaseenter*yomcHoice;算法L动态优先级算法算法2时间片轮转法算法3短作业优先法七・s五.程序源代码#include stdio.h#include stdlib.h#include string.h#include time.h typedef struct nodechar name
[10];int prio;int round;int cputime;int needtime;int count;char state;struct node*next;}PCB;PCB*Enish,*ready,*tail,*run;int N;firstinrun=ready;run-state=R,;ready=ready-next;int timesjvoidint i,xt;time11;srandunsigned timet;xt rand%10+1;二return xt;void prtlchar aiftouppera==,rprintfn namecputime needtimepriority state\nn;elseiftouppera==21printfn namecputime needtimepriority state\nn;elseprintfH namecputime needtimepriority state\nH;void prt2char a,PCB*qiftouppera==,rprintfn%-l Os%-1Od%-1Od%-1Od%c\nn,q-name,q-cputime,q-needtime,q-prio,q-state;elseiftouppera==,2,printfn%-l Os%-1Od%-1Od%-1Od%c\n\q-name,q-cputime,q-needtime,q-prio,q-state;elseprintfn%-lOs%-1Od%-1Od%-1Od%c\nH,q-name,q-cputime,q-needtime,q-prio,q-state;void prtchar algoPCB*p;prtlalgo;ifrun!=NULLprt2algo,run;p=ready;whilep!=NULLprt2algo,p;p=p-next;p=finish;whilep!=NULLprt2algo,p;p=p-next;getch;return;insert1PCB*qPCBint b;;s=qpl=ready;;r=plb=l;whilepl!=NULLb ifp1-prio=s-prio r=pl;pl=pl-next;elseb=0;ifr!=pl{r-next=s;s-next=pl;elses-next=pl;ready=s;insert2PCB*p2tail-ncxt=p2;tail=p2;p2-next=NULL;insert3PCB*qPCB*pl,*s,*r;int b;;s=qpl=ready;r=pl;;b l二whilepl!=NULLbifp1-needtime=s-needtimer=pl;pl=pl-next;elseb=0;ifr!=plr-next=s;s-next=pl;}elses-next=pl;ready=s;void create1char algPCB*p;int i,time,sjt,priost;char na
[10];ready=NULL;finish=NULL;run=NULL;printfnEnter nameand timeof process;printfH——\nn;fori=l;i=N;i++p=mallocsizeofPCB;printfnEnter name%dH,i;print;scanfn%sn,na;printfnRandom time%dn,i;printfH:n;sjt=timesj;printfM%d\n\sjt;printfnRandom priority%dn,i;printfn:n;printfn%d\nn,20-sjt;strcpyp-name,na;p-cputime=O;p-needtime=sjt;p-state=,w,;p-prio=20-sjt;ifready!=NULLinsert lp;else{p-next=ready;ready=p;printfH DisplayProcess OfPriority:\nH;printfH-——\nn;prtalg;run=ready;ready=ready-next;run-state=R,;void create2charalg{PCB*p;int i,time,sjt;char na
[10];ready=NULL;finish=NULL;run=NULL;printfHEnter nameand timeof roundprocess\nH;printfn-\nn;fori=l;i=N;i++p=mallocsizeofPCB;printfHEnter name%d\i;printfn:n;scanfn%sn,na;printfnRandom time%dH,i;printfn:n;sjt=timesj;printfn%d\nn,sjt;printfnRandom priority%4,i;print;printfn%d\nn,20-sjt;strcpyp-name,na;p-cputime=O;p-needtime=sjt;p-round=l;p-state=,w,;p-count=0;p-prio=20-sjt;ifready!=NULLinsert2p;elsep-next=ready;ready p;二tail=p;printfn DisplayProcess OfRoundrobin\nn;printfn--\nn;prtalg;run=ready;ready=ready-next;run-state=R,;void create3char algPCB*p;inti,time,sjt;charna
[10];ready NULL;二finish=NULL;run=NULL;printfnEnter nameand timeof process\nH;printfn——\nn;fori=l;i=N;i++p=mallocsizeofPCB;printfnEnter name%dH,i;printfn:n;scanfn%s\na;printfnRandom time%dn,i;print;sjt=timesj;printfH%d\nn,sjt;printfnRandom priority%d\i;printfn:n;printfH%d\n,\20-sjt;strcpyp-name,na;p-cputime=O;p-needtime=sjt;p-state=,w,;p-prio=20-sjt;ifready!=NULLinsert lp;else{p-next=ready;ready=p;printfH DisplayProcess OfPriority:\nH;printfH-——\nn;prtalg;run=ready;ready=ready-next;run-state=R;prioritychar algwhilerun!=NULLrun-cputime=run-cputime+1;run-nccdtimc=run-nccdtimc-l;run-prio=run-prio-l;ifrun-needtime==O run-next=finish;finish=run;run-state=,C,;run NULL;二ifready!=NULL firstinQ;elseifready!=NULLrun-prioready-prio run-state=,W,;insert!run;firstin;prtalg;}roundrunchar algwhilerun!=NULLrun-cputime=run-cputime+1;run-needtime=run-needtime-1;run-count=run-count+l;run-prio=run-prio-l;ifrun-needtime==O{run-next=finish;finish=run;run-state=,C,;run=NULL;ifready!=NULL firstin;}elseifrun-count==run-round{run-count=0;ifready!=NULLrun-state=,W,;insert2run;firstin;目录
一、课程设计题目3
二、基本概念及思想3
三、部分程序主要流程图9
四、操作截图11
五、程序源代码12
六、心得体会及总结21prtalg;shorttaskchar algwhilerun!=NULLrun-cputime=run-cputime+l;run-needtime=run-needtime-1;run-prio=run-prio-1;ifrun-needtime==O run-next=finish;finish=run;run-state=C,;run=NULL;ifready!=NULLfirstin;elseifready!=NULLrun-needtimeready-needtimerun-state=,W,;insert1run;firstin;prtalg;return;menu{char algo;printfn\n\n COMPUTEROS WORK\n\nf;printfH\n\n BywanghaoClass2\n\n\nn;printfn chooseone offollowing:\nn;printfn\n l.PRIORITY.\n\nn;printfn
2.ROUNDROBIN.\n\nH;printfn
3.SHORTTASK.\n\nn;printfn
4.EXIT.\n\n\nn;printfH\n pleaseenter yourchoice:;scanfn%cn,algo;ifalgo==1printfnEnter processnumber\nn;%scanf d”,N;create1algo;priorityalgo;elseifalgo==t2,printfHEnter processnumber\nn;scanfn%dn,N;create2algo;roundrunalgo;elseifalgo==3printfnEnter processnumber\nH;%scanf d”,N;create3algo;shorttaskalgo;return;else ifalgo==,4,exitO;main{whilelmenu;六.心得体会及总结处理机调度问题实际上是处理机分配问题只有那些参与竞争处理机所必须的资源都已得到满足的进程才能享受竞争处理机的资格,这时它们处于内存就绪状态这些必须的资源包括内存、外设及有关数据结构等作业调度程序必须先调用存储管理、外设管理,分配资源,让它们能有竞争资格为了提高资源利用率,一部分在内存中处于就绪、等待状态而短期内不能执行进程、作业换出内存,所以外存中除了处于后备状态的作业,还有处于就绪状态的作业这就需要一定的方法和策略来为这部分作业分配空间学习完《操作系统原理》课程后,进行的这次全面的综合训练,通过课程设计,使我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力,并与编程相结合应用于实际中一.课程设计题目课题理机调度模拟程序选择一个调度算法,实现处理机调度1:设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个也就是说能运行的进程数大于处理机个数为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念设计要求)进程调度算法包括时间片轮转法,短作业优先算法,最高响应比1优先算法)可选择进程数量2)本程序包括三种算法,可用语言实现,执行时在主界面选择算法3C(可用函数实现),进入子页面后输入进程数及每个进程的运行时间,每个进程的优先数由随机函数产生且优先数随等待时间而变化,执行,显示结果二.基本概念及思想:
(1)进程的创建由系统为某个进程设置一个进程控制块PCB,用于对进程进行控制和管理进程任务完成,由系统收回其PCB,该进程便消亡
(2)进程的三种状态运行、就绪、完成进程的三种状态可以通过设计三个链队列来实现finish为完成队列的头指针,ready为就绪队列的头指针,tail为循环轮转法队列的尾指针因为每一时刻,CPU只能运行一个进程,所以运行队列只有一个run指针指向当前运行进程
(3)进程调度的功能按照一定的策略从就绪队列的多个进程中选取一个进程,使其获得CPU而运行
①动态优先数调度算法思想为每一个进程设一个优先数,它总是把处理机给就绪队列中具有最高优先级的进程初始的进程优先数是随机产生的,随着进程的运行对优先数进行调整,每次运行时都是从就绪队列中选取优先数最大的进程运行,所以将就绪队列按照优先数的大小从高到低排序,这样,每次取对首进程即可将进程按优先数的大小排列在就绪队列中,每次选取就绪队列中优先权最高的进程首先占用处理机优先数由随机函数产生进程最初的优先数优先数的动态变化进程每执行一次优先数-1优先数随着进程的执行进行调整,每次执行时都从就绪队列中选取优先数最大的进程投入运行
②时间片轮转调度算法思想将所有进程按照先来先服务的规则排成一个队列,把CPU分配给就绪队列的队首进程,并规定它的执行时间(称此时间为时间片),当时间片用完但并未执行结束时,剥夺该进程的执行,将其链接到就绪队列的队尾,等待下一次的选择将就绪队列的队首指针投入运行
③短作业优先调度算法(不可剥夺式的)思想根据估计运行时间的长短,将各个进程排成一个就绪队列(估计运行时间最短的进程排在队首),每次运行将队首进程投入运行,直到运行结束,将此进程连接到完成队列的队尾然后,再将下一个队首进程投入运行,直到所有的进程都运行完毕-►-结束PCB结构体typedef struct node/*进程时间轮转时间片*/{char name
[10];int pid;/*进程的标号*/int prio;/*优先级*/int round;/*时间片*/int cputime;/*进程占用cpu的时间*/int runtime;/*进程运行所用的时间*/int waittime;/*进程的等待时间*/intlength;int count;char state;/*进程的长度*//*计数器*//*进程的状态*/struct node*next;/*链指针*/}PCB;PCB结构体用于标识进程的创建与撤消链指针;PCB finish,*ready,*tail,*nin.Finish完成队列的首指针,用于标识完成队列;Ready就绪队列的首指针,用于标识就绪队列;;Run运行队列的首指针,用于标识运行队列;;Tail循环轮转队列的尾指针;
2.3Create1,create2,create3分别为创建进程的函数
①Create1按照优先级调度算法创建进程,用户输入进程名及进程所需的时间后,创建每个进程的PCB,将每个进程的PCB调用函数insertlO按照优先数从高到低排列到就绪队列中
②create2按照时间片调度算法创建进程,用户输入进程名及进程所需的时间后,创建每个进程的PCB,将每个进程的PCB调用函数insert2将每个进程PCB按照输入的先后顺序插入到就绪队列的末尾
③creates按照短作业优先调度算法创建进程,用户输入进程名及进程所需的时间后,创建每个进程的PCB,将每个进程的PCB调用函数insert3按照作业估计执行时间的长短从高到低排列到就绪队列中就绪队列创建好后,将队列当中的第一个PCB变为运行态“R”,将run指针指向它,ready指针后移,作为就绪队列的新头指针,然后调用调度算法注意每个时刻只能有一个进程处于运行态
2.4insertl,insert2,insert3分别为插入函数这三个函数完成的是就绪队列的创建和管理
①insertl的功能是将未完成且优先数小于其它进程的PCB按进程优先数的顺序插入到就绪队列中去
②insert2的功能是将执行了一个时间片且还未完成的进程的PCB插入到就绪队列的队尾
③inserts的功能是将未完成且作业的执行时间小于其它进程的PCB按进程的作业的执行时间的长短插入到就绪队列中去
2.5priority优先数调度算法
①假定系统有三个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为typedefstructnode intpid;/*进程的标号*/int prio;/*优先级*/int cputime;/*进程占用cpu的时间*/int runtime;/*进程运行所用的时间*/char state;/*进程的状态*/structnode*next;/*链指针*/}PCB;进程名,优先数,进程占用的时间,进程到完成还需的时间,状态cpu进程名作为进程的标识,假设三个进程的进程名分别为Pl,P2,P3O进程占用的时间;假设进程已经运行的单位时间数,初始值为“0”cpu优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行状态;有三种状态,“就绪”状态,“运行”状态和“完成”状态三个进程的初始状态都为“就绪”,用“w”表示,当一个进程运行结束后,它的状态为“完成,用“F”表示,当一个进程正在占用cpu,它的状态为“运行”状态
②在每次运行所设计的优先数调度程序之前,为每个进程随机确定它的“优先数”和“要求运行时间”
③为了调度方便,把三个进程按随机产生的优先数从大到小连成队列用一单元指出队首进程,用指针指出队列的连接情况
④优先数调度总是选队首进程运行采用动态改变优先数的办法,进程每运行一次优先数就减“1”而是执行优先数-1要求运行时间-1进程占用cpu的时间+1,来模拟进程的一次运行
⑤进程运行一次后,若要求运行时间〉0,则再将它插入就绪队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“完成”(F),且退出队列
⑥若“就绪”状态的进程队列不为空,则重复上面
(4)和
(5)的步骤,直到所有进程都成为“完成”状态
⑦在设计的程序中有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化及状态
⑧为三个进程随机确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程注意进程的优先数值越小,则代表其优先权越高
2.6时间片轮转法调度算法roundrun0
①假定系统有三个进程,每一个进程用一个进程控制块PCB来代表进程控制块的格式为进程名,进程占用的时间,进程到完成还需的时间,时间片,计数器,状态cpu进程名一一作为进程的标识,假设三个进程的进程名分别是pl,p2,p3o时间片一一时间片轮转循环所需的时间总数计数器一一对进程执行时间进行计数进程占用的时间一一假设进程已经运行的单位时间数,初始值为“0”cpu状态一一有三种状态,“就绪”状态,“运行”状态和“完成”状态三个进程的初始状态都为“就绪”,用“w”表示,当一个进程运行结束后,它的状态为“完成”,用“F”表示,当一个进程正在占用cpu时,它的状态为“运行”状态
②每次运行所设计的时间片轮转调度程序之前,为每个进程任意确定它的“要求运行时间”
③把三个进程按先来先服务的顺序排成循环队列,用指针指出队列连接情况时间片轮转调度总是选择ready指针指示的进程运行而是执行进程到完成还需的时间一1进程占用cpu的时间+1计数器+1来模拟进程的一次运行,表示进程已经运行过一个单位的时间
2.7短作业优先法调度算法shortjob0
①假定系统有三个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为进程名,进程占用的时间,进程到完成还需的时间,状态cpu进程名一一作为进程的标识,假设三个进程的进程名分别为Pl,P2,P3o进程占用的时间一一假设进程已经运行的单位时间数,初始值为“0”cpu状态一一有三种状态,“就绪”状态,“运行”状态和“完成”状态三个进程的初始状态都为“就绪”,用“w”表示,当一个进程运行结束后,它的状态为“完成”,用“F”表示,当一个进程正在占用cpu时,它的状态为“运行”状态
②在每次运行所设计的短作业优先调度程序之前,为每个进程任意确定它的“要求运行时间”
③为了调度方便,把三个进程按任意给定的作业长短进行排序用一单元指出队首进程,用指针指出队列的连接情况每次取对首进程即可
④短作业调度总是选队首进程运行进程每运行一次,要求运行时间-1进程占用cpu的时间+1来模拟进程的一次运行
⑤进程运行一次后,若要求运行时间〉0,则再将它插入就绪队列按作业长短插入,目置队首标志;若要求运行时间=0,则把它的状态修改成“完成”F,且退出队列
⑥若“就绪”状态的进程队列不为空,则重复上面4和5的步骤,直到所有进程都成为“完成”状态
⑦在设计的程序中有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化及状态
⑧为三个进程随机确定“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程
2.8界面设计主界面选择调度算法;子界面输入进程数,进程名及进程所需的时间;利用c语言中的画图函数及清屏函数设计界面三.部分程序主要流程图:main。