南昌大学操作系统实验报告_第1页
南昌大学操作系统实验报告_第2页
南昌大学操作系统实验报告_第3页
南昌大学操作系统实验报告_第4页
南昌大学操作系统实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、南昌大学实验报告 -(3)进程调度算法的实现学生姓名: 张皓然 学 号: 5501215001 专业班级: 本硕151 实验类型: 验证 综合 设计 创新 实验日期: 2017.5.31 实验成绩: 一、实验目的通过实验加强对进程调度算法的理解和掌握。二、实验内容编写程序实现进程调度算法,具体可以编写程序实现优先度高者调度算法或先来先服务算法。三、实验要求1、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤优先度高者调度算法实验代码:#include #include #include #include #include #define runtime 2#define o

2、verflow -2#define null 0enum sta run, wait, finished ;/枚举类型sta,标志三种状态time_t t; /system clockstruct blockint time_used;int prior;/定义结构体,使用时间,优先级typedef struct prochar name20;enum sta status;int time_required;int arrive_time;struct block switch_block;struct pro *next;*pcb;/定义pcb块pcb ready;void menu();

3、void insertpcb(pcb newp) /插入至就绪队列pcb p;p = (pcb)malloc(sizeof(struct pro);if (!p)exit(overflow);p = ready;if (p-next = null)newp-next = ready-next;ready-next = newp;elsewhile (newp-switch_block.priornext-switch_block.prior&p-next != null)p = p-next;newp-next = p-next;p-next = newp;void creat_pcb() /

4、创建一个进程pcb newp;newp = (pcb)malloc(sizeof(struct pro);if (!newp) exit(overflow);newp-status = wait;time(&t);newp-arrive_time = t;printf(process name:);scanf(%s, newp-name);printf(priority:);scanf(%d, &newp-switch_block.prior);printf(arrive time:);scanf(%d, &newp-arrive_time);printf(cputime_required:)

5、;scanf(%d, &newp-time_required);newp-switch_block.time_used = 0;insertpcb(newp);menu();void printpcb() /打印现状pcb p;if (ready-next) printf(name status priority server_time arrive_time cputime_usedn);for (p = ready-next; p != null; p = p-next)printf(%s, p-name);switch (p-status)case wait:printf( wait);

6、 break;case run:printf( run); break;case finished:printf( finished); break;printf(%7d, p-switch_block.prior);printf(%15d, p-time_required);printf(%20d, p-arrive_time);printf(%13d, p-switch_block.time_used);putchar(n);else printf(queue is empty!n);void switchprocess() /将内存中的进程切换至外存char temp20;pcb p,

7、q;if (ready-next)printf(input process name:);scanf(%s, temp);for (p = ready; p != null&strcmp(temp, p-next-name) != 0; p = p-next);if (p != null)q = p-next;p-next = q-next;printf(remove %s successfully!n, q-name);free(q);printpcb();else printf(found no processn);else printf(queue empty!n);menu();voi

8、d runprocess() /进程调度pcb p = ready-next;if (p)printf(%s is running.n, p-name);p-status = run;p-switch_block.prior-;p-switch_block.time_used += runtime;if (p-switch_block.time_used = p-time_required)p-status = finished;printpcb();ready-next = p-next;printf(%s have been removed from the ready_queue.n,

9、p-name);free(p);elseprintpcb();printf(%s have used up the run_timen, p-name);p-status = wait;ready-next = p-next;insertpcb(p);else printf(queue empty!n);menu();void menu()/选择菜单int coos;printf(1.creat a processn);printf(2.run a processn);printf(3.remove a processn);printf(4.exitn);printf(choose(1-4):

10、);scanf(%d, &coos);switch (coos)case 1:creat_pcb(); break;case 2:runprocess(); break;case 3:switchprocess(); break;case 4:exit(0); break;int main()/clrscr();ready = (pcb)malloc(sizeof(struct pro);if (!ready) exit(overflow);ready-next = null;menu(); return 0;实验过程:优先度高者调度算法实验结果截图:先创建进程a、b、c,设a进程优先级为2,

11、到达时间为2,cpu处理时间为1;设b进程优先级为5,到达时间为0,cpu处理时间为6;设c进程优先级为4,到达时间为2,cpu处理时间为2;设定进程a、b、c开始运行进程,首先运行0时刻到达的优先级最高的进程b进程b在运行运行结束后,进程b的优先级变为4,cpu使用时间为2,此时进程b和c优先级相同,系统仍然调用进程b;还是进程b再次运行进程b以后,b的优先级掉为3,而且进程b还差2个时间单位才能运行结束,此时c为优先级最高的进程,系统调用进程c调度进程c因为进程c的cpu需要时间仅为2个时间单位,所以进程c运行结束,finished,c被移除就绪序列;进程b回归进程c结束然后系统重新调用进

12、程b,b运行结束;进程b结束调度进程a最后系统调度优先级最低的进程a,结束进程调度过程,队列空。先来先服务算法:#include#includeusingnamespacestd;/FCFSstructprocesscharname10;doublearrivetime;/到到时间doubleservetime;/服务时间doublestarttime;/开始时间doublefinnishtime;/完成时间doublecircletime;/周转时间doubledcircletime;/带权周转时间a100;/用结构体存放各进程的相关信息intmain()inti,j,k,n;process

13、temp;coutn;cout请输入进程的信息(包括进程名、进程到达时间、进程服务时间):n;for(i=0;in;i+)cout请输入第i+1ai.arrivetimeai.servetime;for(i=0;in;i+)for(j=0;ji;j+)if(ai.arrivetimeaj.arrivetime)temp=ai;ai=aj;aj=temp;/按照FCFS算法对进程进行排序coutnFCFS进程调度顺序为:n;for(k=0;kn;k+);coutendl;a0.starttime=a0.arrivetime;a0.finnishtime=a0.

14、servetime+a0.starttime;a0.circletime=a0.finnishtime-a0.arrivetime;a0.dcircletime=a0.circletime/a0.servetime;/计算第一个进程的相关信息for(i=1;in;i+)ai.starttime=ai-1.servetime+ai-1.starttime; ai.finnishtime=ai.servetime+ai.starttime;ai.circletime=ai.finnishtime-ai.arrivetime;ai.dcircletime=ai.circletime/ai.serve

15、time;/计算其他进程的相关信息coutn进程调度列表:n;cout名称setw(10)到达时间setw(10)服务时间setw(10)开始时间setw(10)完成时间setw(10)周转时间setw(14)带权周转时间n;for(i=0;in;i+)setw(10)ai.arrivetimesetw(10)ai.servetimesetw(10)ai.starttimesetw(10)ai.finnishtimesetw(10)ai.circletimesetw(14)ai.dcircletimeendl;return0;实验结果及其解释:周转时间=完成时间-到达时间带权周转时间=周转时间/服务时间很明显地观察到先到达的进程先开始运行,直到该进程结束运行后才调度下一个进程。进程调度顺序为D、C、A、B,实现了First Come First Served。五、实验体会或对改进实验的建议本次

温馨提示

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

最新文档

评论

0/150

提交评论