先来先服务c语言实验报告流程图,先来先服务调度算法拟实验程序源代码(C语言).doc...

先来先服务调度算法拟实验程序源代码(C语言)

兰大信息学院计算机系综合性实验报告PAGE

第 PAGE 6 页《操作系统》课程综合性实验报告 开课实验室: 2011 年 05 月 17 日实验题目进程调度算法程序设计一、实验目的 通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境 1. 硬件设备:PC机一台2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。三、实验内容 (1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。进程已占用CPU时间CPUTIME。进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。进程状态STATE。队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1。进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析程序运行的结果,谈一下自己的认识。四、实验结果及分析1.实验设计说明本次实验采用C语言模拟对N个进程采用先来先服务进程调度算法调度。每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:进程标识数ID[3]、进程名name[10]、进程状态state、进程到达时间arrivetime、进程开始执行时间starttime、进程执行结束时间finishtime、服务时间servicetime、周转时间turnaroundtime、带权周转时间weightedturnaroundtime、队列指针next用来将PCB排成队列。主要程序流程图(进程的执行过程):P=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

2.实验代码#include"stdio.h"#include"stdlib.h"#include

typedef struct PCB //定义进程控制块{ char ID[3]; //进程号 char name[10]; //进程名 char state; //运行状态 int arrivetime; //到达时间 int starttime; //进程开始时间 int finishtime; //进程结束时间 int servicetime; //服务时间 float turnaroundtime;//周转时间 float weightedturnaroundtime;//带权周转时间 struct PCB *next; //指向下个进程}pcb;

int time; //计时器int n; //进程个数 pcb *head=NULL,*p,*q; //进程链表指针

void run_fcfs(pcb *p1) //运行未完成的进程{ time = p1->arrivetime > time? p1->arrivetime:time; p1->starttime=time; printf("\n现在时间是%d,开始运行作业%s\n",time,p1->name); time+=p1->servicetime; p1->state='T'; p1->finishtime=time; p1->turnaroundtime=p1->finishtime-p1->arrivet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供先来先服务调度算法实验报告的模板,同时也可以为您提供用C语言编写先来先服务调度算法的代码。 先来先服务调度算法实验报告模板: 一、实验目的 二、实验原理 三、实验步骤 1.建立PCB表 2.初始化PCB表 3.按照到达时间排序PCB表 4.按照先来先服务调度算法进行进程调度 5.输出调度结果 四、实验结果 五、实验结论 六、参考文献 用C语言编写先来先服务调度算法的代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_PROCESS_NUM 10 typedef struct PCB { int process_id; // 进程ID int arrival_time; // 到达时间 int burst_time; // 执行时间 int waiting_time; // 等待时间 int turnaround_time; // 周转时间 } PCB; void sort_by_arrival_time(PCB process[], int n) { int i, j; PCB temp; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (process[i].arrival_time > process[j].arrival_time) { temp = process[i]; process[i] = process[j]; process[j] = temp; } } } } void calculate_waiting_time(PCB process[], int n) { int i; process[0].waiting_time = 0; for (i = 1; i < n; i++) { process[i].waiting_time = process[i - 1].waiting_time + process[i - 1].burst_time; } } void calculate_turnaround_time(PCB process[], int n) { int i; for (i = 0; i < n; i++) { process[i].turnaround_time = process[i].waiting_time + process[i].burst_time; } } void calculate_average_time(PCB process[], int n, float *average_waiting_time, float *average_turnaround_time) { int i; float total_waiting_time = 0, total_turnaround_time = 0; for (i = 0; i < n; i++) { total_waiting_time += process[i].waiting_time; total_turnaround_time += process[i].turnaround_time; } *average_waiting_time = total_waiting_time / n; *average_turnaround_time = total_turnaround_time / n; } void display(PCB process[], int n) { int i; printf("进程ID\t到达时间\t执行时间\t等待时间\t周转时间\n"); for (i = 0; i < n; i++) { printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", process[i].process_id, process[i].arrival_time, process[i].burst_time, process[i].waiting_time, process[i].turnaround_time); } } int main() { int i, n; float average_waiting_time, average_turnaround_time; PCB process[MAX_PROCESS_NUM]; printf("请输入进程数:"); scanf("%d", &n); for (i = 0; i < n; i++) { printf("请输入进程%d的到达时间和执行时间:", i + 1); scanf("%d%d", &process[i].arrival_time, &process[i].burst_time); process[i].process_id = i + 1; } sort_by_arrival_time(process, n); calculate_waiting_time(process, n); calculate_turnaround_time(process, n); calculate_average_time(process, n, &average_waiting_time, &average_turnaround_time); display(process, n); printf("平均等待时间:%f\n", average_waiting_time); printf("平均周转时间:%f\n", average_turnaround_time); return 0; } ``` 以上就是用C语言编写先来先服务调度算法的代码,可以根据需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值