TRƯỜNG ĐẠI HỌC PHENIKAA KHOA CNTT ⸎⸎⸎⸎⸎ BÀI TẬP LỚN KẾT THÚC HỌC PHẦN HỆ ĐIỀU HÀNH Đề số 07 Chủ Đề CPU Scheduling Giảng viên NGUYỄN VĂN THỦY Sinh viên VŨ VĂN MINH Lớp Hệ điều hành 1 1(14FS) 2 LT Mã SV[.]
TRƯỜNG ĐẠI HỌC PHENIKAA -KHOA CNTT ⸎⸎⸎⸎⸎ BÀI TẬP LỚN KẾT THÚC HỌC PHẦN HỆ ĐIỀU HÀNH Đề số : 07 Chủ Đề: CPU Scheduling Giảng viên : NGUYỄN VĂN THỦY Sinh viên : VŨ VĂN MINH Lớp : Hệ điều hành_1.1(14FS).2_LT Mã SV : 20010785 Mở đầu Scheduling: Introduction Trong hệ thống đa chương trình, thường có nhiều tiến trình cạnh tranh CPU lúc Khi hai nhiều quy trình đồng thời trạng thái sẵn sàng, phải thực lựa chọn quy trình chạy Phần HĐH gọi Bộ lập lịch thuật toán gọi thuật tốn lập lịch Q trình thực thi bao gồm chu thi CPU chờ I / O Các trình luân phiên hai trạng thái Quá trình thực thi bắt đầu với cụm CPU, sau cụm I / O khác, cụm I / O khác, v.v Cuối cùng, vụ nổ CPU cuối kết thúc với yêu cầu hệ thống chấm dứt thực thi Đặt vấn đề Tại cần lập lịch trình? Một quy trình điển hình bao gồm thời gian I / O thời gian CPU Trong hệ thống lập trình đơn MS-DOS, thời gian chờ đợi I / O bị lãng phí CPU rảnh rỗi thời gian Trong nhiều hệ thống lập trình, tiến trình sử dụng CPU tiến trình khác đợi I / O Điều thực lập lịch trình Vấn đề gặp phải gì? Phân bổ CPU chưa hợp lý Số lượng quy trình hồn thành việc thực thi đơn vị thời gian cịn dài Thời gian quy trình chờ hàng đợi lâu nhanh HDH sử dụng chế ngắt để thu hồi CPU tiến trình trạng thái chạy Mục tiêu thuật tốn lập lịch trình quy trình Sử dụng CPU tối đa [Giữ CPU bận tốt] Phân bổ CPU hợp lý Thông lượng tối đa [Số lượng quy trình hồn thành việc thực thi đơn vị thời gian] Thời gian quay vòng tối thiểu [Thời gian quy trình thực để kết thúc thực thi] Thời gian chờ tối thiểu [Thời gian quy trình chờ hàng đợi sẵn sàng] Thời gian phản hồi tối thiểu [Thời gian quy trình tạo phản hồi ] Thời gian đáp ứng Tính dự đốn [ Vịng đời, thời gian chờ đợi, thời gian đáp ứng phải ổn định, không phụ thuộc vào tải hệ thống ] Tính cơng [Các tiến trình độ ưu tiên phải đối xử ] Cách giải quyết, kết chương trình giải pháp Các giải pháp cách giải trình bày sau: Lập lịch trình thuật tốn: Lên lịch phục vụ trước tiên đến trước (FIFO or FCFS): Trong thuật toán này, độ ưu tiên phục vụ tiến trình vào thời điểm hình thành tiến trình Hàng đợi tiến trình tổ chức theo kiểu FIFO Mọi tiến trình phục vụ theo trình tự xuất kết thúc bị ngắt Ưu điểm thuật toán CPU không bị phân phối lại (không bị ngắt) chi phí thực thấp (vì thay đổi thứ tự ưu tiên phục vụ, thứ tự ưu tiên thứ tự tiến trình hàng đợi) Nhược điểm thuật toán thời gian trung bình chờ phục vụ tiến trình (khơng kể tiến trình ngắn hay dài), dẫn tới ba điểm sau(thời gian chờ trung bình tăng vơ hạn hệ thống tiếp cận tới hạn khả phục vụ mình, độ phát tán thời gian thực tiến trình tăng thời gian chờ đợi trung bình tăng theo, có tiến trình dài, bị ngắt tiến trình khác phải chờ đợi lâu ) ⸎Tiến trình yêu cầu CPU trước cấp trước ⸎HDH xếp tiến trình sẵn sàng vào hàng đợi FIFO ⸎Tiến trình xếp vào cuối hàng đợi ⸎Đơn giản, đảm bảo tính cơng ⸎Thời gian chờ đợi trung bình lớn ⸎=> Ảnh hưởng lớn tới hiệu suất chung tồn hệ thống ⸎Thường thuật tốn điều độ khơng phân phối lại Ví dụ minh họa : Tiến trình Thời điểm vào Thời gian xử lí P1 22 P2 P3 Thứ tự cấp phát tiến trình: Tiến trình Thời điểm P1 Thời gian chờ đợi trung bình: (22 + 26 ) / = 16 P2 22 P3 26 29 Lập lịch trình ngắn cho cơng việc (SJF) : Quy trình có thời gian bùng nổ ngắn lên lịch trước Nếu hai quy trình có thời gian ngắt FCFS sử dụng để phá vỡ ràng buộc Nó thuật tốn lập lịch khơng ưu tiên Ví dụ minh họa : Tiến trình Thời điểm vào Thời gian xử lí P1 22 P2 P3 Thứ tự cấp phát tiến trình: Tiến trình Thời điểm P1 P3 P2 Thời gian chờ đợi trung bình: (7 + + ) / = 3.33 Nhận xét: – Tối ưu thời gian chờ P1 29 – Làm biết thời gian lại cần thực thi tiến trình – Khơng khả thi ? – Ước lượng – sử dụng thời gian sử dụng CPU trước, dùng qui luật trung bình giảm theo hàm mũ Thời lại ngắn (SRTF) : việc thực q trình bị dừng sau khoảng thời gian định Khi xuất quy trình, lập lịch ngắn hạn lập lịch quy trình từ danh sách quy trình có sẵn & quy trình chạy có thời gian liên tục cịn lại Sau tất quy trình có sẵn hàng đợi sẵn sàng, Khơng có quyền ưu tiên thực sau thuật tốn hoạt động giống lập lịch SJF Trong Khối điều khiển quy trình, ngữ cảnh quy trình lưu, quy trình bị xóa khỏi q trình thực thi quy trình lên lịch Ví dụ minh họa : Tiến trình Thời điểm vào Thời gian xử lí P1 22 P2 P3 Thứ tự cấp phát tiến trình: Tiến trình Thời điểm P1 P2 P3 P2 P1 Thời gian chờ đợi trung bình là: (7 + + 3) = 3.33 Nhận xét: SRTF làm cho việc xử lý công việc nhanh so với thuật tốn SJF, đề cập khơng tính phí khơng 29 Lên lịch Round Robin (RR) : Mỗi quy trình ấn định thời gian cố định (Lượng tử thời gian / Lát thời gian) theo cách tuần hồn, thiết kế đặc biệt cho hệ thống chia sẻ thời gian Hàng đợi sẵn sàng coi hàng đợi tròn Bộ lập lịch CPU xung quanh hàng đợi sẵn sàng, phân bổ CPU cho trình khoảng thời gian lên đến lượng tử lần Để triển khai lập lịch Round Robin, giữ hàng đợi sẵn sàng hàng đợi FIFO quy trình Các quy trình thêm vào hàng đợi sẵn sàng Bộ lập lịch CPU chọn quy trình từ hàng đợi sẵn sàng, đặt đếm thời gian để ngắt sau lượng tử lần gửi quy trình Một hai điều sau xảy Q trình có đợt CPU lần lượng tử Trong trường hợp này, q trình giải phóng CPU cách tự nguyện Bộ lập lịch sau tiến hành trình hàng đợi sẵn sàng Nếu khơng thì, đợt bùng nổ CPU q trình chạy dài lượng tử lần, đếm thời gian tắt gây gián đoạn cho hệ điều hành Một chuyển đổi ngữ cảnh thực thi trình đặt phần cuối hàng đợi sẵn sàng Sau đó, lập lịch CPU chọn trình hàng đợi sẵn sàng ⸎Sửa đổi FCFS dùng cho hệ chia sẻ thời gian ⸎Có thêm chế phân phối lại cách sử dụng ngắt đồng hồ ⸎Hệ thống xác định khoảng thời gian nhỏ gọi lượng tử/ lát cắt thời gian t ⸎Khi CPU giải phóng, HDH đặt thời gian đồng hồ độ dài lượng tử, lấy tiến trình đầu hàng đợi cấp CPU cho ⸎Tiến trình kết thúc trước hết thời gian t: trả quyền điều khiển cho HDH ⸎Cải thiện thời gian đáp ứng so với FIFO Ví dụ minh họa: Tiến trình thời điểm vào thời gian xử lý P1 22 P2 Tiến trình thời điểm vào P3 thời gian xử lý Thời gian lượng tử = Thì thứ tự cấp processor cho tiến trình là: Tiến trình Thời điểm P1 P2 P3 P1 11 P1 15 P1 19 P1 23 P1 25 Vậy thời gian chờ đợi trung bình là: (7+4+8)/3 = 6.33 Như RR có thời gian chờ đợi trung bình nhỏ so với FIFO Phần mở rộng: Lập lịch tỷ lệ phản hồi cao (HRRN) : thuật tốn lập lịch khơng ưu tiên hệ điều hành Nó thuật toán tối ưu sử dụng để lập lịch trình Vì HRRN thuật tốn lập lịch khơng ưu tiên nên trường hợp có trình thực thi với CPU q trình thực thi nó, trình đến nhớ với thời gian bùng nổ nhỏ trình chạy thời gian trình chạy không đưa vào hàng đợi sẵn sàng & hồn tất q trình thực thi mà khơng bị gián đoạn HRRN sửa đổi Shortest Job Next (SJN) nhằm giảm thiểu tình trạng chết đói Trong thuật tốn lập lịch HRRN, CPU định cho q trình có tỷ lệ phản hồi cao cho trình có thời gian bùng nổ 29 Ưu điểm Lập lịch HRNN: ⸎Thuật toán Lập lịch HRRN mang lại hiệu suất tốt so với Lập lịch cho cơng việc ngắn ⸎Với thuật tốn này, giảm thời gian chờ đợi cho công việc dài khuyến khích cơng việc ngắn ⸎Với thuật tốn này, thơng lượng tăng lên Nhược điểm Lập kế hoạch HRNN: ⸎ Các nhược điểm thuật toán lập lịch HRNN sau: ⸎ Việc lập lịch HRRN thực tế thực khơng thể biết trước thời gian bùng nổ quy trình ⸎ Trong việc lập lịch trình này, xảy chi phí xử lý Ví dụ minh họa: Thời gian quay vịng Thời gian hồn thành Thời gian chờ Tiến trình Thời gian đến Thời gian bùng nổ P1 4-1 = 3-3 = P2 10 10-3 = 7-6 = P3 27 27-5 = 22 22-8 = 14 P4 14 14-7 = 7-4 = P5 19 19-8 = 11 11-5 = Thời gian quay vịng = Thời gian hồn thành - Thời gian đến Thời gian chờ = Thời gian quay vòng - Thời gian liên tục Tại thời điểm = 0, khơng có tiến trình hàng đợi sẵn sàng, từ đến CPU khơng hoạt động Do đến coi thời gian nhàn rỗi CPU Tại thời điểm = 1, q trình P1 có sẵn hàng đợi sẵn sàng Vì vậy, trình P1 thực thi hồn thành Sau q trình P1, thời điểm = có q trình P2 đến, q trình P2 thực thi hệ điều hành khơng có tùy chọn khác Tại thời điểm = 10, trình P3, P4 P5 hàng đợi sẵn sàng Vì vậy, để lập lịch trình sau P2, cần tính tốn tỷ lệ phản hồi Trong bước này, chúng tơi tính tốn tỷ lệ phản hồi cho P3, P4 P5 Code minh họa: #include struct process { char name; int at, bt, ct, wt, tt; int complete; float ntt; } p[10]; int m; void sortByArrival() { struct process temp; int i, j; for (i = 0; i < m - 1; i++) { for (j = i + 1; j < m; j++) { if (p[i].at > p[j].at) { temp = p[i]; p[i] = p[j]; p[j] = temp; } } } } void main() { int i, j, t, sum_bt = 0; char c; float avgwt = 0, avgtt = 0; m = 5; int arriv[] = { 1, 3, 7, 8,5}; int burst[] = { 3, 7, 4, 2, 8}; for (i = 0, c = 'A'; i < m; i++, c++) { p[i].name = c; p[i].at = arriv[i]; p[i].bt = burst[i]; p[i].complete = 0; sum_bt += p[i].bt; } sortByArrival(); printf("\nName\tArrival Time\tBurst Time\tWaiting Time"); printf("\tTurnAround Time\t Normalized TT"); for (t = p[0].at; t < sum_bt;) { float hrr = -9999; float temp; int loc; for (i = 0; i < m; i++) { if (p[i].at