Round Robin Scheduling Algorithm

5 14 0
Round Robin Scheduling Algorithm

Đang tải... (xem toàn văn)

Thông tin tài liệu

Thuật toán cho giải thuật round robin, xuất ra thông tin của tiến trình bao gồm thời gian bắt đầu, thời gian hoàn thành, thời gian chờ, thời gian phản hồi, thời gian quay lại, và biểu đồ gantt........................................................................................................................................................................................................................................................

#include typedef struct { int iPID; int iArrival, iBurst; int iStart, iFinish, iWaiting, iResponse, iTaT; int iRemaining; } PCB; void swapProcess(PCB *P, PCB *Q); void sortByArrival(PCB P[], int n); void printProcess(int n, PCB P[]); void inputProcess(int *iNumberOfProcess, PCB Input[]); void exportGanttChart(int adr, int current_time[], int gantt_chart[]); void calculateAWT(int n, PCB P[]); void calculateATaT(int n, PCB P[]); int main() { int iNumberOfProcess, iTimeSlice; PCB Input[100]; inputProcess(&iNumberOfProcess, Input); sortByArrival(Input, iNumberOfProcess); printf("Enter Time Slice OR Quantum Number : "); scanf("%d", &iTimeSlice); int i, time, remain = iNumberOfProcess, flag = 0; int adr = 0; int Gantt_Chart[100]; int Current_Time[100] = {Input[0].iArrival}; for (time = Input[0].iArrival, i = 0; remain != 0;) { if (Input[i].iRemaining 0) { if (Input[i].iRemaining == Input[i].iBurst) { Input[i].iStart = time; Input[i].iResponse = Input[i].iStart - Input[i].iArrival; } time = time + Input[i].iRemaining; Gantt_Chart[adr++] = Input[i].iPID; Current_Time[adr] = time; Input[i].iFinish = time; Input[i].iRemaining = 0; flag = 1; } else if (Input[i].iRemaining > 0) { if (Input[i].iRemaining == Input[i].iBurst) { Input[i].iStart = time; Input[i].iResponse = Input[i].iStart - Input[i].iArrival; } Input[i].iRemaining = Input[i].iRemaining - iTimeSlice; time = time + iTimeSlice; Gantt_Chart[adr++] = Input[i].iPID; Current_Time[adr] = time; } if (Input[i].iRemaining == && flag == 1) { remain ; Input[i].iTaT = time - Input[i].iArrival; Input[i].iWaiting = time - Input[i].iArrival - Input[i].iBurst; flag = 0; } if (i == iNumberOfProcess - 1) i = 0; else if (Input[i + 1].iArrival Input[j].iArrival) swapProcess(&Input[i], &Input[j]); } } } void printProcess(int iNumberOfProcess, PCB Input[]) { printf("Process\t\tStart\t\tFinish\t\tWaiting\t\tResponse\tTurnaround\n"); for (int i = 0; i < iNumberOfProcess; i++) { printf("P%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", Input[i].iPID, Input[i].iStart, Input[i].iFinish, Input[i].iWaiting, Input[i].iResponse, Input[i].iTaT); } } void inputProcess(int *iNumberOfProcess, PCB Input[]) { printf("Enter Number Of Processes : "); scanf("%d", iNumberOfProcess); for (int i = 0; i < *iNumberOfProcess; i++) { printf("Enter details for Process %d:\n", i + 1); printf("Arrival Time: "); scanf("%d", &Input[i].iArrival); printf("Burst Time: "); scanf("%d", &Input[i].iBurst); Input[i].iPID = i + 1; Input[i].iRemaining = Input[i].iBurst; } } void exportGanttChart(int adr, int current_time[], int gantt_chart[]) { printf("\nGantt Chart:\n"); // Print the Gantt chart int i, j; for (i = 0; i < adr; i++) { printf("P%d\t", gantt_chart[i]); } printf("\n"); // Print the time uniiTimeSlice for (j = 0; j < adr; j++) { printf("%d\t", current_time[j]); } printf("%d", current_time[j]); printf("\n\n"); } void calculateAWT(int n, PCB P[]) { float fAWT = 0; for (int i = 0; i < n; i++) { fAWT += P[i].iWaiting; } fAWT /= n; printf("\nAverage Waiting Time: %.2f\n", fAWT); } void calculateATaT(int n, PCB P[]) { float fATaT = 0; for (int i = 0; i < n; i++) { fATaT += P[i].iTaT; } fATaT /= n; printf("Average Turnaround Time: %.2f\n", fATaT); }

Ngày đăng: 12/12/2023, 01:47

Tài liệu cùng người dùng

Tài liệu liên quan