HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆTHÔNG TIN ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ BÀI TẬP MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH VIẾT CHƯƠNG TRÌNH BẰNG NGÔN NGỮ C MÔ TẢ THUẬT TOÁN LẬP LỊCH CHO CPU KHÔNG ƯU TIÊN THEO THUẬT TOÁN SJF (SHORTER JOB FIRT) Sinh viên thực hiện: Nguyễn Thanh Hải MSSV: AT160221 Trần Trung Hiếu MSSV: AT160519 Vũ Minh Hiếu MSSV: AT160520 Lớp: AT16C405 Người hướng dẫn: TS. Nguyễn Đào Trường Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã Hà Nội, 2021 NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN MỤC LỤC LỜI NÓI ĐẦU .........................................................................................................1 Chương 1 KHÁI QUÁT VỀ THUẬT TOÁN SJF(SHORTER JOB FIRT) ......2 1.1 Khái quát về thuật toán Shorter job first. ................................................... 2 1.11 Những điều cần biết trước khi tìm hiểu về thuật toán...............................2 1.1.2 Khái niệm về thuật toán Shorter job first .................................................2 1.2 Giải thích thuật toán và ví dụ. .................................................................... 2 1.2.1 Giải thích thuật toán ................................................................................2 1.2.2 Ví dụ .........................................................................................................3 Chương 2 MÔ TẢ THUẬT TOÁN SJF(SHORTER JOB FIRT) BẰNG C ......4 2.1 Mô tả thuật toán SJF bằng C. ..................................................................... 4 2.1.1 Giải thích thuật toán ................................................................................4 2.1.2 Kết quả .....................................................................................................8 KẾT LUẬN ..............................................................................................................9 TÀI LIỆU THAM KHẢO ....................................................................................10 TỪ NGỮ VIẾT TẮT ..........................................................................................10 LỜI NÓI ĐẦU Trong thời đại ngày nay, quản lý thời gian chưa bao giờ dễ dàng, rất nhiều lần chúng ta có thể tiêu xài một cách hoang phí. Thế nên trong suốt chiều dài lịch sử chúng ta luôn tìm cách để tối ưu thời gian. Máy tính cũng vậy. Nó thật sự cần các thuật toán để tránh việc lãng phí tài nguyên cũng như tối ưu thời gian hoạt động nhất có thể. Hiểu được vấn đề này, nhóm chúng em học hỏi, tìm tòi để viết báo cáo về thuật toán SJF (Shortest Job First) - một trong những thuật toán tối ưu hiệu quả dành cho CPU, cũng như mô tả thuật toán bằng C . Chúng em khi làm bản báo cáo cũng đã gặp không ít khó khăn và thắc mắc, nhưng nhờ thầy TS.Nguyễn Đào Trường mà chúng em đã có thể hoàn thành bản báo cáo này. Với bài báo cáo đòi hỏi tính chính xác cao cũng như tập chung cao thì sai sót sẽ có thể xảy ra. Rất mong thầy và các bạn có thể đóng góp nhận xét về bản báo cáo để chúng em có thể cải thiện hơn nữa. CHƯƠNG 1: KHÁI QUÁT VỀ THUẬT TOÁN SFJ(SHORTER JOB FIRT) Chương này trình bày sẽ trình bày về khái quát thuật toán SFJ(Shortest Job First) 1.1 Khái quát về thuật toán Shorter job first 1.1.1 Những điều cần biết trước khi tìm hiểu về thuật toán. - Tiến trình là một bộ phận của một chương trình thực đang thực hiện, đơn vị thực hiện tiến trình là processer. - Như mọi người đã biết, tiến trình có hai thứ rất quan trọng khi lập lịch cho CPU, đó là Burst Time(thời gian sử dụng CPU) và Arival Time(thời gian đến CPU). - Để giải thích đơn giản, Arival Time giống như khoảng thời gian cần để đến trường vậy. VD: có bạn nhà ở hà đông, có bạn nhà ở thanh xuân, ... Điều này dẫn đến việc có khoảng thời gian mà các bạn đi học sẽ khác nhau. Có bạn mất 8 tiếng, có bạn mất 15 phút. Còn Burst Time giống như thời gian lên lớp học ở trường. Có người học 1 ca, có người học 5 ca. - Vì thời gian để xử lý tiến trình là khác nhau, nên việc lập lịch cho CPU cũng có nhiều thuật toán được viết ra, điển hình là Shorter job first. 1.1.2 Khái niệm về thuật toán Shorter job first - Thuật toán Shorter job first là thuật toán cho phép hệ điều hành chọn tiến trình có chiều dài burt time nhỏ nhất để cho CPU xử lý. - Khi lựa chọn các tiến trình, nó có hai dạng: một là ưu tiên, hai là không ưu tiên. Nhưng trong khuôn khổ của bản báo cáo, chúng em sẽ chỉ làm về không ưu tiên. -SFJ là tối ưu cho thời gian chờ đợi trung bình của các tiến trình là nhỏ nhất 1.2 Giải thích thuật toán và ví dụ. 1.2.1 Giải thích thuật toán - B1: Hệ điều hành sẽ chọn tiến trình đã đến đầu tiên.
HỌC VIỆN KỸ THUẬT MẬT Mà KHOA CÔNG NGHỆTHÔNG TIN ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ BÀI TẬP MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH VIẾT CHƯƠNG TRÌNH BẰNG NGƠN NGỮ C MƠ TẢ THUẬT TỐN LẬP LỊCH CHO CPU KHƠNG ƯU TIÊN THEO THUẬT TOÁN SJF (SHORTER JOB FIRT) Sinh viên thực hiện: Nguyễn Thanh Hải MSSV: AT160221 Trần Trung Hiếu MSSV: AT160519 Vũ Minh Hiếu MSSV: AT160520 Lớp: AT16C405 Người hướng dẫn: TS Nguyễn Đào Trường Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã Hà Nội, 2021 NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN MỤC LỤC LỜI NÓI ĐẦU .1 Chương KHÁI QUÁT VỀ THUẬT TOÁN SJF(SHORTER JOB FIRT) .2 1.1 Khái quát thuật toán Shorter job first 1.11 Những điều cần biết trước tìm hiểu thuật tốn .2 1.1.2 Khái niệm thuật toán Shorter job first .2 1.2 Giải thích thuật tốn ví dụ 1.2.1 Giải thích thuật tốn 1.2.2 Ví dụ .3 Chương MÔ TẢ THUẬT TỐN SJF(SHORTER JOB FIRT) BẰNG C .4 2.1 Mơ tả thuật toán SJF C .4 2.1.1 Giải thích thuật tốn 2.1.2 Kết KẾT LUẬN TÀI LIỆU THAM KHẢO 10 TỪ NGỮ VIẾT TẮT 10 LỜI NÓI ĐẦU Trong thời đại ngày nay, quản lý thời gian chưa dễ dàng, nhiều lần tiêu xài cách hoang phí Thế nên suốt chiều dài lịch sử ln tìm cách để tối ưu thời gian Máy tính Nó thật cần thuật tốn để tránh việc lãng phí tài ngun tối ưu thời gian hoạt động Hiểu vấn đề này, nhóm chúng em học hỏi, tìm tịi để viết báo cáo thuật tốn SJF (Shortest Job First) - thuật toán tối ưu hiệu dành cho CPU, mô tả thuật toán C Chúng em làm báo cáo gặp khơng khó khăn thắc mắc, nhờ thầy TS.Nguyễn Đào Trường mà chúng em hồn thành báo cáo Với báo cáo địi hỏi tính xác cao tập chung cao sai sót xảy Rất mong thầy bạn đóng góp nhận xét báo cáo để chúng em cải thiện CHƯƠNG 1: KHÁI QT VỀ THUẬT TỐN SFJ(SHORTER JOB FIRT) Chương trình bày trình bày khái qt thuật tốn SFJ(Shortest Job First) 1.1 Khái quát thuật toán Shorter job first 1.1.1 Những điều cần biết trước tìm hiểu thuật tốn - Tiến trình phận chương trình thực thực hiện, đơn vị thực tiến trình processer - Như người biết, tiến trình có hai thứ quan trọng lập lịch cho CPU, Burst Time(thời gian sử dụng CPU) Arival Time(thời gian đến CPU) - Để giải thích đơn giản, Arival Time giống khoảng thời gian cần để đến trường VD: có bạn nhà hà đơng, có bạn nhà xn, Điều dẫn đến việc có khoảng thời gian mà bạn học khác Có bạn tiếng, có bạn 15 phút Cịn Burst Time giống thời gian lên lớp học trường Có người học ca, có người học ca - Vì thời gian để xử lý tiến trình khác nhau, nên việc lập lịch cho CPU có nhiều thuật tốn viết ra, điển hình Shorter job first 1.1.2 Khái niệm thuật toán Shorter job first - Thuật toán Shorter job first thuật toán cho phép hệ điều hành chọn tiến trình có chiều dài burt time nhỏ CPU xử lý - Khi lựa chọn tiến trình, có hai dạng: ưu tiên, hai không ưu tiên Nhưng khuôn khổ báo cáo, chúng em làm không ưu tiên -SFJ tối ưu cho thời gian chờ đợi trung bình tiến trình nhỏ 1.2 Giải thích thuật tốn ví dụ 1.2.1 Giải thích thuật tốn - B1: Hệ điều hành chọn tiến trình đến - B2: Sau CPU xử lý xong tiến trình đầu tiên, lúc lựa chọn xem tiến trình đến chọn tiến trình có burst time nhỏ CPU xử lý - B3: Tiếp tục lặp lại q trình chọn tiến trình có burst time nhỏ cho CPU xử lý 1.2.2 Ví dụ - Chúng ta có tốn này: Process Arrival Time Bust time P1 P2 P3 P4 Biểu đồ Grantt lịch biểu sau: P1 P4 P3 P2 12 - Thời gian chờ đợi tiến trình: P1 = 0, P2 = 11, P3 = 6, P4 = - Thời gian chờ đợi trung bình: (0 +11 + +3) / = 20 CHƯƠNG 2: MƠ TẢ THUẬT TỐN SJF(SHORTER JOB FIRT) BẰNG C Chương trình bày chi tiết tồn mơ tả thuật tốn C 2.1 Mơ tả thuật tốn SJF C 2.1.1 Giải thích code: - Đầu tiên chúng em khai báo sử dụng thư viện tạo struct để định nghĩa liệu quan trọng cho Process: Procces ID, Burst Time, Arrival Time Hình 2.1 Sử dụng thư viện tạo struct Process - Hàm ghiFile có tác dụng tạo Ffle, lưu file ghi thông số nhập từ bàn phím cho liệu Process Khi nhập biến count(tức nhập số tiến trình) hàm tạo ghi vòng lặp for để lưu liệu cho Process mảng Hình 2.2 Hàm ghiFile - Hàm nhapProc để nhập tất liệu Process từ bàn phím tên tiến trình, burt time, arrival time Với biến count từ bàn phím hàm main, tạo biến mảng cho liệu Process Hình 2.3 Hàm nhapProc - Hàm sortByArt hàm dùng để xếp Arrival Time nhập từ bàn phím theo dạng từ bé đến lớn Hàm để tìm xem đâu tiến trình đến trước Hình 2.4 Hàm sortByArt - Hàm sortByBt để xếp từ bé đến lớn tiến trình xuất VD: P1 chạy xong tiến trình P3 P4 đến P2 chưa đến Lúc hàm tìm xem Bt P3 hay P4 bé hơn(P2 chưa đến nên không tính) để xử lý Với d vị trí i + túc tt liền sau tt hoạt động c vị trí tính trình đủ điều kiện thoải mãn (điều kiện bé thời gian sau tt hoàn thành (tức biến time hàm run)) Hình 2.5 Hàm sortByBt - Hàm run dùng để làm nhiệm vụ sau: thứ tính khoảng thời gian để tiến trình chạy, thứ hai lọc tiến trình trước chạy xong có tiến trình đến, thứ ba truyền liệu biến tìm nhiệm vụ hai hàm sortByBt - Ở nhiệm vụ sau biết chọn tiến trình lúc biến time tìm xem tiến trình chạy xong thời gian nào(VD: P1 xử lý xong giây 60, P2 xử lý xong giây 70, ) time = proc.bt + time;// tính thời gian sau xử lý tiến trình - Ở nhiệm vụ thứ hai, hàm run lấy mảng xếp từ sortByArt so sánh với biến time vừa tính sau lần xử lý tiến trình(VD: P1 chạy thứ 60 P2 với P3 đến chưa) int index;//bien index de tinh so tien trinh can phai xet for(int i = k + 1; i < count; i++){ if(mangProc[i].art < time){// loc cac tien trinh nao can phai xet index = i; }else{ break; } } - Ở nhiệm vụ thứ ba có liệu từ nhiệm vui thứ hai lúc hàm run truyền lại cho hàm sortByBt sortByBt(mangProc, k+1, index);// lấy giá trị tính hàm run để tính tiếp hàm sortByBt Hình 2.6 Hàm run - Hàm runProgram chạy xong tính thời gian chờ tiến trình lúc tính thời gian chờ trung bình tiến trình Hình 2.7 Hàm runProgram - Hàm main dùng chạy chương trình Nhập giá trị cho biến count sau truyền cho liệu cho process, nhapProc, ghiFile, sortByArt đợi hàm runProgram tính tốn xong in kết Hình 2.8 Hàm main 2.1.2 Kết KẾT LUẬN - Sau toàn mã nguồn chương trình code C #include #include #include //tao struct struct Process { int pid; // Process ID int bt; // Burst Time, thoi gian hoan cua cac tien trinh int art; // Arrival Time, thoi gian vao cua cac tien trinh }; typedef struct Process process; // tao file void ghiFile(process a[], int count) { FILE * fp; fp = fopen ("D://Input.txt","w"); fprintf(fp,"so tien trinh: %d\n", count); fprintf(fp,"process %3 Burst Time %3 Arrival Time\n"); for(int i = 0;i < count ;i++){ fprintf(fp, "%5d%10d%10d\n", a[i].pid, a[i].bt, a[i].art); } fclose (fp); } //hàm nhap void nhapProc(process proc[], int count){ int name = 0; for(int i = 0; i < count; i++){ printf("Nhap ten tien trinh %d :", ++name); scanf("%d", &proc[i].pid); printf("\nNhap burt time :"); scanf("%d", &proc[i].bt); printf("\nNhap Arrival Time :"); scanf("%d", &proc[i].art); } } //hàm sap xep mang theo gia tri art void sortByArt(process mangProc[], int count){ process tmp; for(int i = 0; i < count-1; i++){ for(int j = i+1; j < count; j++) { if(mangProc[i].art > mangProc[j].art){ tmp = mangProc[i]; mangProc[i] = mangProc[j]; mangProc[j] = tmp; } } } } //hàm sap xep mang theo gia tri bt khoang [d,c] //vi dung de loc cac tien trinh nao se duoc xet de chay tiep void sortByBt(process mangProc[], int d, int c){ process tmp; for(int i = d; i < c; i++){ for(int j = i+1; j mangProc[j].bt){ tmp = mangProc[i]; mangProc[i] = mangProc[j]; mangProc[j] = tmp; } } } } //ham run de chay tien trinh int run(process proc, int k, int count,process mangProc[], int time){ time = proc.bt + time;// bien time de tinh thoi gian sau chay xong tien trinh // printf("tien trinh %d ", proc.pid); int index;//bien index de tinh so tien trinh can phai xet for(int i = k + 1; i < count; i++){ if(mangProc[i].art < time){// loc cac tien trinh nao can phai xet index = i; }else{ break; } } sortByBt(mangProc, k+1, index);// sap xep cac tien trinh can phai xet theo gia tri bt return time; } //muc dich: tinh thoi gian cho cua tung tien trinh int runProgram(process mangProc[],int count){ int sumWaiteTime = 0; int time = 0; for(int i = ; i < count ; i++){ time = run(mangProc[i], i, count, mangProc, time); //thoi gian sau chay tien trinh thu i printf("tien trinh %d ", mangProc[i].pid); if(i == 0){ printf(" \n"); }else{ int waitTime = time - mangProc[i].art - mangProc[i].bt; //tinh thoi gian thoi gian cho cua tung tien trinh printf(" %d \n", waitTime); sumWaiteTime += waitTime;//tong thoi gian cho } } return sumWaiteTime; } int main(){ int count; printf("Nhap so tien trinh:"); scanf("%d", &count); process mangProc[count], queue[count]; nhapProc(mangProc, count);// input ghiFile(mangProc,count);//ghi vao file sortByArt(mangProc, count);// sap xep process theo thoi gian vao printf("Ket qua: \n"); int sumWaiteTime = runProgram(mangProc, count);//tinh thoi gian trung binh cua tung tien trinh printf("\n => thoi gian cho trung binh cua cac tien trinh: %0.2f", (float)sumWaiteTime/count); return 0; } A Những kết đạt tập môn học - Hiểu biết kiến thức môn nguyên lý hệ điều hành, hoạt động HĐH CPU mà phải lập lịch cho tiến trình - Tăng khả làm việc nhóm - Học thêm góc nhìn khác qua việc lập trình - Xây dựng chương trình để giải tốn B Hướng phát triển đề xuất Bài tập mang tính thực tế cao phải giải nhu cầu hiểu rõ vấn đề HĐH CPU Nhóm em có nhiều ví dụ sinh động, dễ hiểu, kiến thức sát so với thực tế Nhóm chúng em xin chân thành cảm ơn thầy bạn! TÀI LIỆU THAM KHẢO [1] TSNguyễn Đào Trường, Tài liệu giảng dạy môn nguyên lý hệ điều hành • NHỮNG TỪ NGỮ VIẾT TẮT CPU: Central Processing Unit HĐH: Hệ điều hành • tt : tiến trình • ... nhóm chúng em h? ?c hỏi, tìm tịi để viết báo c? ?o thuật toán SJF (Shortest Job First) - thuật toán tối ưu hiệu dành cho CPU, mơ tả thuật tốn C Chúng em làm báo c? ?o gặp khơng khó khăn th? ?c m? ?c, nhờ... tiếng, c? ? bạn 15 phút C? ?n Burst Time giống thời gian lên lớp h? ?c trường C? ? người h? ?c ca, c? ? người h? ?c ca - Vì thời gian để xử lý tiến trình kh? ?c nhau, nên vi? ?c lập lịch cho CPU c? ? nhiều thuật tốn viết. .. trình: P1 = 0, P2 = 11, P3 = 6, P4 = - Thời gian chờ đợi trung bình: (0 +11 + +3) / = 20 CHƯƠNG 2: MÔ TẢ THUẬT TỐN SJF( SHORTER JOB FIRT) BẰNG C Chương trình bày chi tiết tồn mơ tả thuật tốn C