本文概述
- C ++
- C
- Java
- Python 3
- C#
最先进的调度算法是先进先出(FIFO), 也称为先来先服务(FCFS)。 FIFO只是按照进程到达就绪队列的顺序对其进行排队。
这样, 首先执行的进程将首先执行, 而下一个进程只有在前一个进程完全执行后才开始。
在这里, 我们考虑所有进程的到达时间为0。
如何使用程序在Round Robin中计算以下时间?
- 完成时间:流程完成其执行的时间。
- 周转时间:完成时间与到达时间之间的时间差。周转时间=完成时间–到达时间
- 等待时间(W.T):转向时间和突发时间之间的时间差。
等待时间=周转时间–爆发时间
文章图片
实现
1-Input the processes along with their burst time (bt).
2-Find waiting time (wt) for all processes.
3-As first process that comes need not to wait so
waiting time for process 1 will be 0 i.e. wt[0] = 0.
4-Find waiting time for all other processes i.e. for
process i ->
wt[i] = bt[i-1] + wt[i-1] .
5-Find turnaround time = waiting_time + burst_time
for all processes.
6-Find average waiting time =
total_waiting_time / no_of_processes.
7-Similarly, find average turnaround time =
total_turn_around_time / no_of_processes.
C ++
// C++ program for implementation of FCFS
// scheduling
#include<
iostream>
using namespace std;
// Function to find the waiting time for all
// processes
void findWaitingTime( int processes[], int n, int bt[], int wt[])
{
// waiting time for first process is 0
wt[0] = 0;
// calculating waiting time
for ( inti = 1;
i <
n ;
i++ )
wt[i] =bt[i-1] + wt[i-1] ;
}// Function to calculate turn around time
void findTurnAroundTime( int processes[], int n, int bt[], int wt[], int tat[])
{
// calculating turnaround time by adding
// bt[i] + wt[i]
for ( inti = 0;
i <
n ;
i++)
tat[i] = bt[i] + wt[i];
}//Function to calculate average time
void findavgTime( int processes[], int n, int bt[])
{
int wt[n], tat[n], total_wt = 0, total_tat = 0;
//Function to find waiting time of all processes
findWaitingTime(processes, n, bt, wt);
//Function to find turn around time for all processes
findTurnAroundTime(processes, n, bt, wt, tat);
//Display processes along with all details
cout <
<
"Processes" <
<
" Burst time"
<
<
" Waiting time" <
<
" Turn around time\n" ;
// Calculate total waiting time and total turn
// around time
for ( inti=0;
i<
n;
i++)
{
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
cout <
<
"" <
<
i+1 <
<
"\t\t" <
<
bt[i] <
<
"\t"
<
<
wt[i] <
<
"\t\t" <
<
tat[i] <
<
endl;
}cout <
<
"Average waiting time = "
<
<
( float )total_wt / ( float )n;
cout <
<
"\nAverage turn around time = "
<
<
( float )total_tat / ( float )n;
}// Driver code
int main()
{
//process id's
int processes[] = { 1, 2, 3};
int n = sizeof processes / sizeof processes[0];
//Burst time of all processes
intburst_time[] = {10, 5, 8};
findavgTime(processes, n, burst_time);
return 0;
}
C
// C program for implementation of FCFS
// scheduling
#include<
stdio.h>
// Function to find the waiting time for all
// processes
void findWaitingTime( int processes[], int n, int bt[], int wt[])
{
// waiting time for first process is 0
wt[0] = 0;
// calculating waiting time
for ( inti = 1;
i <
n ;
i++ )
wt[i] =bt[i-1] + wt[i-1] ;
} // Function to calculate turn around time
void findTurnAroundTime( int processes[], int n, int bt[], int wt[], int tat[])
{
// calculating turnaround time by adding
// bt[i] + wt[i]
for ( inti = 0;
i <
n ;
i++)
tat[i] = bt[i] + wt[i];
} //Function to calculate average time
void findavgTime( int processes[], int n, int bt[])
{
int wt[n], tat[n], total_wt = 0, total_tat = 0;
//Function to find waiting time of all processes
findWaitingTime(processes, n, bt, wt);
//Function to find turn around time for all processes
findTurnAroundTime(processes, n, bt, wt, tat);
//Display processes along with all details
printf ( "ProcessesBurst timeWaiting timeTurn around time\n" );
// Calculate total waiting time and total turn
// around time
for ( inti=0;
i<
n;
i++)
{
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
printf ( "%d " , (i+1));
printf ( "%d " , bt[i] );
printf ( "%d" , wt[i] );
printf ( "%d\n" , tat[i] );
}
int s=( float )total_wt / ( float )n;
int t=( float )total_tat / ( float )n;
printf ( "Average waiting time = %d" , s);
printf ( "\n" );
printf ( "Average turn around time = %d " , t);
} // Driver code
int main()
{
//process id's
int processes[] = { 1, 2, 3};
int n = sizeof processes / sizeof processes[0];
//Burst time of all processes
intburst_time[] = {10, 5, 8};
findavgTime(processes, n, burst_time);
return 0;
}
// This code is contributed by Shivi_Aggarwal
Java
// Java program for implementation of FCFS
// scheduling import java.text.ParseException;
class GFG {// Function to find the waiting time for all
// processes
static void findWaitingTime( int processes[], int n, int bt[], int wt[]) {
// waiting time for first process is 0
wt[ 0 ] = 0 ;
// calculating waiting time
for ( int i = 1 ;
i <
n;
i++) {
wt[i] = bt[i - 1 ] + wt[i - 1 ];
}
}// Function to calculate turn around time
static void findTurnAroundTime( int processes[], int n, int bt[], int wt[], int tat[]) {
// calculating turnaround time by adding
// bt[i] + wt[i]
for ( int i = 0 ;
i <
n;
i++) {
tat[i] = bt[i] + wt[i];
}
}//Function to calculate average time
static void findavgTime( int processes[], int n, int bt[]) {
int wt[] = new int [n], tat[] = new int [n];
int total_wt = 0 , total_tat = 0 ;
//Function to find waiting time of all processes
findWaitingTime(processes, n, bt, wt);
//Function to find turn around time for all processes
findTurnAroundTime(processes, n, bt, wt, tat);
//Display processes along with all details
System.out.printf( "Processes Burst time Waiting"
+ " time Turn around time\n" );
// Calculate total waiting time and total turn
// around time
for ( int i = 0 ;
i <
n;
i++) {
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
System.out.printf( " %d " , (i + 1 ));
System.out.printf( "%d " , bt[i]);
System.out.printf( "%d" , wt[i]);
System.out.printf( "%d\n" , tat[i]);
}
float s = ( float )total_wt /( float ) n;
int t = total_tat / n;
System.out.printf( "Average waiting time = %f" , s);
System.out.printf( "\n" );
System.out.printf( "Average turn around time = %d " , t);
}// Driver code
public static void main(String[] args) throws ParseException {
//process id's
int processes[] = { 1 , 2 , 3 };
int n = processes.length;
//Burst time of all processes
int burst_time[] = { 10 , 5 , 8 };
findavgTime(processes, n, burst_time);
}
}
// This code is contributed by 29ajaykumar
Python 3
# Python3 program for implementation
# of FCFS scheduling# Function to find the waiting
# time for all processes
def findWaitingTime(processes, n, bt, wt):# waiting time for
# first process is 0
wt[ 0 ] = 0# calculating waiting time
for i in range ( 1 , n ):
wt[i] = bt[i - 1 ] + wt[i - 1 ] # Function to calculate turn
# around time
def findTurnAroundTime(processes, n, bt, wt, tat):# calculating turnaround
# time by adding bt[i] + wt[i]
for i in range (n):
tat[i] = bt[i] + wt[i]# Function to calculate
# average time
def findavgTime( processes, n, bt):wt = [ 0 ] * n
tat = [ 0 ] * n
total_wt = 0
total_tat = 0# Function to find waiting
# time of all processes
findWaitingTime(processes, n, bt, wt)# Function to find turn around
# time for all processes
findTurnAroundTime(processes, n, bt, wt, tat)# Display processes along
# with all details
print ( "Processes Burst time " +
" Waiting time " +
" Turn around time" )# Calculate total waiting time
# and total turn around time
for i in range (n):total_wt = total_wt + wt[i]
total_tat = total_tat + tat[i]
print ( " " + str (i + 1 ) + "\t\t" +
str (bt[i]) + "\t " +
str (wt[i]) + "\t\t " +
str (tat[i])) print ( "Average waiting time = " +
str (total_wt / n))
print ( "Average turn around time = " +
str (total_tat / n))# Driver code
if __name__ = = "__main__" :# process id's
processes = [ 1 , 2 , 3 ]
n = len (processes)# Burst time of all processes
burst_time = [ 10 , 5 , 8 ]findavgTime(processes, n, burst_time)# This code is contributed
# by ChitraNayal
C#
// C# program for implementation of FCFS
// scheduling
using System;
class GFG
{// Function to find the waiting time for all
// processes
static void findWaitingTime( int []processes, int n, int []bt, int [] wt)
{
// waiting time for first process is 0
wt[0] = 0;
// calculating waiting time
for ( int i = 1;
i <
n;
i++)
{
wt[i] = bt[i - 1] + wt[i - 1];
}
}// Function to calculate turn around time
static void findTurnAroundTime( int []processes, int n, int []bt, int []wt, int []tat) {
// calculating turnaround time by adding
// bt[i] + wt[i]
for ( int i = 0;
i <
n;
i++)
{
tat[i] = bt[i] + wt[i];
}
}// Function to calculate average time
static void findavgTime( int []processes, int n, int []bt)
{
int []wt = new int [n];
int []tat = new int [n];
int total_wt = 0, total_tat = 0;
//Function to find waiting time of all processes
findWaitingTime(processes, n, bt, wt);
//Function to find turn around time for all processes
findTurnAroundTime(processes, n, bt, wt, tat);
//Display processes along with all details
Console.Write( "Processes Burst time Waiting"
+ " time Turn around time\n" );
// Calculate total waiting time and total turn
// around time
for ( int i = 0;
i <
n;
i++)
{
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
Console.Write( " {0} " , (i + 1));
Console.Write( "{0} " , bt[i]);
Console.Write( "{0}" , wt[i]);
Console.Write( "{0}\n" , tat[i]);
}
float s = ( float )total_wt /( float ) n;
int t = total_tat / n;
Console.Write( "Average waiting time = {0}" , s);
Console.Write( "\n" );
Console.Write( "Average turn around time = {0} " , t);
}// Driver code
public static void Main(String[] args)
{
// process id's
int []processes = {1, 2, 3};
int n = processes.Length;
// Burst time of all processes
int []burst_time = {10, 5, 8};
findavgTime(processes, n, burst_time);
}
}// This code contributed by Rajput-Ji
输出如下:
ProcessesBurst timeWaiting timeTurn around time
110010
251015
381523
Average waiting time = 8.33333
Average turn around time = 16
重要事项:
非抢先平均等待时间不是最佳的
无法并行利用资源:产生Convoy效果(考虑存在许多IO绑定进程和一个CPU绑定进程的情况。当CPU绑定进程获取CPU时, IO绑定进程必须等待CPU绑定进程。IO绑定进程可能会最好将CPU占用一段时间, 然后再使用IO设备)。
资源 :
http://web.cse.ohio-state.edu/~agrawal/660/Slides/jan18.pdf
在S2中我们将讨论到达时间不同的过程。
【FCFS CPU调度算法程序实现|S1】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 如何使用jQuery选择具有多个类的元素()
- 老毛桃u盘打开盘制作工具,本文教您如何迅速完成
- usb键盘,本文教您电脑usb键盘无法识别处理办法
- 如何设置u盘打开,本文教您如何迅速进入PE
- 百度u盘,本文教您认识百度U盘如何运用
- 如何用u盘装系统,本文教您如何恢复电脑
- u盘如何制作打开pe,本文教您u盘如何制作打开pe
- u盘不能格式化怎样办,本文教您u盘无法格式化怎样处理
- 水晶u盘,本文教您如何辨别真假水晶U盘