《处理器调度》由会员分享,可在线阅读,更多相关《处理器调度(11页珍藏版)》请在金锄头文库上搜索。
1、实验一 处理器调度一. 实验内容选择一个调度算法,实现处理器调度。二. 实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪状态进程个 数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处 理器情况下处理器调度,帮助自己加深了解处理器调度的工作。三. 实验题目设计一个按优先数调度算法实现处理器调度的程序。四. 实验步骤(1)程序中使用的数据结构及符号说明typedef struct _proc /*进程结构体*/char name32;/* 进程名 */int run_time; /*运行时间*/int req_time;/* 需要时间*/
2、int pri;/*优先级:时间片调度中未使用*/enum READY = 0X01,ENDstate;/*进程状态*/struct _proc *next;PROC;int g_TotalTimeSlices = 0;/*当前时间片数*/PROC *g_Head = NULL, *g_Curr = NULL; /*头节点指针和当前节点指针*/采用带头节点的循环链表存储就绪状态的进程。(2)流程图程序总体结构框图:初始化:建立5 个节点,构造循环链表。 运行部分框图:(3)源代码(附注释)#include #include #include #include using namespace s
3、td; typedef struct _proc char name32;int run_time;int req_time;int pri;enum ready,endstate; struct _proc *prior;struct _proc *next;PROC;int time=0;PROC *g_head=NULL,*g_curr=NULL;void Init()PROC *p;g_head = (PROC*)malloc(sizeof(PROC);g_head-next = NULL;g_head-prior = NULL;p = (PROC*)malloc(sizeof(PRO
4、C); strcpy(p-name, P1);p-run_time = 0;p-req_time = 2;p-pri = 1;p-state =p-ready;p-next = NULL;p-prior = g_head;g_head-next = p;g_curr=g_head-next;p = (PROC*)malloc(sizeof(PROC); strcpy(p-name, P2);p-run_time = 0;p-req_time = 3;p-pri = 5;p-state =p-ready;if(p-prig_curr-pri)p-prior=g_curr-prior; g_cur
5、r-prior-next=p; p-next=g_curr; g_curr-prior=p; g_curr=g_head-next;elseg_curr-next=p;p-prior=g_curr;p-next=NULL; g_curr=g_head-next;p = (PROC*)malloc(sizeof(PROC); strcpy(p-name, P3);p-run_time = 0;p-req_time = 1;p-pri = 3;p-state =p-ready;if(p-prig_curr-pri)p-prior=g_curr-prior; g_curr-prior-next=p;
6、 p-next=g_curr; g_curr-prior=p; g_curr=g_head-next;elseg_curr=g_curr-next;if(p-prig_curr-pri)p-prior=g_curr-prior; g_curr-prior-next=p; p-next=g_curr; g_curr-prior=p; g_curr=g_head-next;elseg_curr-next=p; p-prior=g_curr; p-next=NULL; g_curr=g_head-next;p = (PROC*)malloc(sizeof(PROC); strcpy(p-name,
7、P4); p-run_time = 0;p-req_time = 2;p-pri = 4;p-state =p-ready;if(p-prig_curr-pri)p-prior=g_curr-prior; g_curr-prior-next=p; p-next=g_curr; g_curr-prior=p; g_curr=g_head-next;elseg_curr=g_curr-next;if(p-prig_curr-pri)p-prior=g_curr-prior; g_curr-prior-next=p; p-next=g_curr; g_curr-prior=p; g_curr=g_h
8、ead-next;elseg_curr=g_curr-next;if(p-prig_curr-pri)p-prior=g_curr-prior; g_curr-prior-next=p; p-next=g_curr; g_curr-prior=p; g_curr=g_head-next;elseg_curr-next=p; p-prior=g_curr; p-next=NULL; g_curr=g_head-next;p = (PROC*)malloc(sizeof(PROC); strcpy(p-name, P5); p-run_time = 0;p-req_time = 4;p-pri =
9、 2;p-state =p-ready; if(p-prig_curr-pri)p-prior=g_curr-prior; g_curr-prior-next=p; p-next=g_curr;g_curr-prior=p;g_curr=g_head-next;elseg_curr=g_curr-next;if(p-prig_curr-pri)p-prior=g_curr-prior;g_curr-prior-next=p; p-next=g_curr; g_curr-prior=p; g_curr=g_head-next;elseg_curr=g_curr-next;if(p-prig_cu
10、rr-pri)p-prior=g_curr-prior;g_curr-prior-next=p; p-next=g_curr;g_curr-prior=p;g_curr=g_head-next;elseg_curr=g_curr-next;if(p-prig_curr-pri)p-prior=g_curr-prior;g_curr-prior-next=p;p-next=g_curr;g_curr-prior=p;g_curr=g_head-next;elseg_curr-next=p;p-prior=g_curr;p-next=NULL;g_curr=g_head-next;void Pri
11、ntInfo()PROC *t = g_head-next;printf(Time : %dt Process Informationn, time);printf(name run_time req_time pri staten);printf(n);while(t!=NULL)printf(%4s %8d %8d %3d %5sn, t-name, t-run_time, t-req_time,t-pri, t-state =t-ready? ready : end);t = t-next;printf(Current process is %sn, g_curr-name); prin
12、tf(-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+nn); void run()PROC *p;g_curr = g_head-next;PrintInfo();while(g_curr-next!=NULL)if(g_curr-pri=g_curr-next-pri) time+; g_curr-run_time+; g_curr-req_time-;g_curr-pri-; if(g_curr-req_time=0)g_curr-state =p-end;PrintInfo();g_head-next = g_curr-next; g_curr-next-pri
13、or=g_head; free(g_curr);g_curr = g_head-next;elsePrintInfo(); p=g_curr-next;if(p-next!=NULL) while(g_curr-pripri) p=g_curr-next; g_curr-next=p-next; p-next-prior=g_curr; g_curr-prior-next=p; p-prior=g_curr-prior; g_curr-prior=p;p-next=g_curr;else if(g_curr-pripri)g_curr-next=NULL; g_curr-prior-next=p; p-prior=g_curr-prior; g_curr-prior=p; p-next=g_curr;g_curr = g_head-next;PrintInfo();while(g_curr!=g_head)time+;g_curr-run_time+; g_curr-req_time-; g_curr-pri-;if(g_curr-req_time=0)g_curr-state =p-end;PrintInfo();g_head-next = g_curr-next;free(g