#include<stdio.h>
#define MAX 1000
struct process{
int pid,at,bt,ct,tat,wt,start_time;
};
void generate_table(struct process p[],int n)
{
float total_wt = 0, total_tat = 0;
printf("\nPID\tAT\tBT\tCT\tTAT\tWT\tRT\n"); for(int i=0;i<n;i++)
{
p[i].tat = p[i].ct - p[i].at;
p[i].wt = p[i].tat-p[i].bt;
total_tat += p[i].tat;
total_wt+=p[i].wt;
printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p
[i
].
pid,p
[i
].
at,p
[i
].
bt,p
[i
].
ct,p
[i
].
tat,p
[i
].
wt,p
[i
].
start_time); }
printf("\nAverage Turnaround Time: %.2f",total_tat
); printf("\nAverage Waiting Time: %.2f",total_wt
);
}
void SRTF(struct process p[],int n)
{
int time = 0,completed
= 0,current
=-1; int remaining_time[MAX];
for(int i=0;i<n;i++)
{
remaining_time[i] = p[i].bt;
}
while(completed<n)
{
int shortest = -1;
int min_time = 999999;
for(int i=0;i<n;i++)
{
if(p
[i
].
at<=time && remaining_time
[i
]>0 && remaining_time
[i
]<min_time
) {
min_time = remaining_time[i];
shortest=i;
}
}
if(shortest == -1){
continue;
}
if(remaining_time[shortest] == p[shortest].bt)
{
p
[shortest
].
start_time = time - p
[shortest
].
at; }
remaining_time[shortest]--;
if(remaining_time[shortest] == 0)
{
completed++;
}
}
generate_table(p,n);
}
int main()
{
int i,n;
struct process p[MAX],c[MAX];
printf("Enter the number of process: ");
for(i=0;i<n;i++)
{
p[i].pid = i+1;
printf("Enter Arrival time of process P%d: ",i
+1);
printf("Enter Burst time of process P%d: ",i
+1); }
for(i=0;i<n;i++){
c[i] = p[i];
}
SRTF(c,n);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2RlZmluZSBNQVggMTAwMApzdHJ1Y3QgcHJvY2Vzc3sKICAgIGludCBwaWQsYXQsYnQsY3QsdGF0LHd0LHN0YXJ0X3RpbWU7Cn07Cgp2b2lkIGdlbmVyYXRlX3RhYmxlKHN0cnVjdCBwcm9jZXNzIHBbXSxpbnQgbikKewogICAgZmxvYXQgdG90YWxfd3QgPSAwLCB0b3RhbF90YXQgPSAwOwoKICAgIHByaW50ZigiXG5QSURcdEFUXHRCVFx0Q1RcdFRBVFx0V1RcdFJUXG4iKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgcFtpXS50YXQgPSBwW2ldLmN0IC0gcFtpXS5hdDsKICAgICAgICBwW2ldLnd0ID0gcFtpXS50YXQtcFtpXS5idDsKICAgICAgICB0b3RhbF90YXQgKz0gcFtpXS50YXQ7CiAgICAgICAgdG90YWxfd3QrPXBbaV0ud3Q7CgogICAgICAgIHByaW50ZigiJWRcdCVkXHQlZFx0JWRcdCVkXHQlZFx0JWRcbiIscFtpXS5waWQscFtpXS5hdCxwW2ldLmJ0LHBbaV0uY3QscFtpXS50YXQscFtpXS53dCxwW2ldLnN0YXJ0X3RpbWUpOwogICAgfQoKICAgIHByaW50ZigiXG5BdmVyYWdlIFR1cm5hcm91bmQgVGltZTogJS4yZiIsdG90YWxfdGF0KTsKICAgIHByaW50ZigiXG5BdmVyYWdlIFdhaXRpbmcgVGltZTogJS4yZiIsdG90YWxfd3QpOwoKfQoKdm9pZCBTUlRGKHN0cnVjdCBwcm9jZXNzIHBbXSxpbnQgbikKewogICAgaW50IHRpbWUgPSAwLGNvbXBsZXRlZCA9IDAsY3VycmVudD0tMTsKICAgIGludCByZW1haW5pbmdfdGltZVtNQVhdOwoKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgcmVtYWluaW5nX3RpbWVbaV0gPSBwW2ldLmJ0OwogICAgfQoKICAgIHdoaWxlKGNvbXBsZXRlZDxuKQogICAgewogICAgICAgIGludCBzaG9ydGVzdCA9IC0xOwogICAgICAgIGludCBtaW5fdGltZSA9IDk5OTk5OTsKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYocFtpXS5hdDw9dGltZSAmJiByZW1haW5pbmdfdGltZVtpXT4wICYmIHJlbWFpbmluZ190aW1lW2ldPG1pbl90aW1lKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtaW5fdGltZSA9IHJlbWFpbmluZ190aW1lW2ldOwogICAgICAgICAgICAgICAgc2hvcnRlc3Q9aTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihzaG9ydGVzdCA9PSAtMSl7CiAgICAgICAgICAgIHRpbWUrKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmKHJlbWFpbmluZ190aW1lW3Nob3J0ZXN0XSA9PSBwW3Nob3J0ZXN0XS5idCkKICAgICAgICB7CiAgICAgICAgICAgIHBbc2hvcnRlc3RdLnN0YXJ0X3RpbWUgPSB0aW1lIC0gcFtzaG9ydGVzdF0uYXQ7CiAgICAgICAgfQoKICAgICAgICByZW1haW5pbmdfdGltZVtzaG9ydGVzdF0tLTsKICAgICAgICB0aW1lKys7CgogICAgICAgIGlmKHJlbWFpbmluZ190aW1lW3Nob3J0ZXN0XSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgY29tcGxldGVkKys7CiAgICAgICAgICAgIHBbc2hvcnRlc3RdLmN0ID0gdGltZTsKICAgICAgICB9CiAgICB9CiAgICBnZW5lcmF0ZV90YWJsZShwLG4pOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBpLG47CiAgICBzdHJ1Y3QgcHJvY2VzcyBwW01BWF0sY1tNQVhdOwogICAgcHJpbnRmKCJFbnRlciB0aGUgbnVtYmVyIG9mIHByb2Nlc3M6ICIpOwogICAgc2NhbmYoIiVkIiwmbik7CgogICAgZm9yKGk9MDtpPG47aSsrKQogICAgewogICAgICAgIHBbaV0ucGlkID0gaSsxOwoKICAgICAgICBwcmludGYoIkVudGVyIEFycml2YWwgdGltZSBvZiBwcm9jZXNzIFAlZDogIixpKzEpOwogICAgICAgIHNjYW5mKCIlZCIsJnBbaV0uYXQpOwoKICAgICAgICBwcmludGYoIkVudGVyIEJ1cnN0IHRpbWUgb2YgcHJvY2VzcyBQJWQ6ICIsaSsxKTsKICAgICAgICBzY2FuZigiJWQiLCZwW2ldLmJ0KTsKICAgIH0KCiAgICBmb3IoaT0wO2k8bjtpKyspewogICAgICAgIGNbaV0gPSBwW2ldOwogICAgfQogICAgU1JURihjLG4pOwogICAgcmV0dXJuIDA7Cn0K