Q.7) Write the program to simulate FCFS CPU-scheduling. The 
arrival
time and first CPU_burst for different n number of processes 
should be
input to the algorithm. Assume that the fixed IO waiting time (2
units). The next CPU-burst should be generated randomly. The 
output
should give Gantt chart, turnaround time and waiting time for 
each
process. Also find the average waiting time and turnaround time.


#include <stdio.h>
float getMax();
int getfirst();
void showRQ();
void setStartRQ();
void setAllT();
void ganttChart();
typedef struct
{
    float at;
    float bt;
    float done;
    float st;
    float wt;
    float ft;
    float tat;
} JobProcess;
JobProcess p[100];
int n, rediQ[100];
int getfirst()
{
    int i = 0, j;
    float least = getMax();
    for (i = 0; i < n; i++)
        if (p[i].at <= least && !p[i].done)
            least = p[i].at;
    for (i = 0; i < n; i++)
        if (least == p[i].at && !p[i].done)
        {
            p[i].done = 1;
            return i;
        }
}
float getMax()
{
    int i;
    float max = 0;
    for (i = 0; i < n; i++)
        if (p[i].at > max)
            max = p[i].at;
    return max;
}
void FCFS()
{
    int i;
    for (i = 0; i < n; i++)
        rediQ[i] = getfirst();
    setStartT();
    setAllT();
    ganttChart();
    showRQ();
}
void ganttChart()
{
    int i;
    printf("\nGANTT CHART\n");
    for (i = 0; i < n; i++)
        printf("-----------------------------------------------");
    printf("\n|");
    for (i = 0; i < n; i++)
        printf("P%d\t ", rediQ[i] + 1);
    printf("\n|");
    for (i = 0; i < n; i++)
        printf("------------------------------------------------");
    printf("\n|");
    for (i = 0; i < n; i++)
        printf("%.1f\t", p[rediQ[i]].st);
    printf("%.1f", p[rediQ[n - 1]].ft);
}
void setAllT()
{
    int i;
    for (i = 0; i < n; i++)
    {
        p[i].ft = p[i].st + p[i].bt;
        p[i].wt = p[i].st - p[i].at;
        p[i].tat = p[i].ft - p[i].at;
    }
}
void setStartT()
{
    int i;
    p[rediQ[0]].st = p[rediQ[0]].at; // Arrival time is start time for
    first process for (i = 1; i < n; i++)
    {
        p[rediQ[i]].st = p[rediQ[i - 1]].bt + p[rediQ[i - 1]].st;
        if (p[rediQ[i]].st < p[rediQ[i]].at) // process start before arriving
            p[rediQ[i]].st = p[rediQ[i]].at;
    }
}
void showRQ()
{
    int i;
    printf("\n\n\t\t\t(time)\nProcess\tBurst\tArrival\tStart\tWait\
tFinish\tTurn_Arround\n");
    for (i = 0; i < n; i++)
        printf("P%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\
n",
               i + 1, p[i].bt, p[i].at, p[i].st, p[i].wt, p[i].ft, p[i].tat);
    float sum;
    for (i = 0; i < n; i++)
        sum += p[i].tat;
    printf("\nAverage Turn Around Time : \t%.2f", sum / n);
    sum = 0.0;
    for (i = 0; i < n; i++)
        sum += p[i].wt;
    printf("\nAverage WaitingTime : \t\t%.2f\n", sum / n);
}
void main()
{
    int i, rq[n];
    printf("Enter the number of process ");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        printf("Enter the Burst Time of Process %d\t", i + 1);
        scanf("%f", &p[i].bt);
        printf("Enter the Arrival Time of process %d\t", i + 1);
        scanf("%f", &p[i].at);
        p[i].done = 0;
        printf("\n");
    }
    FCFS();
}
*****************************OUTPUT******************************
****
cs10@cs10-Lenovo-C20-30:~$ cd Documents/
cs10@cs10-Lenovo-C20-30:~/Documents$ cd kadam 
cs10@cs10-Lenovo-C20-30:~/Documents/kadam$ gcc osprogram7.c 
cs10@cs10-Lenovo-C20-30:~/Documents/kadam$ ./a.out
Enter the number of process 5
Enter the Burst Time of Process 1 6
Enter the Arrival Time of process 1 2
Enter the Burst Time of Process 2 4 5
Enter the Arrival Time of process 2
Enter the Burst Time of Process 3 3
Enter the Arrival Time of process 3 2
Enter the Burst Time of Process 4 3
Enter the Arrival Time of process 4 4
Enter the Burst Time of Process 5 7
Enter the Arrival Time of process 5 6
GANTT CHART
-----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
----------------------------------------
|P1 P3 P4 P2 P5
|----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
----------------------------------------------
|2.0 8.0 11.0 14.0 18.0 25.0
(time)
Process Burst Arrival Start Wait Finish
Turn_Arround
P1 6.0 2.0 2.0 0.0 8.0 6.0
P2 4.0 5.0 14.0 9.0 18.0 13.0
P3 3.0 2.0 8.0 6.0 11.0 9.0
P4 3.0 4.0 11.0 7.0 14.0 10.0
P5 7.0 6.0 18.0 12.0 25.0 19.0
Average Turn Around Time : 11.40
Average WaitingTime : 6.80
 
by

C Language online compiler

Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!

Read inputs from stdin

OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.

#include <stdio.h>
int main()
{
    char name[50];
    printf("Enter name:");
    scanf("%s", name);
    printf("Hello %s \n" , name );
    return 0;
    
}

About C

C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.

Key features:

  • Structured Programming
  • Popular system programming language
  • UNIX, MySQL and Oracle are completely written in C.
  • Supports variety of platforms
  • Efficient and also handle low-level activities.
  • As fast as assembly language and hence used as system development language.

Syntax help

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition if-else is used.

if(conditional-expression) {
   // code
} else {
   // code
}

You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to if-else-if ladder.

switch(conditional-expression) {    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
...    
    
default:     
 // code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement){  
  // code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while(condition) {  
 // code 
}  

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {
  // code 
} while (condition); 

Arrays

Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.

Syntax

One dimentional Array:

data-type array-name[size];

Two dimensional array:

data-type array-name[size][size];

Functions

Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

Two types of functions are present in C

  1. Library Functions:

Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,

  1. User defined functions:

User defined functions are the ones which are written by the programmer based on the requirement.

How to declare a Function

return_type function_name(parameters);

How to call a Function

function_name (parameters)

How to define a Function

return_type function_name(parameters) {  
  //code
}