进程管理和调度的算法_第1页
进程管理和调度的算法_第2页
进程管理和调度的算法_第3页
进程管理和调度的算法_第4页
进程管理和调度的算法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、进程管理和调度的算法实现一、实验目的进程调度是处理机管理的核心内容。本设计要求用高级语言编写和调试一 个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的 概念,并体会和了解优先权调度算法和时间片轮转调度算法的具体实施办法。二、实验内容1. 设计进程控制块pcb表结构,分别适用于优先权调度算法和时间片 轮转调度算法。2. pcb结构包括以下信息:进程名、进程优先数(或轮转时间片), 进程所占用的cpu时间,进程的状态,当前队列指针等。根据调度 算法的不同,pcb结构的内容可以作适当的增删。3. 建立进程就绪队列。对两种不同算法编制入链子程序。4编制两种进程调度算法:a)优先数

2、调度;b)时间片轮转调度。允许用户在程序运行时选择使用某一种调度算法。三、编程工具:c、java、vc或其它可视化语言平台任选四、具体设计要求及有关说明选用优先数算法和简单时间片轮转法对五个进程进行调度,每个进程可有 三种状态:运行状态(run)、就绪状态(ready)和完成状态。并假定初始状态 为就绪状态。prio/round/ prio表示进程优先数,round诗小;cput1me进程占用cpu时间;count计数器;needttme/进程到完成还要的cpu吋间;state/进程的状态;next/链指针2.进程控制块链结构如图所示。1.name设计进程控制块pcb结构如下:/进程标识符;r

3、un其run 程指针;中-当前运行进ready就绪队列头指针;tail就绪队列尾指针;finish完成队列头指针。为了便于处理,程序中进程的运行时间以时间片为单位计算。各进程的优 先数或轮转吋间片数以及进程需运行的吋间片数的初值均由用户给定。3. 程序说明:a)在优先数算法中,进程每执行一次,优先数减3, cpu时间片数加1,进 程还需要的时间片数减1。在轮转法中,采用固定时间片,时间片数为2,进程 每执行一次,cpu时间片数加2,进程还需要的时间片数减2,并排到就绪队列 的尾上。b)程序结构说明如下:整个程序由 create, f1rst1n, 1nsert1, insert2, print

4、, pr1sch 和 roundsch 过程组成。其中:create的功能是创建新的进程,即创立进程的pcb,并将此pcb链入到就 绪队列中去。firstin的功能是将就绪队列中的第一个进程投入运行。1nsert1的功能是把述未完成且优先数小于别的进程pcb按进程优先数的 顺序插入到就绪队列中。insert2是轮转法使用的过程,将执行了一个单位时间片数(为2)且还未 完成的进程的pcb插入到就绪队列的队尾。print打印每执行一次后的所有进程的状态,这里,就绪(等待)用 代表。prisch按优先数算法调度进程。roundsch按时间片轮转法调度进程。0)主程序中定义了 pcb的结构和其它变量n

5、umber进程数,algo为10个字 符长的字符串,存放耍求输入的算法的名,输入“priority”表示调用优先数算 法,输入“roundrobin”表示调用循环轮转法,要求用户在程序运行时输入其中 的一个。实现代码: #include,iostream/, #includestring #includecstring #1nclude lomanip using namcspacc std;sdefine n 50/函数声明void create();void insert1(struct pcb *, int); void 1nsert2(struct pcb *); void inser

6、t3(struct pcb *); void firstino ;void prtscho ;void roundscik);void print();/定义进程pcb struct pcb char namen;int pr10;int round;int cputime;int count;int needtime; char state;struct pcb *next; ; struct pcb *ready,*tail,*run,*finish; int number;string algo;/主函数int m3in() string name;int j=0;/初始化各队列read

7、y二null;tail二null;run二null;finish二null;loop:cout*end1;cout«*进程管理与调度*/z«endl;cout*-priority (优先数法)*endl;cout* roundrobtn (轮转法)«<endl;cout* exit(退出)*cndl;cout*end1;cout<<z/请输入其中一个选择的名称:; cin»alg0;if(algo二二priority"|algo二二priority"|algo二二roundrobirt |algo二二roundrob

8、in")创建进程pcb吸收回车符按优先数法调度/按吋间片轮转create (); cin. get ();if (algo二priority" | | algo二priority") prischo ;进程else roundsch();法调度进程else if (algo二二exit丨 |algo二二exit") 退岀程序cout<<,z退出程序! endl; exit (0);else cout«endl«z,输入错误!请重新输入,«endl«endl;goto loop;/重新去到选择界retur

9、n 0;按优先数大小将进程插入到队列 void insert1(struct pcb *q, int prio)struct pcb *pt;if (ready->prio<prio) q->next二ready;ready二q;else pt=ready;wh订e(pt->next!=null&&pt->next->prio>=prio) pt=pt->next;if (pt->next二二null) pt->next二q;tate q->next二nuix;else q->next=pt->nex

