文档介绍:实验报告书课程名:《操作系统原理》题目:进程调度班级:学号:姓名:一、实验目的进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C/C++/Java语言编写一个进程调度模拟程序,使用优先级或时间片轮转法实现进程调度。本实验可加深对进程调度算法的理解。二、实验内容1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2、模拟调度程序可任选两种调度算法实现。3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。三、(arrivetime),要求服务时间(servertime),开始执行时间(starttime),完成时间(endtime)。并计算出相应的周转时间(turnroundtime),平均周转时间(avturnaroundtime)。这些数据都在程序中以变量的形式出现。FCFS调度算法中的进程运行顺序由进程的到达时间所决定,即先到达的进程无论服务时间的长短优先运行。这种算法有利于长作业进程而不利于短作业进程。。优先权=(等待时间+要求服务时间)/要求服务时间。这使得进程的优先级一直随着等待时间的增加而以速率a提高。因此高响应比算法与其他几种算法的不同在于短作业和先到达的作业会优先得到处理,但长作业在经过一定的等待时间之后,必然会有机会分配到处理机,因此长、短作业的处理得到了更加合理的分配。该算法既照顾了短作业,又考虑到了作业到达的先后顺序,不会使得长作业得不到服务,实现了一种较好的折衷。由于每次进行进程调度前都需要计算相应响应比,因此会增加系统开销。=HEAD;i=0P=Q;P=P->NEXT;P=P->NEXT;Q->STARTTIME=TIMEQ->STATE=’T’……开始i++;输出执行进程信息结束P->STATE==’F’?Q->ARRIVETIME>TIME?i<n?Q->STARTTIME=ARRIVETIMEQ->STATE=’T’……YNYNNY四、实验源程序#include<iostream>usingnamespacestd;#defineMAX10structtask_struct{ charname[10];/*进程名称*/ intnumber;/*进程编号*/ floatarrivetime;/*到达时间*/ floatstarttime;/*开始时间*/ floatrun_time;/*运行时间*/ floatendtime;/*结束时间*/ intpriority;/*优先级*/ intorder;/*运行顺序*/ intrun_flag;}tasks[MAX];intcounter;/*实际进程个数*/intfcfs();/*先来先服务*/inthrrn();/*响应比高优先*/intpinput();/*进程参数输入*/intpoutput();/*调度结果输出*/voidmain(){ intoption; pinput();printf("请选择调度算法(0~4):\n"); printf("\n"); printf("\n"); printf("\n"); scanf("%d",&option); switch(option) { case0: printf("运行结束。\n"); break; case1: printf("对进程按先来先服务调度。\n\n"); fcfs(); poutput(); break; case2: printf("对进程按响应比高优先调度。\n\n"); hrrn(); poutput(); break; }}intfcfs()/*先来先服务*/{ floattime_temp=0;inti; intnumber_schedul; time_temp=tasks[0].arrivetime;for(i=0;i<counter;i++){tasks[i].starttime=time_temp;tasks[i].endtime=tasks[i].starttime+tasks[i].run_time;tasks[i].run_flag=1;time_temp=tasks[i].endtime;number_schedul=i;tasks[number_schedul].order=i+1; } return0;}inthrrn()/*响应比高优先*/{ intj,number_schedul,temp_counter; floattemp_time,respond_rate,max_respond_