南昌大学操作系统实验报告

上传人:1** 文档编号:359712 上传时间:2018-06-28 格式:DOCX 页数:11 大小:972.60KB
返回 下载 相关 举报
南昌大学操作系统实验报告_第1页
第1页 / 共11页
南昌大学操作系统实验报告_第2页
第2页 / 共11页
南昌大学操作系统实验报告_第3页
第3页 / 共11页
点击查看更多>>
资源描述
南 昌 大 学 实 验 报 告-( 3) 进 程 调 度 算 法 的 实 现学生姓名: 张皓然 学 号: 5501215001 专业班级: 本硕 151 实验类型: 验证 综合 设计 创新 实验日期: 2017.5.31 实验成绩: 一、实验目的通过实验加强对进程调度算法的理解和掌握。二、实验内容编写程序实现进程调度算法,具体可以编写程序实现优先度高者调度算法或先来先服务算法。三、实验要求1、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤优先度高者调度算法实验代码: 1#include #include #include #include #include #define runtime 2#define overflow -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();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() /创建一个进程pcb newp;newp = (pcb)malloc(sizeof(struct pro);if (!newp) exit(overflow);newp-status = wait;time(newp-arrive_time = t;printf(process name:);scanf(%s, newp-name);printf(priority:);scanf(%d, printf(arrive time:);scanf(%d, printf(cputime_required:);scanf(%d, 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); 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, q;if (ready-next)printf(input process name:);scanf(%s, temp);for (p = ready; p != null 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();void 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, 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):);scanf(%d, 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;实验过程:优先度高者调度算法实验结果截图: 1先创建进程 a、b、c,设 a 进程优先级为 2,到达时间为 2,cpu 处理时间为 1;设 b 进程优先级为 5,到达时间为 0,cpu 处理时间为 6;设 c 进程优先级为 4,到达时间为 2,cpu 处理时间为 2;开始运行进程,首先运行 0 时刻到达的优先级最高的进程 b设定进程 a、b、c运行结束后,进程 b 的优先级变为 4,cpu 使用时间为 2,此时进程 b 和 c 优先级相同,系统仍然调用进程 b;进程 b 在运行还是进程 b再次运行进程 b 以后,b 的优先级掉为 3,而且进程 b 还差 2 个时间单位才能运行结束,此时 c 为优先级最高的进程,系统调用进程 c因为进程 c 的 cpu 需要时间仅为 2 个时间单位,所以进程 c 运行结束,finished,c 被移除就绪序列;调度进程 c然后系统重新调用进程 b,b 运行结束;最后系统调度优先级最低的进程 a,结束进程调度过程,队列空。进程 c 结束进程 b 回归调度进程 a进程 b 结束先来先服务算法: 2#include#includeusing namespace std;/FCFSstruct processchar name10;double arrivetime;/到到时间 double servetime; /服务时间 double starttime;/开始时间 double finnishtime;/完成时间 double circletime;/周转时间 double dcircletime;/带权周转时间 a100;/用结构体存放各进程的相关信息int main()int i,j,k,n;process temp;coutn;coutai.nameai.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+)cout ak.name;coutendl;a0.starttime=a0.arrivetime;a0.finnishtime=a0.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.servetime;/计算其他进程的相关信息coutn 进程调度列表:n;cout名称setw(10)到达时间setw(10)服务时间setw(10)开始时间setw(10)完成时间setw(10)周转时间setw(14)带权周转时间n;for(i=0;in;i+)coutai.namesetw(10)ai.arrivetimesetw(10)ai.servetimesetw(10)ai.starttimesetw(10)ai.finnishtimesetw(10)ai.circletimesetw(14)ai.dcircletimeendl; return 0;实验结果及其解释:周转时间=完成时间-到达时间带权周转时间=周转时间/服务时间很明显地观察到先到达的进程先开始运行,直到该进程结束运行后才调度下一个进程。进程调度顺序为 D、C、A、B ,实现了 First Come First Served。五、实验体会或对改进实验的建议本次实验做的是进程调度算法中的优先度高者调度算法和先来先服务算法。其中按优先级高的调度算法采用的是动态优先级,即优先级在进程创建之初被赋予,然后其值随着进程的推进而减少,有较好的调度性能。而 FCFS 则是将新进入内存的进程放入队列的末尾,按先来先服务的原则等待调度。在做 FCFS 的时候,在虚拟机上出了点问题,所以直接用 win8 下的 dev 解决了。通过这两个实验对比着加深了对按优先度高者调度算法和先来先服务算法的理解和掌握。六、参考资料计算机操作系统修订版 汤子瀛主编 西安电子科技大学出版社
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!