-
Thông tin
-
Quiz
Mẫu Báo cáo thực hành môn Hệ điều hành lần 4 | Thực hành Hệ điều hành
Lưu đồ hàm ShortestRemainingTimeFirst để lọc qua các cặp tiến trình và sort các giá trị có burst_time nhỏ hơn burst_time của tiến trình đang được thực thi. Tài liệu giúp bạn tham khảo, củng cố kiến thức và ôn tập đạt kết quả cao
Hệ điều hành ( IT007 ) 35 tài liệu
Trường Đại học Công nghệ Thông tin, Đại học Quốc gia Thành phố Hồ Chí Minh 464 tài liệu
Mẫu Báo cáo thực hành môn Hệ điều hành lần 4 | Thực hành Hệ điều hành
Lưu đồ hàm ShortestRemainingTimeFirst để lọc qua các cặp tiến trình và sort các giá trị có burst_time nhỏ hơn burst_time của tiến trình đang được thực thi. Tài liệu giúp bạn tham khảo, củng cố kiến thức và ôn tập đạt kết quả cao
Môn: Hệ điều hành ( IT007 ) 35 tài liệu
Trường: Trường Đại học Công nghệ Thông tin, Đại học Quốc gia Thành phố Hồ Chí Minh 464 tài liệu
Thông tin:
Tác giả:




















