ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:929.89KB ,
资源ID:7818435      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7818435.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(南昌大学操作系统实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

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

3、cb 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; else while (newp-switch_block.priornext-switch_block.prior&p-next != null) p = p-next; newp-next = p-next;

4、 p-next = newp; void creat_pcb() /创建一个进程 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

5、, &newp-arrive_time); printf(cputime_required:); 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) print

6、f(%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

7、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&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); pr

8、intpcb(); 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 = fini

9、shed; printpcb(); ready-next = p-next; printf(%s have been removed from the ready_queue.n, p-name); free(p); else printpcb(); 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.crea

10、t a processn); printf(2.run a processn); printf(3.remove a processn); printf(4.exitn); printf(choose(1-4):); 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(s

11、truct pro); if (!ready) exit(overflow); ready-next = null; menu(); return 0;实验过程:优先度高者调度算法实验结果截图:先创建进程a、b、c,设a进程优先级为2,到达时间为2,cpu处理时间为1;设b进程优先级为5,到达时间为0,cpu处理时间为6;设c进程优先级为4,到达时间为2,cpu处理时间为2;设定进程a、b、c开始运行进程,首先运行0时刻到达的优先级最高的进程b运行结束后,进程b的优先级变为4,cpu使用时间为2,此时进程b和c优先级相同,系统仍然调用进程b;再次运行进程b以后,b的优先级掉为3,而且进程b还差

12、2个时间单位才能运行结束,此时c为优先级最高的进程,系统调用进程c调度进程c因为进程c的cpu需要时间仅为2个时间单位,所以进程c运行结束,finished,c被移除就绪序列;进程b回归进程c结束然后系统重新调用进程b,b运行结束;进程b结束调度进程a最后系统调度优先级最低的进程a,结束进程调度过程,队列空。先来先服务算法:#include#includeusingnamespacestd;/FCFSstructprocesscharname10;doublearrivetime;/到到时间doubleservetime;/服务时间doublestarttime;/开始时间doublefinn

13、ishtime;/完成时间doublecircletime;/周转时间doubledcircletime;/带权周转时间a100;/用结构体存放各进程的相关信息intmain()inti,j,k,n;processtemp;coutn;cout请输入进程的信息(包括进程名、进程到达时间、进程服务时间):n;for(i=0;in;i+)cout请输入第i+1ai.nameai.arrivetimeai.servetime;for(i=0;in;i+)for(j=0;ji;j+)if(ai.arrivetimeaj.arrivetime)temp=ai;ai=aj;aj=temp;/按照FCFS算

14、法对进程进行排序coutnFCFS进程调度顺序为:n;for(k=0;kn;k+)coutak.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

15、=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.sta

16、rttimesetw(10)ai.finnishtimesetw(10)ai.circletimesetw(14)ai.dcircletimeendl;return0;实验结果及其解释:周转时间=完成时间-到达时间带权周转时间=周转时间/服务时间很明显地观察到先到达的进程先开始运行,直到该进程结束运行后才调度下一个进程。进程调度顺序为D、C、A、B,实现了First Come First Served。五、实验体会或对改进实验的建议本次实验做的是进程调度算法中的优先度高者调度算法和先来先服务算法。其中按优先级高的调度算法采用的是动态优先级,即优先级在进程创建之初被赋予,然后其值随着进程的推进而减少,有较好的调度性能。而FCFS则是将新进入内存的进程放入队列的末尾,按先来先服务的原则等待调度。在做FCFS的时候,在虚拟机上出了点问题,所以直接用win8下的dev解决了。通过这两个实验对比着加深了对按优先度高者调度算法和先来先服务算法的理解和掌握。六、参考资料计算机操作系统修订版 汤子瀛主编 西安电子科技大学出版社

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1