先来先服务(FCFS)实验(3)

该实验旨在通过模拟FCFS(先来先服务)调度算法,加深对进程调度过程和原理的理解。实验要求掌握FCFS算法,并编程实现N个进程的调度。实验内容包括算法原理的回顾、代码实现以及运行结果的分析,关注周转时间和带权周转时间等性能指标。
摘要由CSDN通过智能技术生成

一. 实验目的:
通过上机练习,以及对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
二. 实验要求:
1、掌握先来先服务、短进程优先等进程调度算法。
2、编程实现对N个进程采用FCFS进程调度算法的调度。
三.实验内容及步骤:

  1. 先回顾FCFS算法原理。
    多个进程按到达的先后排序形成就绪队列,每次从就绪队列的队首选一个进程分配CPU进行运行,依次类推,直到就绪队列中所有进程都运行完。
  2. 编程代码
#include"stdio.h"
#include"stdlib.h"

	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->f
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是操作系统进程管理先来先服务实验的C语言代码和注释说明: ```c #include <stdio.h> #include <stdlib.h> // 定义进程结构体 typedef struct PCB { int pid; // 进程ID int arrive_time; // 到达时间 int burst_time; // 执行时间 int start_time; // 开始时间 int finish_time; // 完成时间 int turnaround_time; // 周转时间 int waiting_time; // 等待时间 } PCB; // 按照到达时间排序 void sort(PCB *pcb, int n) { int i, j; PCB temp; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (pcb[i].arrive_time > pcb[j].arrive_time) { temp = pcb[i]; pcb[i] = pcb[j]; pcb[j] = temp; } } } } // 先来先服务调度算法 void FCFS(PCB *pcb, int n) { int i; float avg_turnaround_time = 0, avg_waiting_time = 0; printf("进程ID\t到达时间\t执行时间\t开始时间\t完成时间\t周转时间\t等待时间\n"); for (i = 0; i < n; i++) { if (i == 0) { pcb[i].start_time = pcb[i].arrive_time; } else { pcb[i].start_time = pcb[i - 1].finish_time; } pcb[i].finish_time = pcb[i].start_time + pcb[i].burst_time; pcb[i].turnaround_time = pcb[i].finish_time - pcb[i].arrive_time; pcb[i].waiting_time = pcb[i].turnaround_time - pcb[i].burst_time; avg_turnaround_time += pcb[i].turnaround_time; avg_waiting_time += pcb[i].waiting_time; printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", pcb[i].pid, pcb[i].arrive_time, pcb[i].burst_time, pcb[i].start_time, pcb[i].finish_time, pcb[i].turnaround_time, pcb[i].waiting_time); } avg_turnaround_time /= n; avg_waiting_time /= n; printf("平均周转时间:%f\n", avg_turnaround_time); printf("平均等待时间:%f\n", avg_waiting_time); } int main() { int n, i; printf("请输入进程数:"); scanf("%d", &n); PCB *pcb = (PCB*)malloc(n * sizeof(PCB)); printf("请输入每个进程的到达时间和执行时间:\n"); for (i = 0; i < n; i++) { printf("进程%d:", i + 1); scanf("%d%d", &pcb[i].arrive_time, &pcb[i].burst_time); pcb[i].pid = i + 1; } sort(pcb, n); FCFS(pcb, n); free(pcb); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值