1. Trang chủ
  2. » Tất cả

Bài tập lớn kết thúc học phần hệ điều hành đề số 07 chủ đề cpu scheduling

11 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Bài tập lớn kết thúc học phần hệ điều hành đề số 07 chủ đề CPU Scheduling
Người hướng dẫn Nguyễn Văn Thủy, PTS
Trường học Trường Đại Học Phenikaa
Chuyên ngành Hệ điều hành
Thể loại Bài tập lớn
Thành phố Hà Nội
Định dạng
Số trang 11
Dung lượng 799,9 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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[.]

Trang 1

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

Lớp : Hệ điều hành_1.1(14FS).2_LT

Trang 2

Mở đầu

Scheduling: Introduction

Trong một hệ thống đa chương trình, thường có nhiều tiến trình cạnh tranh CPU cùng một lúc Khi hai hoặc nhiều quy trình đồng thời ở trạng thái sẵn sàng, phải thực hiện lựa chọn quy trình nào sẽ chạy tiếp theo Phần này của HĐH được gọi là Bộ lập lịch

và thuật toán được gọi là thuật toán lập lịch Quá trình thực thi bao gồm các chu kỳ thực thi CPU và chờ I / O Các quá trình luân phiên giữa hai trạng thái này Quá trình thực thi bắt đầu với một cụm CPU, sau đó là một cụm I / O khác, tiếp theo là một cụm

I / O khác, v.v Cuối cùng, vụ nổ CPU cuối cùng kết thúc với yêu cầu hệ thống chấm dứt thực thi

1 Đặt vấn đề

Tại sao chúng ta cần lập lịch trình?

Một quy trình điển hình bao gồm cả thời gian I / O và thời gian CPU Trong một hệ thống lập trình đơn như MS-DOS, thời gian chờ đợi I / O bị lãng phí và CPU rảnh rỗi trong thời gian này Trong nhiều hệ thống lập trình, một tiến trình có thể sử dụng CPU trong khi tiến trình khác đang đợi I / O Điều này chỉ có thể thực hiện được khi lập lịch trình

Vấn đề chúng ta gặp phải là gì?

Phân bổ CPU chưa hợp lý

Số lượng quy trình hoàn thành việc thực thi trên một đơn vị thời gian đang còn dài Thời gian một quy trình chờ trong hàng đợi có thể lâu có thể nhanh

HDH có thể sử dụng cơ chế ngắt để thu hồi CPU của một tiến trình đang trong trạng thái chạy

Mục tiêu của thuật toán lập lịch trình quy trình

Sử dụng CPU tối đa [Giữ CPU càng bận càng tốt]

Phân bổ CPU hợp lý

Thông lượng tối đa [Số lượng quy trình hoàn thành việc thực thi trên một đơn vị thời gian]

Thời gian quay vòng tối thiểu [Thời gian một quy trình thực hiện để kết thúc thực thi] Thời gian chờ tối thiểu [Thời gian một quy trình chờ trong hàng đợi sẵn sàng] Thời gian phản hồi tối thiểu [Thời gian khi một quy trình tạo ra phản hồi đầu tiên ] Thời gian đáp ứng

Tính dự đoán được [ 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 của hệ thống ]

Tính công bằng [Các tiến trình cùng độ ưu tiên phải được đối xử như nhau ]

Trang 3

2 Cách giải quyết, kết quả chương trình của các giải pháp

Các giải pháp và cách giải quyết được trình bày như sau:

Lập lịch trình thuật toá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 căn cứ vào thời điểm hình thành tiến trình Hàng đợi các tiến trình được tổ chức theo kiểu FIFO Mọi tiến trình đều được phục vụ theo trình tự xuất hiện cho đến khi kết thúc hoặc bị ngắt

Ưu điểm của thuật toán này là giờ CPU không bị phân phối lại (không bị ngắt) và chi phí thực hiện thấp nhất (vì không phải thay đổi thứ tự ưu tiên phục vụ, thứ tự ưu tiên là thứ tự của tiến trình trong hàng đợi) Nhược điểm của thuật toán là thời gian trung bình chờ phục vụ của các tiến trình là như nhau (không kể tiến trình ngắn hay dài), do đó dẫn tới ba điểm sau(thời gian chờ trung bình sẽ tăng vô hạn khi hệ thống tiếp cận tới hạn khả năng phục vụ của mình, nếu độ phát tán thời gian thực hiện tiến trình tăng thì thời gian chờ đợi trung bình cũng tăng theo, khi có tiến trình dài, ít bị ngắt thì các tiến trình khác phải chờ đợi lâu hơn )

⸎Tiến trình yêu cầu CPU trước sẽ được cấp trước

⸎HDH xếp các tiến trình sẵn sàng vào hàng đợi FIFO