10、t; pt->next=q;按顺序将进程插入到队列队尾 void insert2(struct pcb *q) struct pcb *pt;pt=ready;wh订e(pt->next!=null) pt=pt->next; pt->next=q;q->next二null; /tail二q->next;按顺序将进程插入到完成队列队尾 void insert3(struct pcb *q) struct pcb *pt;if (finish!=null) pt二finish;while (pt->next!=null) pt=pt->next;p

11、t->next=q; q->next=null; else q->next二finish; ftntsh=q;finish->next二null;创建进程pcb void create() struct pcb *p;int i;char namen;int prio;int round;int needtime;int cputime;cout«请输入进程的数量:;cin>>number;按优先数创建进程if (algo二二priority丨 |algo二二priority")int k=0;for (i=0;inumber;i+) p

12、=(struct pcb *)malloc(sizeof(struct pcb); cout«/z请输入进程,z«i + l«,z名称(以'#'结朿); for(k=o;k<n;k+) cin>>namck;i f (name k =,#') break;namek二'0'strcpy(p->name,name);cout«请输入进程优先数:;cin>>prio;p->pri0=prio;cout«/z请输入进程需要cpu时间:;ci n>>needt

13、ime;p->needtime=necdtime;cout«z,进程运行一次占用cpu时间 cin>>cputime;p->cputime=cputime;p->c0unt=0;p->state二'w'if (ready!=null)insert1(p, p->pr10);else p->next二ready;ready二p;ready->next=null;tall=p;按时间片创建进程 if (algo二二roundrobin|algo二二roundrobtn)int k=0;for (i=0;inumber;

14、i+) p=(struct pcb *)malloc(sizeof(struct pcb); cout«/z请输入进程,z«i + l«,z名称(以'#'结朿):"for(k=0;k<n;k+) cin>namek;i f (name k =,#') break;namek=,0,; strcpy (p->name, name);cout«z,请输入进程需要cpu时间 cin>>needtime;p->needtime=needtime;cout«z,请输入进程轮转吋间片数:

15、; cin>>round;p->round=round;p->count=o;p->state二'w'p->cputtme=round;if (ready!=null)insert2(p);else p->next=ready;ready二p;ready->next二null;tail=p;将就绪队列第一个进程投入运行 void firstino run二ready;run->state二'r'ready二ready>next;/打印进程信息 void print0 struct pcb *pt;if

16、(algo二二priority丨 |algo二二priority")cout<<sctw(12) <<z,namez,<<setw(10) <<,count,<<sctw(10) <<,cputimc/,<<sctw( 10) <<,zneedtime,z;cout<<setw(9) <</zprio,z<<setw(9) <</zstate/z<<endl;if (run!二null)cout«sctw(12) 

17、71;run->name«sctw(9) «run->c0unt«sctw(8) «run->cputime «setw(ll)« run->needt 1 me;cout«setw(9) «run->pri0«setw(9) «run->state«endl;pt二ready;while(pt!=null)cout«setw (12)pt->namesetv(9)pt-countsetv(8)pt-cputimes etw(ll)&

18、#171;pt->needtime;cout<<setw(9)<<pt->prio<<setw(9)<<pt->state<<endl; pt=pt->next;pt二finish;while (pt!二null)cout<<sctw(12)<<pt>name<<sctw(9)<<pt->count<<sctw(8)<<pt->cputime<<s etw(ll)«pt->needt!me;co

19、ut<<setw(9) <<pt->prio<<setw(9)<<pt->state<<endl; pt=pt->next;if (algo=/zroundrobin,z | | algo=/zroundrobin") cout<<setw(12) <<,name,<<setw(9) <<,count,<<setw(10) <<,cputime,<<setw(l 0)"nccdtimc"cout<&

20、lt;setw(9) «,round,«setw(9) «,statez,«endl;if (run!=null) cout«setw(12) «run->name«setw(8) «run->c0unt«setw(9) «run->cputtme «sctw(10) «run->needtime;cout«setw(10)«run->r0und«setw(9)«run->state«end

21、l; pt二ready;while(pt!=null)cout«setw (12)pt->namesetv(8)pt-c0untsetv(9)pt-cputimes etw(10)«pt->needtime;cout«setw(10) «pt->r0und«setw(9) «pt->state«endl ; pt=pt->next;pt二finish;while (pt!二null)cout<<sctw(12)<<pt>name<<sctw(8)<

22、<pt->count<<sctw(9)<<pt->cputime<<s etw(10)«pt->needt!me;cout<<setw仃0) <<pt->r0und<<setw(9)<<pt->state<<endl; pt=pt->next;cout<<endl<<,zpress any key to continue. /z<<endl; cin. get ();/按优先数法调度进程 void prischo cout<<endl<<,/开始状态 z,<<endl;print ();while(ready!=null)f1rst1n0 ;run->pri0=run->pri0-3;run->needtime=run->needtime-run->cputime;run->cputtme=run->cp

温馨提示

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

评论

0/150

提交评论