Tài liệu khác của Trường Đại học Công nghệ Thông tin, Đại học Quốc gia Thành phố Hồ Chí Minh
Preview text:
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. Họ và tên:
Trần Bảo Phú – 22521104
Nguyễn Hoàng Gia An – 22520021
Nguyễn Duy Khang – 22520619
Nguyễn Văn Duy Bảo – 22520114 Lớp: IT007.O11 HỆ ĐIỀU HÀNH BÁO CÁO LAB 4 CHECKLIST 3.5. BÀI TẬP THỰC HÀNH BT 1 BT 2
Vẽ lưu đồ giải thuật x x
Chạy tay lưu đồ giải thuật x x Hiện thực code x x
Chạy code và kiểm chứng x x 3.6. BÀI TẬP ÔN TẬP BT 1
Vẽ lưu đồ giải thuật 
Chạy tay lưu đồ giải thuật  Hiện thực code x
Chạy code và kiểm chứng x Tự chấm điểm: 9/10 1
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng.
*Lưu ý: Xuất báo cáo theo định dạng PDF, đặt tên theo cú pháp: _LAB3.pdf 2.5. BÀI TẬP THỰC HÀNH
1. Giải thuật Shortest-Job-First - Lưu đồ giải thuật: - Hàm sortByArrival: - Hàm sortByBurst: 2
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. - Giải thuật SJF: 3
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng.
Chạy tay lưu đồ giải thuật: Process Arrival time Burst time P1 2 3 P2 4 7 P3 5 2 P4 3 2 P5 1 1
-Nhập n=5 với dữ liệu như bảng trên. Sau khi chạy hàm sortByArrivalTime ta được bảng mới: 4
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. Process Arrival time Burst time P3 5 2 P2 4 7 P4 3 2 P1 2 3 P5 1 1
*Xét n=5 ta có: p[n-1] = p[5-1] = p[4] ( Tiến trình P5) + i=0
+ time_current = p[n-1].arrival_time = p[5-1].arrival_time = p[4].arrival.time
=> time_current là arrival time của tiến trình P5 =>time_current = 1;
-Do i+time_current += p[n-1].burst_time ⇔ time_current += p[4].burst_time ⇔time_current = 1+1 = 2;
+Start = time_current - p[n-1].burst_time ⇔ 2- 1 = 1; TAT = time_current - p[n-
1].arrival_time ⇔ 2 - 1 = 1; End = time_current = 2; Gantt chart: 0 1 2
+avg_waiting_time += start - p[n-1].arrival_time
⇔ avg_waiting_time += start - p[n-1].arrival_time = 1 - 1 = 0; avg_turn_around_time +=
TAT ⇔ avg_turn_around_time = 0 + 1 = 1; 5
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. +n = n - 1 = 4
+Sử dụng hàm sortByBurstTime ta được Process Arrival time Burst time P3 5 2 P2 4 7 P4 3 2 P1 2 3
*Xét n=4 ta có: ( Thực thi tiến trình P1) Tương tự, ta có:
+time_current += p[n-1].burst_time ⇔ time_current = 2 + 3 = 5;
+Start = time_current - p[n-1].burst_time ⇔ 5 - 3 = 2; TAT = time_current - p[n-
1].arrival_time ⇔ 5 - 2 = 3; End = time_current = 5; Gantt chart: P5 P1 0 1 2 5
+avg_waiting_time += start - p[n-1].arrival_time
⇔ avg_waiting_time += start - p[n-1].arrival_time = 0+( 2 - 2) = 0; avg_turn_around_time += TAT
⇔ avg_turn_around_time = 1 + 5 = 6; +n = n - 1 = 3
+Sử dụng hàm sortByBurstTime ta có: 6
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. Process Arrival time Burst time P2 4 7 P3 5 2 P4 3 2
*Xét n=3 ta có: ( Thực thi tiến trình P4) Tương tự, ta có:
+time_current += p[n-1].burst_time ⇔ time_current = 5+ 2 = 7;
+Start = time_current - p[n-1].burst_time ⇔ 7- 2 = 5; TAT = time_current - p[n-
1].arrival_time ⇔ 7 - 3 = 4; End = time_current = 7; Gantt chart: P5 P1 P4 0 1 2 5 7
+avg_waiting_time += start - p[n-1].arrival_time
⇔ avg_waiting_time += start - p[n-1].arrival_time = 0+(5 - 3) = 2; avg_turn_around_time += TAT
⇔ avg_turn_around_time =6 + 4 = 10; +n = n - 1 = 2
+Sử dụng hàm sortByBurstTime ta có bảng: Process Arrival time Burst time P2 4 7 P3 5 2 7
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng.
*Xét n=2 ta có: ( Thực thi tiến trình P3) Tương tự, ta có:
+time_current += p[n-1].burst_time ⇔ time_current = 7+ 2 = 9;
+Start = time_current - p[n-1].burst_time ⇔ 9- 2 = 7; TAT = time_current - p[n-
1].arrival_time ⇔ 9 - 5 = 4; End = time_current = 9; Gantt chart: P5 P1 P4 P3 0 1 2 5 7 9
+avg_waiting_time += start - p[n-1].arrival_time
⇔ avg_waiting_time += start - p[n-1].arrival_time =2 + ( 7 - 5 ) = 4; avg_turn_around_time += TAT
⇔ avg_turn_around_time =10 + 4 = 14; +n = n - 1 = 1
+Sử dụng hàm sortByBurstTime ta có bảng: Process Arrival time Burst time P2 4 7
*Xét n=1 ta có: ( Thực thi tiến trình P2) Tương tự, ta có:
+time_current += p[n-1].burst_time ⇔ time_current = 9+ 7 = 16;
+Start = time_current - p[n-1].burst_time ⇔ 16 - 2 = 14; TAT = time_current - p[n-
1].arrival_time ⇔ 16 - 4 = 12; End = time_current = 16; Gantt chart: 8
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. P5 P1 P4 P3 P2 0 1 2 5 7 9 16
+avg_waiting_time += start - p[n-1].arrival_time
⇔ avg_waiting_time += start - p[n-1].arrival_time = 4 + (9 - 4) = 9; avg_turn_around_time += TAT
⇔ avg_turn_around_time = 14 + 12 = 26; +n = n - 1 = 0
*Xét n=0: Vòng lặp sẽ dừng
+Chương trình xuất ra kết quả avg_waiting_time = 9/5 = 1.8
+Chương trình xuất ra kết quả avg_waiting_time = 26/5 = 5.2 Hiện thực code: #include #include #include typedef struct { int iPID; int iArrival, iBurst;
int iStart, iFinish, iWaiting, iResponse, iTaT, iQuantumTime; } PCB; typedef struct 9
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. { int iPID; int iStart, iFinish; } Gantt;
float iAverageWT = 0, iAverageTaT = 0;
void inputProcess(int n, PCB P[]) { srand(time(0));
for (int i = 0; i < n; i++) { P[i].iPID = i + 1; P[i].iArrival = rand() % 21;
P[i].iBurst = 2 + rand() % 11; } }
void printProcess(int n, PCB P[]) {
for (int i = 0; i < n; i++) {
printf("PID: %d, Arrival time: %d, Bursting time: %d\n", P[i].iPID, P[i].iArrival, P[i].iBurst); } } Gantt GanttChart[20]; 10
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. int ganttSize = 0;
void addToGanttChart(int iPID, int iStart, int iFinish) {
if ((ganttSize > 0) && (GanttChart[ganttSize - 1].iPID == iPID)) {
GanttChart[ganttSize - 1].iFinish = iFinish; } else {
GanttChart[ganttSize].iPID = iPID;
GanttChart[ganttSize].iStart = iStart;
GanttChart[ganttSize].iFinish = iFinish; ganttSize++; } } void exportGanttChart() { printf("\nGantt Chart:\n");
for (int i = 0; i < ganttSize; i++) {
if(GanttChart[i].iPID > 0)
printf("| P%d ", GanttChart[i].iPID); else printf("| __ "); } 11
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. printf("|\n");
for (int i = 0; i < ganttSize; i++) {
printf("%d ", GanttChart[i].iStart); if (i == ganttSize - 1)
printf("%d\n", GanttChart[i].iFinish); } printf("\n\n"); }
void sortByArrival(int n, PCB P[]) { PCB Ptemp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (P[i].iArrival < P[j].iArrival) { Ptemp = P[i]; P[i] = P[j]; P[j] = Ptemp; } } } } 12
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng.
void sortByBurst(int n, PCB P[], int iTime) { PCB Ptemp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (P[i].iBurst < P[j].iBurst && P[i].iArrival <= iTime) { Ptemp = P[i]; P[i] = P[j]; P[j] = Ptemp; } } } }
void ShortestJobFirst(int n, PCB P[]) {
int i, j, iTime = 0, iMin, iTemp, iCount = 0; sortByArrival(n, P); iTime = P[n - 1].iArrival; for (i = 0; i < n; n--) {
if(P[n - 1].iArrival > iTime) { 13
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. P[n - 1].iStart = iTime; iTime = P[n - 1].iArrival; P[n - 1].iFinish = iTime;
addToGanttChart(-1, P[n - 1].iStart, P[n - 1].iFinish); n++; continue; } else{ P[n - 1].iStart = iTime; } iTime += P[n - 1].iBurst; P[n - 1].iFinish = iTime;
addToGanttChart(P[n - 1].iPID, P[n - 1].iStart, P[n - 1].iFinish);
sortByBurst(n - 1, P, iTime);
iAverageWT += (iTime - P[n - 1].iArrival - P[n - 1].iBurst);
iAverageTaT += (iTime - P[n - 1].iArrival); P[n - 1].iStart = 0; P[n - 1].iFinish = 0; } } int main() { PCB Input[20]; Gantt GanttChart[100];
int iNumberOfProcess, ganttSize = 0; 14
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng.
printf("Enter number of process: ");
scanf("%d", &iNumberOfProcess);
inputProcess(iNumberOfProcess, Input);
printProcess(iNumberOfProcess, Input);
printf("\n================================\n");
printf("====== Shortest Job First ======\n");
printf("================================\n\n");
ShortestJobFirst(iNumberOfProcess, Input);
// printf("| PID | Arrival Time | Bursting Time | Turn-around Time | Waiting Time |\n");
// for (int i = 0; i < iNumberOfProcess; i++) // {
// printf("| %d | %d | %d | %d | %d |\n",
Input[i].iPID, Input[i].iArrival, Input[i].iBurst, Input[i].iTaT, Input[i].iWaiting); // }
exportGanttChart(ganttSize, GanttChart);
printf("Average Waiting Time: %2f\n", iAverageWT / iNumberOfProcess);
printf("Average Turn-around Time: %2f\n", iAverageTaT / iNumberOfProcess); }
Chạy code và kiểm chứng: 1. Test case 1 a. Kết quả chạy code 15
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. - Gantt Chart: P2 - P4 - P3 P5 P1 0 5 6 12 15 24 31 41 P1 P2 P3 P4 P5 Average TG đáp ứng 13 0 0 0 5 3.6 TG đợi 13 0 0 0 5 3.6 TG hoàn 23 5 9 6 12 11 thành 2. Test case 2 a. Kết quả chạy code 16
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. b. Chạy tay kiểm chứng - Gantt chart: P3 P2 P4 P5 P1 1 11 17 23 33 44 P1 P2 P3 P4 P5 Average TG đáp ứng 30 10 0 9 19 13.6 TG đợi 30 10 0 9 19 13.6 TG hoàn 41 16 10 15 29 22.2 thành 3. Test case 3 a. Kết quả chạy code 17
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. b. Chạy tay kiểm chứng P3 P5 P1 P4 P2 3 5 8 10 21 33 P1 P2 P3 P4 P5 Average TG đáp ứng 2 17 0 4 0 4.6 TG đợi 2 17 0 4 0 4.6 TG hoàn 4 29 2 15 3 10.6 thành
2. Giải thuật Shortest-Remaining-Time-First
Lưu đồ giải thuật:
- Lưu đồ hàm sort giảm dần các tiến trình đưa vào arrival time 18
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng. 19
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng.
- Lưu đồ hàm ShortestRemainingTimeFirst để lọc qua các cặp tiến trình và sort các
giá trị có burst_time nhỏ hơn burst_time của tiến trình đang được thực thi. 20