进程b在 运行
运行结束后,进程b的优先级变为4,cpu使用时间为2,此时进程b和c优先级相同,系统仍然调用进程b;
还是进程b
再次运行进程b以后,b的优先级掉为3,而且进程b还差2个时间单位才能运行结束,此时c为优先级最高的进程,系统调用进程c
调度进程c
因为进程c的cpu需要时间仅为2个时间单位,所以进程c运行结束,finished,c被移除就绪序列;
进程c结束
进程b回归
然后系统重新调用进程b,b运行结束;
进程b结束
调度进程a
最后系统调度优先级最低的进程a,结束进程调度过程,队列空。
2先来先服务算法: ○
#include
using namespace std; //FCFS
struct process{ char name[10];
double arrivetime;//到到时间 double servetime; //服务时间 double starttime;//开始时间 double finnishtime;//完成时间 double circletime;//周转时间
double dcircletime;//带权周转时间 }a[100];//用结构体存放各进程的相关信息
int main() {
int i,j,k,n; process temp;
cout<<\请输入进程数:\\n\
cin>>n;
cout<<\请输入进程的信息(包括进程名、进程到达时间、进程服务时间):\\n\for(i=0;i cout<<\请输入第\个进程的信息:\\n\ cin>>a[i].name>>a[i].arrivetime>>a[i].servetime; } for(i=0;i for(j=0;j if(a[i].arrivetime }//按照FCFS算法对进程进行排序 cout<<\进程调度顺序为:\\n\for(k=0;k cout<<\\cout< a[0].starttime=a[0].arrivetime; a[0].finnishtime=a[0].servetime+a[0].starttime; a[0].circletime=a[0].finnishtime-a[0].arrivetime; a[0].dcircletime=a[0].circletime/a[0].servetime; //计算第一个进程的相关信息 for(i=1;i a[i].starttime=a[i-1].servetime+a[i-1].starttime; a[i].finnishtime=a[i].servetime+a[i].starttime; a[i].circletime=a[i].finnishtime-a[i].arrivetime; a[i].dcircletime=a[i].circletime/a[i].servetime; }//计算其他进程的相关信息 cout<<\进程调度列表:\\n\ cout<<\名称\到达时间\服务时间\开始时间\完成时间\周转时间\带权周转时间\\n\ for(i=0;i cout< 实验结果及其解释: 周转时间=完成时间-到达时间 带权周转时间=周转时间/服务时间 很明显地观察到先到达的进程先开始运行,直到该进程结束运行后才调度下一个进程。 进程调度顺序为D、C、A、B,实现了First Come First Served。 五、实验体会或对改进实验的建议 本次实验做的是进程调度算法中的优先度高者调度算法和先来先服务算法。 其中按优先级高的调度算法采用的是动态优先级,即优先级在进程创建之初被赋予,然后其值随着进程的推进而减少,有较好的调度性能。 而FCFS则是将新进入内存的进程放入队列的末尾,按先来先服务的原则等待调度。在做FCFS的时候,在虚拟机上出了点问题,所以直接用win8下的dev解决了。 通过这两个实验对比着加深了对按优先度高者调度算法和先来先服务算法的理解和掌握。 六、参考资料 《计算机操作系统》修订版汤子瀛主编西安电子科技大学出版社 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库南昌大学操作系统实验报告(2)在线全文阅读。
相关推荐: