1、FCFS算法实验报告一:实验题目: 设计一个先来先服务调度算法 二:源程序名:fcfs.cpp,执行程序名:fcfs.exe 三:使用的数据结构及符号说明如下 typedef struct pcb /定义进程控制块pcb的数据结构 char pnameN; /进程名 int runtime; /进程运行时间 int arrivetime; /进程到来时间 char state; /进程状态 struct pcb *next; /指向下一进程的指针PCB; PCB head_input; /定义初始放入进程的队列的头指针PCB head_run; /定义运行程序的头指针 四:FCFS算法源码及注
2、释: #define N 20 #include #include /输入输出流头文件 #include /文件头文件 using namespace std; typedef struct pcb /定义进程控制块pcb的数据结构 char pnameN; /进程名 int runtime; /进程运行时间 int arrivetime; /进程到来时间 char state; /进程状态 struct pcb *next; /指向下一进程的指针 PCB; PCB head_input; /定义初始放入进程的队列的头指针PCB head_run; /定义执行中进程的头指针 PCB * pcb
3、_input; /定义运行程序的头指针 static char R=r,C=c; unsigned long current; /定义当前时间变量 void inputprocess(); /定义进程进入函数 int readydata(); /定义进程判断函数 int readyprocess(); /定义进程准备函数 int runprocess(); /定义进程运行函数 ofstream fout(result.txt); /打开文件result.txt,用于记录结果 int readyprocess() while(1) if(readydata() = 0) /判断是否还有进程没有执
4、行完毕,如果返回结果是1,那么代表没有进 /程要执行了 return 1; /以执行完所有程序,退出 else runprocess(); /还有程序要执行,执行运行函数 int readydata() /函数准备函数 if(head_input.next = NULL) /判断是否还有没有运行过的进程 if(head_run.next = NULL)/判断是否有进程在运行,有则执行返回值1, /回到readyprocess函数,无则 return 0; /说明没有进程了,退出 else return 1; PCB *p1,*p2,*p3,*t; p1 = head_input.next; /
5、定义p1,使p1等于放入的第一个进程 p2 = &head_run; /定义p2,使p2等于运行函数的头指针 t = p1; /定义t,使它和p1相等; p3 = &head_input; /定义p3,是它等于放入进程队列的头指针 while(p1-next != NULL) /用循环,找出进程队列里到达时间最小的进程 if(p1-next-arrivetime arrivetime) t = p1-next; p3 = p1; /使p3指向t p1 = p1-next; if(unsigned long)t - arrivetime state = R) /判断t所指的进程是否符合条件, /
6、是则开始运行 coutTime current;Processpname start,n; foutTime current;Processpnamenext = t; p3-next = t -next; /将t从放入的队列中移到 /run队列中; return 1; int runprocess() /定义运行进程函数/ PCB *p1,*p2; if(head_run.next = NULL) /判断是否有进程符合条件运行, /有则执行运行代码, /无则将当前时间+1; current+; return 1; else p1 = head_run.next; p2 = &head_run
7、; while(p1 != NULL) /如果运行中的程序未运行完,则继续运行 p1-runtime-; current+; while(1) if(p1-runtime = 0) /如果运行中的程序的runtime为0, /则说明程序已经运行结束 coutTime current;Processpname end.n; foutTime current;Processpnamestate = C; /将p1进程的状态标志为C完成状态 p2-next = p1-next; /将run的头指针指向空 p1 = NULL; /删除p1进程 break; /结束,跳出 else p1-runtime
8、-; /如果p1没有执行完, current+; /则继续执行直至结束 return 1; void inputprocess() /-定义建立进程函数/ PCB *p1,*p2; int num; coutHow many processes do you want to run:; /提示输入进程数 foutnum; foutnext = new PCB; /为p1指向的下一个进程申请空间 p1 = p1-next; /让p1等于它所指向的下一个进程 for(int i = 0; i num; i+) /循环输入num个进程的 coutnNo.i+1 process input pname
9、:; /进程名 foutnNo.i+1p1-pname; foutpname; cout runtime:; /运行时间 foutp1-runtime; foutruntime; cout arrivetime:; /到达时间 foutp1-arrivetime; foutarrivetimestate = R; /初始化状态为R准备状态 p1-next = new PCB; /为下一个进程申请空间 p2 = p1; p1 = p1-next; /让p1指向它所指的下一个进程 p2-next = NULL; /让最后一个进程所指的下一个进程为空 void main() current = 0;
10、 /初始化时钟current为0; inputprocess(); /运行进程构造函数 readyprocess(); /运行进程运行函数 getch(); fout.close(); /文件关闭 五:实验结果: 1:初始状态: How many processes do you want to run:3 No.1 process input pname:p1 runtime:20 arrivetime:1 No.2 process input pname:p2 runtime:23 arrivetime:4 No.3 process input pname:p3 runtime:54 arrivetime:10 2:具体运行过程 Time 1; Processp1 start, Time 21; Processp1 end. Time 21; Processp2 start, Time 44; Processp2 end. Time 44; Processp3 start, Time 98; Processp3 end.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1