,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。程序要求如下:1)输出系统中进程的调度次序;2)计算CPU利用率。、VC++:(1)程序中进程可用PCB表示,其类型描述如下:structPCB_type{intpid;//进程名intstate;//进程状态2——表示“执行”状态1——表示“就绪”状态0——表示“阻塞”状态intcpu_time;//运行需要的CPU时间(需运行的时间片个数)}用PCB来模拟进程;(2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下:structQueueNode{structPCB_typePCB;StructQueueNode*next;}并设全程量:structQueueNode*ready_head=NULL,//ready队列队首指针*ready_tail=NULL,//ready队列队尾指针*blocked_head=NULL,//blocked队列队首指针*blocked_tail=NULL;//blocked队列队尾指针(3)设计子程序:start_state();读入假设的数据,设置系统初始状态,即初始化就绪队列和阻塞队列。dispath();模拟调度,当就绪队列的队首进程运行一个时间片后,放到就绪队列末尾,每次都是队首进程进行调度,一个进程运行结束就从就绪队列中删除,当到t个时间片后,唤醒阻塞队列队首进程。calculate();就绪进程运行一次,usecpu加1,当就绪队列为空时unusecpu加1,CPU利用率为use_cpu/(use_cpu+unuse_cpu)。5源代码:#include<>#include<>structPCB_type{intpid;//进程名intstate;//进程状态//2--表示"执行"状态//1--表示"就绪"状态//0--表示"阻塞"状态intcpu_time;//运行需要的CPU时间(需运行的时间片个数)};structQueueNode{structPCB_typePCB;structQueueNode*next;};structQueueNode*ready_head=NULL,//ready队列队首指针*ready_tail=NULL,//ready队列队尾指针*block_head=NULL,//blocked队列队首指针*block_tail=NULL;//blocked队列队尾指针intuse_cpu,unuse_cpu;voidstart_state()//读入假设的数据,设置系统初始状态{intn,m; inti; structQueueNode*p,*q; printf("输入就绪节点个数n:"); scanf("%d",&n); printf("输入阻塞节点个数m:"); scanf("%d",&m);p=(structQueueNode*)malloc(sizeof(structQueueNode)); p->next=NULL; ready_head=ready_tail=p; for(i=0;i<n;i++) { p=(structQueueNode*)malloc(sizeof(structQueueNode)); p->next=NULL; p->=1; printf("输入就绪进程%d的pid和cpu_time:",i+1); scanf("%d%d",&p->,&p->); ready_tail->next=p; ready_tail=p; }q=(structQueueNode*)malloc(sizeof(structQueueNode)); q->next=NULL; block_head=block_tail=q; for(i=0;i<m;i++) { q=(structQueueNode*)malloc(sizeof(structQueueNo
操作系统实验报告 来自淘豆网m.daumloan.com转载请标明出处.