กำหนดกระบวนการ เวลาระเบิดของกระบวนการตามลำดับและขีดจำกัดควอนตัม งานคือการค้นหาและพิมพ์เวลารอ เวลาตอบสนอง และเวลาเฉลี่ยตามลำดับโดยใช้วิธี Shortest Job First Scheduling ที่ไม่ยึดหน่วง
งานแรกที่สั้นที่สุดในการจัดตารางงานแรกคืออะไร
การจัดกำหนดการงานครั้งแรกที่สั้นที่สุดคืออัลกอริธึมการจัดกำหนดการงานหรือกระบวนการที่เป็นไปตามระเบียบวินัยการจัดกำหนดการที่ไม่ยึดเอาเสียก่อน ในสิ่งนี้ ตัวกำหนดตารางเวลาจะเลือกกระบวนการจากคิวรอโดยมีเวลาเสร็จสิ้นน้อยที่สุด และจัดสรร CPU ให้กับงานหรือกระบวนการนั้น Shortest Job First เป็นที่ต้องการมากกว่าอัลกอริธึม FIFO เพราะ SJF นั้นเหมาะสมกว่าเพราะช่วยลดเวลารอโดยเฉลี่ยซึ่งจะช่วยเพิ่มปริมาณงาน
เวลาตอบสนอง เวลารอ และเวลาที่เสร็จสิ้นคืออะไร
- เวลาที่เสร็จสมบูรณ์ คือเวลาที่กระบวนการต้องใช้เพื่อให้การดำเนินการเสร็จสิ้น
-
เวลาตอบสนองคือช่วงเวลาระหว่างการส่งกระบวนการและเสร็จสิ้น
เวลาดำเนินการ =เสร็จสิ้นกระบวนการ – การส่งกระบวนการ
-
เวลารอคือความแตกต่างระหว่างเวลาตอบสนองกับเวลาที่ระเบิด
เวลารอ =เวลาตอบสนอง – เวลาที่ระเบิด
ตัวอย่าง
เราได้รับกับกระบวนการ P1, P2, P3, P4 และ P5 ที่มีเวลาระเบิดที่สอดคล้องกันด้านล่าง
กระบวนการ | เวลาระเบิด |
---|---|
P1 | 4 |
P2 | 2 |
P3 | 8 |
P4 | 1 |
P5 | 9 |
เนื่องจากเวลาที่ระเบิดของกระบวนการ P4 นั้นน้อยที่สุดในบรรดากระบวนการทั้งหมด มันจะถูกจัดสรร CPU ก่อน หลังจากนั้น P2 จะเข้าคิว จากนั้น P1, P3 และ P5
เวลารอเฉลี่ยคำนวณโดยใช้แผนภูมิแกนต์ P1 ต้องรอ 3 P2 ต้องรอ 1 P3 ต้องรอ 7 P4 ต้องรอ 0 และ P5 ต้องรอ 15 ดังนั้นเวลารอเฉลี่ยจะเท่ากับ -
อัลกอริทึม
Start Step 1-> In function swap(int *a, int *b) Set temp = *a Set *a = *b Set *b = temp Step 2-> In function arrangeArrival(int num, int mat[][3]) Loop For i=0 and i<num and i++ Loop For j=0 and j<num-i-1 and j++ If mat[1][j] > mat[1][j+1] then, For k=0 and k<5 and k++ Call function swap(mat[k][j], mat[k][j+1]) Step 3-> In function completionTime(int num, int mat[][3]) Declare temp, val Set mat[3][0] = mat[1][0] + mat[2][0] Set mat[5][0] = mat[3][0] - mat[1][0] Set mat[4][0] = mat[5][0] - mat[2][0] Loop For i=1 and i<num and i++ Set temp = mat[3][i-1] Set low = mat[2][i] Loop For j=i and j<num and j++ If temp >= mat[1][j] && low >= mat[2][j] then, Set low = mat[2][j] Set val = j Set mat[3][val] = temp + mat[2][val] Set mat[5][val] = mat[3][val] - mat[1][val] Set mat[4][val] = mat[5][val] - mat[2][val] Loop For k=0; k<6; k++ Call function swap(mat[k][val], mat[k][i]) Step 4-> In function int main() Declare and set num = 3, temp Declare and set mat[6][3] = {1, 2, 3, 3, 6, 4, 2, 3, 4} Print Process ID, Arrival Time, Burst Time Loop For i=0 and i<num and i++ Print the values of mat[0][i], mat[1][i], mat[2][i] Call function arrangeArrival(num, mat) Call function completionTime(num, mat) Print Process ID, Arrival Time, Burst Time, Waiting Time, Turnaround Time Loop For i=0 and i<num and i++ Print the values of mat[0][i], mat[1][i], mat[2][i], mat[4][i], mat[5][i] Stop
ตัวอย่าง
// C++ program to implement Shortest Job first with Arrival Time #include<iostream> using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void arrangeArrival(int num, int mat[][3]) { for(int i=0; i<num; i++) { for(int j=0; j<num-i-1; j++) { if(mat[1][j] > mat[1][j+1]) { for(int k=0; k<5; k++) { swap(mat[k][j], mat[k][j+1]); } } } } } void completionTime(int num, int mat[][3]) { int temp, val; mat[3][0] = mat[1][0] + mat[2][0]; mat[5][0] = mat[3][0] - mat[1][0]; mat[4][0] = mat[5][0] - mat[2][0]; for(int i=1; i<num; i++) { temp = mat[3][i-1]; int low = mat[2][i]; for(int j=i; j<num; j++) { if(temp >= mat[1][j] && low >= mat[2][j]) { low = mat[2][j]; val = j; } } mat[3][val] = temp + mat[2][val]; mat[5][val] = mat[3][val] - mat[1][val]; mat[4][val] = mat[5][val] - mat[2][val]; for(int k=0; k<6; k++) { swap(mat[k][val], mat[k][i]); } } } int main() { int num = 3, temp; int mat[6][3] = {1, 2, 3, 3, 6, 4, 2, 3, 4}; cout<<"Before Arrange...\n"; cout<<"Process ID\tArrival Time\tBurst Time\n"; for(int i=0; i<num; i++) { cout<<mat[0][i]<<"\t\t"<<mat[1][i]<<"\t\t"<<mat[2][i]<<"\n"; } arrangeArrival(num, mat); completionTime(num, mat); cout<<"Final Result...\n"; cout<<"Process ID\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\n"; for(int i=0; i<num; i++) { cout<<mat[0][i]<<"\t\t"<<mat[1][i]<<"\t\t"<<mat[2][i]<<"\t\t"<<mat[4][i]<<"\t\t"<<mat[5][i]<<"\n"; } }
ผลลัพธ์