lab3.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2011-05-22 15:45
    上传日期
实现教材中所描述的先来先服务算法,短进程优先调度算法和时间片轮转算法。通过对几组进程分别使用不同的调度 算法,计算进程的平均周转时间,比较算法的优劣。 实验内容: 编程实现本实验的程序,要求: 【a】编程实现进程的进程控制块,定义一个进程控制块的数据结构(PCB)应包括: ? 进程名称(ID) ? 进程需要执行时间 ? 进入就绪队列时间 ? 进程执行开始时间,进程执行结束时间 ? 进程的优先级
lab3.rar
  • 新建文件夹 (3)
  • lab1.2.c
    4.3KB
内容介绍
////////////////////////////////////// // // CPU scheduler algorithm experiment // 2011-4-28 Liu @USTC // ////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #include <time.h> #define N_PROCESS 10 #define T_SLICE 4 struct t_PCB { int pid; int arrive_time; int need_time; int start_time; int finished_time; } pcb_queue[N_PROCESS]; struct t_PCB work_q[N_PROCESS]; void init(); void sort_queue(); void set_work_q(); void print_queue(); void set_work_q(); void AWT(char *); void FCFS(); void SJF(); void RR(); int main() { init(); print_queue(); FCFS(); SJF(); RR(); } void init() { int i; printf("initializing...\nProcess number: %d time slice length: %d.\n randomly generlize arrive-time and need-time\n", N_PROCESS, T_SLICE); srand(time(NULL)); for(i=0;i<N_PROCESS;i++) { pcb_queue[i].pid=i+1; pcb_queue[i].arrive_time = rand() % (N_PROCESS); pcb_queue[i].need_time = rand() %(2*N_PROCESS)+1; //可以根据实验结果调整自定义,非零值 pcb_queue[i].finished_time=-1; pcb_queue[i].start_time=-1; } sort_queue(); } void sort_queue() //按照到达顺序排序 { int i,j,t; struct t_PCB p; for(i=0;i<N_PROCESS-1;i++) { t=i; for(j=i+1;j<N_PROCESS;j++) if(pcb_queue[j].arrive_time<pcb_queue[t].arrive_time) t=j; if(t!=i) { p=pcb_queue[i];pcb_queue[i]=pcb_queue[t];pcb_queue[t]=p; } } } void print_queue() { int i; for(i=0;i<N_PROCESS;i++) { printf("pid=%3d\t arrived_time:%3d\t need_time:%3d\n", pcb_queue[i].pid,pcb_queue[i].arrive_time,pcb_queue[i].need_time); } } void set_work_q() { int i; for(i=0;i<N_PROCESS;i++) work_q[i]=pcb_queue[i]; } void AWT(char *s) //求平均等待时间 { int i; float w=0.0, t=0.0; for( i=0;i<N_PROCESS; i++) { //w=w+work_q[i].start_time-work_q[i].arrive_time; //注 这样RR平均等待时间计算不对。 w=w+work_q[i].finished_time-work_q[i].arrive_time-pcb_queue[i].need_time ; t=t+work_q[i].finished_time-work_q[i].arrive_time; } w=w/N_PROCESS; t=t/N_PROCESS; printf("\n%s\t:平均等待时间:%5.2f\t平均周转时间:%5.2f\n",s,w,t); } void FCFS() { int timeline; int i; printf("\n\nFCFS running...\n"); set_work_q(); for(i=0,timeline=work_q[0].arrive_time; i<N_PROCESS; i++) { work_q[i].start_time=timeline; printf("proc %d started at time %d.\t",work_q[i].pid, timeline); timeline=work_q[i].start_time+work_q[i].need_time; work_q[i].finished_time=timeline; printf("finished at time %d.\n",timeline); } AWT("FCFS"); } void SJF()//短作业优先非抢占式 { int timeline=0; int finished=0; int found=0; int i; int j; int t; printf("\n\nSJF running...\n"); set_work_q(); while(finished<N_PROCESS) { t=100000; found =0; for(i=0;i<N_PROCESS ; i++) if(work_q[i].arrive_time<=timeline && work_q[i].finished_time<0 && work_q[i].need_time<t) { j=i;t=work_q[i].need_time;found=1; } if(found) { work_q[j].start_time=timeline; printf("proc %d started at time %d.\t",work_q[j].pid, timeline); work_q[j].finished_time =timeline+ work_q[j].need_time; timeline=timeline+work_q[j].need_time; finished++; printf("finished at time %d.\n", timeline); } else { timeline++; } } AWT("SJF"); } void RR() //轮转法 { int timeline=0; int finished=0; int i=0; int ts=T_SLICE; int nop_schedule=0; printf("\n\nRoundRobine running...\n"); set_work_q(); while(finished<N_PROCESS) { if(work_q[i].arrive_time<=timeline && work_q[i].finished_time<0 && work_q[i].need_time!=0) { nop_schedule=0; if( work_q[i].start_time<0) { work_q[i].start_time=timeline; printf("proc%2d started at time %2d.\n",work_q[i].pid, timeline); } if(work_q[i].need_time<=ts) { timeline=timeline + work_q[i].need_time; work_q[i].need_time=0; work_q[i].finished_time=timeline; finished++; printf("proc%2d finished at time %d.\n",work_q[i].pid, timeline); } else { work_q[i].need_time=work_q[i].need_time-ts; timeline+=ts; } } else { nop_schedule++; if (nop_schedule>=N_PROCESS) { timeline++; nop_schedule=0; } } i=(i+1)%N_PROCESS; } AWT("RR"); }
评论
    相关推荐
    • 数据库课程设计
      数据库课程设计使用,使用MFC编写的界面,连接ODBC数据源,方便移植。
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...