⸎Tiến trình mới được xếp vào cuối hàng đợi

⸎Đơn giản, đảm bảo tính công bằng

⸎Thời gian chờ đợi trung bình lớn

⸎=> Ảnh hưởng lớn tới hiệu suất chung của toàn hệ thống

⸎Thường là thuật toán điều độ không phân phối lại

Ví dụ minh họa :

Thứ tự cấp phát tiến trình:

Thời gian chờ đợi trung bình (22 + 26 ) / 3 = 16.:

Trang 4

Lập lịch trình ngắn nhất cho công việc đầu tiên (SJF) : Quy trình có thời gian bùng nổ ngắn nhất được lên lịch trước Nếu hai quy trình có cùng thời gian ngắt thì FCFS được sử dụng để phá

vỡ ràng buộc Nó là một thuật toán lập lịch không ưu tiên

Ví dụ minh họa :

Thứ tự cấp phát tiến trình:

Thời điểm 0 2 5 9 29 Thời gian chờ đợi trung bình: (7 + 3 + 0 ) / 3 = 3.33

Nhận xét:

Trang 5

– Không khả thi ?

– Ước lượng – sử dụng thời gian sử dụng CPU ngay trước, dùng qui luật trung bình giảm theo hàm mũ

Thời còn lại ngắn nhất (SRTF) : việc thực hiện bất kỳ quá trình nào có thể bị dừng sau một khoảng thời gian nhất định Khi xuất hiện mọi quy trình, bộ lập lịch ngắn hạn lập lịch các quy trình đó

từ danh sách các quy trình có sẵn & các quy trình đang chạy có thời gian liên tục còn lại ít nhất Sau khi tất cả các quy trình có sẵn trong hàng đợi sẵn sàng, thì Không có quyền ưu tiên nào sẽ được thực hiện

và sau đó thuật toán sẽ hoạt động giống như lập lịch SJF Trong Khối điều khiển quy trình, ngữ cảnh của quy trình được lưu, khi quy trình bị xóa khỏi quá trình thực thi và khi quy trình tiếp theo được lên lịch

Ví dụ minh họa :

Thứ tự cấp phát tiến trình:

Thời điểm 0 1 2 5 8 29 Thời gian chờ đợi trung bình là: (7 + 0 + 3) = 3.33

Nhận xét:

SRTF là nó làm cho việc xử lý công việc nhanh hơn so với thuật toán SJF, đã đề cập rằng nó không được tính phí trên không

Trang 6

Lên lịch Round Robin (RR) : Mỗi quy trình được ấn định một thời gian cố định (Lượng tử thời gian / Lát thời gian) theo cách tuần hoàn, nó được thiết kế đặc biệt cho hệ thống chia sẻ thời gian Hàng đợi sẵn sàng được coi như một hàng đợi tròn Bộ lập lịch CPU đi xung quanh hàng đợi sẵn sàng, phân

bổ CPU cho mỗi quá trình trong một khoảng thời gian lên đến lượng tử 1 lần Để triển khai lập lịch Round Robin, chúng tôi giữ hàng đợi sẵn sàng như một hàng đợi FIFO của các quy trình Các quy trình mới được thêm vào đuôi của hàng đợi sẵn sàng Bộ lập lịch CPU chọn quy trình đầu tiên từ hàng đợi sẵn sàng, đặt bộ đếm thời gian để ngắt sau lượng tử 1 lần và gửi quy trình Một trong hai điều sau đó sẽ xảy ra Quá trình có thể có một đợt CPU ít hơn 1 lần lượng tử Trong trường hợp này, chính quá trình sẽ giải phóng CPU một cách tự nguyện Bộ lập lịch sau đó sẽ tiến hành quá trình tiếp theo trong hàng đợi sẵn sàng Nếu không thì, nếu đợt bùng nổ CPU của quá trình hiện đang chạy dài hơn lượng tử 1 lần, bộ đếm thời gian sẽ tắt và gây ra gián đoạn cho hệ điều hành Một chuyển đổi ngữ cảnh sẽ được thực thi và quá trình này sẽ được đặt ở phần cuối của hàng đợi sẵn sàng Sau đó, bộ lập lịch CPU sẽ chọn quá trình tiếp theo trong hàng đợi sẵn sàng

⸎Sửa đổi FCFS dùng cho các hệ chia sẻ thời gian

⸎Có thêm cơ chế phân phối lại bằng cách sử dụng ngắt của đồng hồ

⸎Hệ thống xác định những khoảng thời gian nhỏ gọi là lượng tử/ lát cắt thời gian t

⸎Khi CPU được giải phóng, HDH đặt thời gian của đồng hồ bằng độ dài lượng tử, lấy tiến trình ở đầu hàng đợi và cấp CPU cho nó

⸎Tiến trình kết thúc trước khi 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:

Trang 7

Tiến trình thời điểm vào thời gian xử lý

Thời gian lượng tử = 4

Thì thứ tự cấp processor cho các tiến trình lần lượt là:

Vậy thời gian chờ đợi trung bình sẽ là: (7+4+8)/3 = 6.33.

Như vậy RR có thời gian chờ đợi trung bình nhỏ hơn so với FIFO

3 Phần mở rộng:

Lập lịch tỷ lệ phản hồi cao nhất (HRRN) : là một thuật toán lập lịch không ưu tiên

trong hệ điều hành Nó là một trong những thuật toán tối ưu được sử dụng để lập lịch trình Vì HRRN là một thuật toán lập lịch không ưu tiên nên trong trường hợp nếu có bất kỳ quá trình nào hiện đang được thực thi với CPU và trong quá trình thực thi của nó, nếu bất kỳ quá trình mới nào đến trong bộ nhớ với thời gian bùng nổ nhỏ hơn quá trình hiện đang chạy thì thời gian quá trình hiện đang chạy sẽ không được đưa vào hàng đợi sẵn sàng & hoàn tất quá trình thực thi của nó mà không bị gián đoạn HRRN về cơ bản là sự sửa đổi của Shortest Job Next (SJN) nhằm giảm thiểu tình trạng chết đói Trong thuật toán lập lịch HRRN, CPU được chỉ định cho quá trình tiếp theo có tỷ lệ phản hồi cao nhất chứ không phải cho quá trình có thời gian bùng nổ ít hơn

Trang 8

Ưu điểm của Lập lịch HRNN:

⸎Thuật toán Lập lịch HRRN mang lại hiệu suất tốt hơn so với Lập lịch đầu tiên cho công việc ngắn nhất

⸎Với thuật toán này, giảm thời gian chờ đợi cho các công việc dài hơn và nó cũng khuyến khích các công việc ngắn hơn

⸎Với thuật toán này, thông lượng tăng lên

Nhược điểm của Lập kế hoạch HRNN:

⸎ Các nhược điểm của thuật toán lập lịch HRNN như sau:

⸎ Việc lập lịch HRRN trên thực tế là không thể thực hiện được vì chúng ta không thể biết trước thời gian bùng nổ của mọi quy trình

⸎ Trong việc lập lịch trình này, có thể xảy ra chi phí trên bộ xử lý

Ví dụ minh họa:

Tiến

trình

Thời

gian

đến

Thời

gian

bùng

nổ

Thời gian hoàn thành

Thời gian quay vòng Thời gian quay vòng = Thời gian hoàn thành - Thời gian đến

Thời gian chờ 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 nào trong hàng đợi sẵn sàng, vì vậy từ 0 đến 1 CPU không hoạt động Do đó 0 đến 1 được coi là thời gian nhàn rỗi của CPU

Trang 9

Tại thời điểm = 1, chỉ quá trình P1 có sẵn trong hàng đợi sẵn sàng Vì vậy, quá trình P1 thực thi cho đến khi hoàn thành

Sau quá trình P1, tại thời điểm = 4 chỉ có quá trình P2 đến, vì vậy quá trình P2 được thực thi

vì hệ điều hành không có bất kỳ tùy chọn nào khác

Tại thời điểm = 10, các quá trình P3, P4 và P5 đã ở trong hàng đợi sẵn sàng Vì vậy, để lập lịch trình tiếp theo sau P2, chúng ta cần tính toán tỷ lệ phản hồi

Trong bước này, chúng tôi sẽ tính toán tỷ lệ phản hồi cho P3, P4 và P5

Code minh họa:

#include <stdio.h>

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;

Trang 10

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 <= t && p[i].complete != 1) { temp = (p[i].bt + (t - p[i].at)) / p[i].bt;

if (hrr < temp) { hrr = temp;

loc = i;

} }

}

t += p[loc].bt;

p[loc].wt = t - p[loc].at - p[loc].bt;

p[loc].tt = t - p[loc].at;

avgtt += p[loc].tt;

Trang 11

p[loc].ntt = ((float)p[loc].tt / p[loc].bt);

p[loc].complete = 1;

avgwt += p[loc].wt;

printf("\n%c\t\t%d\t\t", p[loc].name, p[loc].at); printf("%d\t\t%d\t\t", p[loc].bt, p[loc].wt); printf("%d\t\t%f", p[loc].tt, p[loc].ntt);

}

printf("\nThe Average waiting time:%f\n", avgwt / m); printf("The Average Turn Around time:%f\n", avgtt / m); }

Kết quả:

Ngày đăng: 25/03/2023, 16:51

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w