1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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)

18 18 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

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 TỐ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 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 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.1Khá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.2Giải thích thuật tốn ví dụ 1.2.1 Giải thích thuật toá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 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ó toán này: Process P1 P2 P3 P4 Arrival Time Bust time Biểu đồ Grantt lịch biểu sau: P1 P4 P3 P2 68 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Ả THT 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.1Mơ 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 tinclude íĩncLude íĩnclude nstruct Process { int pid; // Process ID ồt H ■ ỉ Suxst TJJD£J ■1ĨIÀ-ĨÌ.C -ÍÃFẶJŨỊ'Ì- 2.nt axtr ■ í.Liivd- TuiiSí ẠííUsi v.vi- v.Avi.í -} ỉ typed struct Process process,- 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 ^void qhirìle(process a[]/ int count} { FILE * fp; - íp = fợpèn ("Đ://ĩnput Ệ^", "w"): fpxintfỉfp,"so lĨỄP trinh: %d\n", count]; fprintf(fp,"process %3 Burst Time %3 Arrival Time\nrr); for(ỉnt ỉ = 0;i < CĐUEit ;!++){ fprintfffpr "*ãa%JUỈíìUflíỉXn", a[i].pid, a[i].bt, a[i].art); } ĩclose (fp); 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 ■■ ■■ UầSB ịiXũẬis voĩd nhapProc(process proc[J, ínt count) int name = ũ; toxíint i = Ũ; ỉ < coimt; Ỉ++) í ptintí í"HỉfâR ten xẲSữ XX.Uh scanf("%d", íiprocLi] pĩd) ĩ printí ("\nyMp tax time scanf("%d**f sproc [ỈJ ,bt); printỉ ("Xnĩíh^p Arrỉval Time scanfí"%d"f sproc[i],art); ++name); } 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 < : ■iiíũri sa.p iisii LMỈĩtí, XdClÊíì K,w.'& JÃỈwL =•■-1 vQid sortByí.rt (process mangproc ' ]J int countỉ { process tmp; ] Ễoríint i = 0; i < count-l; i++H ] for(±nt j = i+1; j < count; j++H ] if (lĩiangProcíi] -art > mangProc[jì -aut){ tmp - mangproc [ ỉ ] ; mangErocíi] = mangProc[j]ĩ mangProc[j] - tmp; ■} -1 ■} ) 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)) ■' sap ìiẢÌr MíủXkít LLón / dung dẽLA&AX Ịvoid sortByBt (process mangproc [ ], int d, int c) { process tmp; fox(int i = d; ĩ < c; i++ì [ ] Ẽíint j = 1+1; j lĩiangproc [ j ] bt) í tmp = mangproc[1]; mangPrữc[iĩ = mangProc[j]; mangproc[j; = tmp,-} [đfc] 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 th ì 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 //ham run da st XẲSM x&il Ẹ]int runíprocess proc, int k, int count,process mangProc[], int time) { time = proc.bt - time,-// _ time ãg _ aag /í XMỈMUỮỈÌ Ị ílỉuăẪÌ ■ £XÉẳ) ' int index;/ index ã® 30 can — for(int i=k+l;i< count; i++){ if (mangProc [i] art < time) {// sas _ _ can _ index = i; }else{ break; - } - } sortByBt(mangProc, k+1, index);// sap _ sac can thẹo giả itó fct return tỉme; L) 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 int runProgram(process manọPiQC(], int count)( int SLMfiWaiteTÌme = ũ; int time = ũ; for(int í = c ; i < count Ỉ++) ( tũne = run (mangProc[i], i, count, manqProc, time}; aL'k/44/ĩi /' x printf("J^a UUnh *d "t mangProc[i; pid}; iíti == 0}t printí Xn") ỉ }tìlsa{ int vairTime = time - manqProc[1]-art - mangProcíi]-bt; : ■-'ívì>Q,h pEĨntíí" %d \n", waitTìme>; sumWaiteTimfi += vaitTime;//tong } } return sumHaiteTime; Hình 2.7 Hàm runProgram tung - 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 ]int main(){ int count; printí("Hbap so t.ien XxiW); scanf("%d", scount); process mangProc[count], queue[count]; nhapProc(mangProc, count);// input ghirile(mangProc,count);//atù yạọ íile sortByArt (mangProc, count);// sap process XbSíi tbiú, oXâa xaa printt("Kat qua: \n“); int sumMaiteTime = runProgramlmangProc, count); /iú ÌkiÀ SÚAU ÉÁCÌ 'ung iíiut printíCXn => tbai SÁÃU sha tÃMUg binh SMâ sac tien txinb: %0-2í" (float) sumWaiteTime/count); return j; Hình 2.8 Hàm main 2.1.2 Kết Nhap ten tien trinh :1 Nhap burt time :7 Nhap Arrỉval Time :0 Nhap ten tien trinh :2 Nhap burt tỉme :4 Nhap Arrỉval Time :2 Nhap ten tien trinh :3 Nhap burt tỉme :1 Nhap Arrival Time :4 Nhap ten tien trinh :4 Nhap burt tỉme :4 Nhap Arrival Time :5 Ket qua: tien trinh tien trinh 3 tỉen trinh tien trinh => thoi gian cho trung binh cua cac tien trinh: 4.00 Process returned (0X0) executỉon time : 32.354 s Press any key to continue 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 ... 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,... 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. .. 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

Ngày đăng: 17/03/2022, 08:47

Xem thêm:

TỪ KHÓA LIÊN QUAN

Mục lục

    HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CỒNG NGHỆTHÔNG TIN

    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)

    CHƯƠNG 1: KHÁI QUÁT VỀ THUẬT TOÁN SFJ(SHORTER JOB FIRT)

    1.1 Khái quát về thuật toán Shorter job first

    CHƯƠNG 2: MÔ TẢ THUÂT TOÁN SJF(SHORTER JOB FIRT)

    TÀI LIỆU THAM KHẢO

    NHỮNG TỪ NGỮ VIẾT TẮT

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w