(TIỂU LUẬN) 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)
Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
230,6 KB
Nội dung
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 LỜI NÓI ĐẦU Chương KHÁI QUÁT VỀ THUẬT TOÁN SJF(SHORTER JOB FIRT) 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 1.1.2 Khái niệm thuật tốn 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ụ Chương MƠ TẢ THUẬT TỐN SJF(SHORTER JOB FIRT) BẰNG C 2.1 Mơ tả thuật tốn SJF C 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 TỪ NGỮ VIẾT TẮT 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 toán để tránh việc lãng phí tài nguyên 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 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ờ 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 QUÁT VỀ THUẬT TOÁN SFJ(SHORTER JOB FIRT) Chương trình bày trình bày khái quát thuật toá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à xuân, Đ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: Biểu đồ Grantt lịch biểu sau: P1 - 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) / = 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 ... 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. .. 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. .. gian chờ đợi trung bình: (0 +11 + +3) / = 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: