Báo - Cáo - Lần 4 - Nhóm-15

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 22

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG ĐIỆN – ĐIỆN TỬ

BÁO CÁO BÀI TẬP LỚN


HỆ ĐIỀU HÀNH
Đề tài:

TÌM HIỂU TIẾN TRÌNH

MÔ PHỎNG GIẢI THUẬT LẬP LỊCH CHO CPU

Sinh viên thực hiện MSSV


Lê Đức Chiến 20203334
Phạm Bá Độ 20203362
Nguyễn Sỹ Duy 20203691
Trương Quang Huy 20203459
Giảng viên hướng dẫn: TS. Nguyễn Thanh Bình

Hà Nội, 11/2023

LỜI NÓI ĐẦU

Khi nói về hệ điều hành, mọi người thường nghĩ đến một màn hình máy tính và cách
người dùng tương tác thông qua giao diện đồ họa. Tuy nhiên, hệ điều hành không chỉ có vai
trò quản lý giao diện người dùng, nó còn đảm nhiệm nhiều nhiệm vụ quan trọng khác, bao
gồm quản lý và phân phối tài nguyên trong máy tính, cung cấp giao tiếp giữa phần cứng và
phần mềm.

Trong thời đại hiện nay, khi mọi người sử dụng máy tính, họ thường mở nhiều ứng dụng
cùng lúc để thực hiện nhiều công việc khác nhau. Thông thường, CPU chỉ có thể xử lý một
tiến trình tại một thời điểm. Tuy nhiên, trong môi trường xử lý đa nhiệm, có nhiều tiến trình
sẵn sàng để được thực hiện cùng lúc, và hệ điều hành phải quản lý chúng một cách hiệu quả
để tối ưu hóa việc sử dụng CPU và đảm bảo trải nghiệm người dùng.

Để quản lý việc xử lý nhiều tiến trình một cách hiệu quả và đảm bảo thời gian chờ đợi là
thấp, hệ điều hành phải sử dụng các giải thuật lập lịch phù hợp để chọn tiến trình nào sẽ được
thực hiện tiếp theo. Trong bài tập lớn này, nhóm chúng em đã quyết định nghiên cứu và mô
phỏng đề tài: "Tìm hiểu và mô phỏng các thuật toán lập lịch cho CPU".

Nhóm chúng em xin được gửi lời cảm ơn chân thành đến thầy Nguyễn Thanh Bình, người
luôn nhiệt tình và tận tâm hướng dẫn, góp ý với nhóm trong suốt quá trình học tập, nghiên
cứu.
MỤC LỤC

DANH MỤC KÝ HIỆU VIẾT TẮT....................................................................................1

DANH MỤC HÌNH ẢNH....................................................................................................2

DANH MỤC BẢNG BIỂU...................................................................................................3

CHƯƠNG 1. XÁC ĐỊNH NHÓM VÀ ĐỀ TÀI..................................................................4

1. Nhóm...................................................................................................................................4
1.1 Cơ cấu thành viên............................................................................................4
1.2 Phân công nhiệm vụ.........................................................................................4

2. Xác định đề tài....................................................................................................................5

2.1 Tên đề tài.............................................................................................................................5

2.2 Mục tiêu của đề tài.............................................................................................................5

CHƯƠNG 2. GIỚI THIỆU VỀ LẬP LỊCH CHO CPU....................................................6

2.1 Các khái niệm cơ bản về lập lịch cho CPU..........................................................................6


2.1.1 Tiến trình (Process)..............................................................................................6
2.1.2 Bộ điều phối CPU (CPU scheduler)....................................................................8
2.1.3 Phân loại tiến trình lập lịch cho CPU...................................................................8
2.1.4 Các tiêu chí lập lịch cho CPU............................................................................12

2.2 Các thuật toán lập lịch cho CPU.........................................................................................13


2.2.1 First-Come, First-Served Scheduling (FCFS)....................................................13

CHƯƠNG 3. MÔ PHỎNG CÁC GIẢI THUẬT LẬP LỊCH..........................................15

3.1 Mục tiêu thiết kế..................................................................................................................15

3.2 Lý do lựa chọn các công cụ trên.........................................................................................15

3.3 Ý tưởng và các bước thực hiện............................................................................................15


3.3.1 Mô phỏng thuật toán lập lịch FCFS...................................................................15

Tài liệu tham khảo..............................................................................................................18


DANH MỤC KÝ HIỆU VIẾT TẮT

Viết tắt Định nghĩa/giải thích


CPU Central Processing Unit
FCFS First Come First Serve
FIFO First In First Out

1
DANH MỤC HÌNH ẢNH

Hình 2.1 Các trạng thái của tiến trình................................................................................7

Hình 2.2 Bộ lưu trữ thông tin của tiến trình......................................................................8

Hình 3.1 File dẫn tiến trình và thời gian thực..................................................................16

Hình 3.2 Đọc các tiến trình theo thời gian tới..................................................................16

Hình 3.3 Thông số của tiến trình 1....................................................................................16

Hình 3.4 Thông số của tiến trình 2....................................................................................17

Hình 3.5 Thông số của tiến trình 3....................................................................................17

2
DANH MỤC BẢNG BIỂU

Bảng 1.1 Bảng phân công nhiệm vụ....................................................................................5

Bảng 2.1 Bảng so sánh 2 loại thuật toán lập lịch..............................................................11

Bảng 2.2 Ví dụ lập lịch thuật toán FCFS..........................................................................14

3
CHƯƠNG 1. XÁC ĐỊNH NHÓM VÀ ĐỀ TÀI

1. Nhóm
1.1 Cơ cấu thành viên

 Nhóm gồm 4 thành viên:


o Phạm Bá Độ – 20203362 – Nhóm trưởng
o Lê Đức Chiến – 20203334 – Thành viên
o Nguyễn Sỹ Duy – 20203691 – Thành viên
o Trương Quang Huy – 20203459 – Thành viên
1.2 Phân công nhiệm vụ

Người thực
STT Tên công việc Thời gian thực hiện
hiện
Tìm hiểu các đề tài khả thi và xác
1 Cả nhóm 28/09 – 12/10
định đề tài
2 Viết báo cáo lần I Cả nhóm 09/10
Làm khung nội dung cần tìm hiểu
và chia công việc cho thành viên

3  Tìm hiểu các thuật toán lập Cả nhóm 12/10 – 18/10


lịch CPU đơn giản
 Các tiêu chí để chọn thuật toán
lập lịch cho CPU
Xác định các thuật toán lập lịch,
4 trình bày lý thuyết cho các thuật toán Cả nhóm 12/10 – 17/10
lập lịch CPU
5 Viết báo cáo lần II Duy 18/10
Tìm hiểu những ứng dụng thực tế
6 Cả nhóm 19/10 – 24/10
của việc mô phỏng lập lịch CPU
Tìm hiểu những phương pháp đánh
7 Cả nhóm 19/10 – 24/10
giá kết quả mô phỏng lập lịch CPU
Tìm hiểu cách lập trình mô phỏng
8 Cả nhóm 19/10 – 2/11
các thuật toán lập lịch CPU

4
9 Viết báo cáo lần III Duy 25/10
Tìm hiểu, trình bày, vẽ lưu đồ thuật
10 Cả nhóm 2/11 – 8/11
toán cho các thuật toán lập lịch
11 Viết báo cáo lần IV Duy 8/11
Tìm hiểu, trình bày code triển khai
12 Cả nhóm 9/11 – 21/11
thuật toán lập lịch và hiển thị
13 Viết báo cáo giữa kì Cả nhóm 22/11
Bảng 1.1 Bảng phân công nhiệm vụ

2. Xác định đề tài


2.1 Tên đề tài
 Tên đề tài: Tìm hiểu tiến trình mô phỏng lập lịch cho CPU
2.2 Mục tiêu của đề tài
 Nắm được cơ bản về lý do phải lập lịch cho CPU
 Hiểu được các tiêu chí lập lịch để lựa chọn thuật toán lập lịch cho CPU
 Mô tả và giải thích được một số thuật toán lập lịch
 Rút ra được ưu điểm, nhược điểm của từng thuật toán
 Kiểm nghiệm lại và mô phỏng thuật toán lập lịch First Come First Serve và
đưa ra nhận xét dựa trên các tiêu chí (sử dụng ngôn ngữ lập trình Bash)

5
CHƯƠNG 2. GIỚI THIỆU VỀ LẬP LỊCH CHO CPU

Lập lịch cho CPU, hay CPU Scheduling, là quá trình mà CPU sắp xếp, lựa chọn và
thực thi các tiến trình một cách tuần tự để tối ưu hóa hiệu suất của máy tính. Điều này
là một yêu cầu cơ bản và quan trọng khi chúng ta muốn thực hiện nhiều tiến trình
trong một khoảng thời gian cố định. Vấn đề quan trọng là làm thế nào CPU sẽ sắp xếp
các tiến trình để đảm bảo cung cấp đủ tài nguyên cho chúng và cung cấp trải nghiệm
tốt nhất cho người dùng. Trong chương 2, chúng em sẽ giới thiệu các khái niệm liên
quan đến lập lịch cho CPU, các thuật toán lập lịch, và tiêu chí để chọn thuật toán phù
hợp cho các hệ điều hành cụ thể, để giải quyết vấn đề này.

2.1 Các khái niệm cơ bản về lập lịch cho CPU


Bắt đầu với một hệ thống chỉ có một lõi CPU (single CPU core), nghĩa là chỉ có thể
thực hiện một tiến trình tại một thời điểm, các tiến trình khác phải đợi cho đến khi tiến
trình hiện tại hoàn thành trước khi được thực hiện. Điều này đồng nghĩa rằng trong
thời gian chờ đợi, CPU sẽ bỏ lỡ cơ hội làm việc và sẽ bất sản xuất. Để giải quyết vấn
đề này, CPU đa lõi (multicores) đã ra đời, cho phép máy tính thực hiện nhiều tiến trình
cùng lúc, đáp ứng tốt hơn nhu cầu của người dùng hiện nay.

2.1.1 Tiến trình (Process)

2.1.1.1 Khái niệm của tiến trình

Tiến trình là một chương trình đang trong quá trình thực thi.

2.1.1.2 Yêu cầu của tiến trình

Một tiến trình có thể cần sử dụng nhiều tài nguyên khác nhau, bao gồm CPU, bộ
nhớ, và thiết bị vào ra. Để quản lý và phân bố các tài nguyên này, hệ điều hành sử dụng
bộ điều phối CPU (CPU scheduler) để quyết định trạng thái của tiến trình và xác định
thứ tự thực hiện của chúng. Trong một hệ thống máy tính, có các tiến trình thuộc về hệ
điều hành và các tiến trình của người dùng.

Mục đích của tiến trình:

 Tăng hiệu suất sử dụng CPU (tăng mức độ đa chương).
6
 Tăng tốc độ xử lý và khả năng đa nhiệm.

2.1.1.3 Trạng thái của tiến trình

Trạng thái của tiến trình được chia làm 5 loại và được bộ điều phối CPU (CPU
scheduler) quyết định luân chuyển:

 New: tiến trình mới được tạo đang ở trong bộ nhớ tạm.
 Ready: tiến trình trong bộ nhớ và chờ được cấp phát CPU.
 Running: tiến trình đang thực thi
 Waiting: tiến trình chờ được cấp phát tài nguyên, hoặc chờ thao tác nhập/xuất
hoàn tất hoặc chờ một sự kiện nào đó.
 Terminated: tiến trình được hoàn tất xử lý.

Hình 2.1 Các trạng thái của tiến trình

2.1.1.4 Bộ lưu trữ thông tin tiến trình (Process Control Block)

Bộ lưu trữ thông tin tiến trình lưu trữ các thông tin cụ thể về tiến trình, được thể
hiện lần lượt theo danh sách và bảng ở dưới:

 Trạng thái của tiến trình (Process state): được giải thích ở mục 2.1.1.3
 Định danh tiến trình, cả tiến trình cha (Process ID)
 CPU registers and Program Counter: Dữ liệu được lưu, khôi phục khi
hoán đổi các tiến trình vào ra với CPU
 CPU-Scheduling information: thông tin về thứ tự ưu tiên, hay trỏ tới hàng
đợi.
 Memory-Management information: thông tin về bảng băm, bảng phân
đoạn
 Accounting information: thông tin tính toán liên quan đến thời gian sử dụng
CPU của kernel.
 I/O Status information: trạng thái các thiết bị vào ra

7
Hình 2.2 Bộ lưu trữ thông tin của tiến trình

2.1.2 Bộ điều phối CPU (CPU scheduler)

Mỗi khi CPU còn thời gian trống, hệ điều hành phải quyết định lựa chọn tiến trình
nào trong danh sách các tiến trình đã sẵn sàng để thực hiện tiếp theo, và công việc này
được thực hiện bởi bộ điều phối CPU. Bộ điều phối sẽ chọn một tiến trình từ hàng đợi
và giao cho CPU để thực hiện tiến trình đó.

2.1.3 Phân loại tiến trình lập lịch cho CPU

Những quyết định lập lịch của CPU diễn ra trong bốn trường hợp cụ thể sau:

1. Khi tiến trình chuyển từ trạng thái running state (chế độ đang chạy) sang
waiting state (chế độ chờ)
2. Khi tiến trình chuyển từ trạng thái running state (chế độ đang chạy) sang
ready state (chế độ sẵn sàng chạy)
3. Khi tiến trình chuyển từ trạng thái waiting state (chế độ chờ) sang ready
state (chế độ sẵn sàng chạy)
4. Khi tiến trình bị dừng chạy

Trong trường hợp 1 và 4, CPU sẽ chọn ngay lập tức một tiến trình khác để thực thi,
có nghĩa là tiến trình hiện tại sẽ được tiến hành bởi CPU cho đến khi nó được chuyển
sang trạng thái chờ (trường hợp 1) hoặc dừng hoạt động hoàn toàn (trường hợp 4). Khi
lập lịch hoạt động theo cách này, nó được gọi là "non-preemptive scheduling". Trong
trường hợp 2 và 3, lập lịch diễn ra theo cách khác, khi một tiến trình có thể bị ngắt bởi

8
một tiến trình ưu tiên hơn. Trong trường hợp này, nó được gọi là "preemptive
scheduling."

2.1.3.1 Preemptive scheduling (lập lịch ưu tiên):

Được sử dụng khi một tiến trình đang ở trạng thái running state hoặc waiting state
chuyển sang trạng thái ready state. Lập lịch ưu tiên cho phép tạm dừng hoạt động của
một tiến trình đang được xử lý trên CPU. Khi có một tiến trình khác có độ ưu tiên cao
hơn xuất hiện, tiến trình đang chạy trên CPU sẽ không hoàn thành quá trình thực hiện
của nó. Thay vào đó, một ngắt can thiệp xảy ra và tiến trình mới có độ ưu tiên cao hơn
sẽ được lên lịch để sử dụng CPU, còn tiến trình cũ sẽ được đưa lại vào hàng đợi chờ để
thực hiện tiếp.

Một số thuật toán lập lịch ưu tiên: Round Robin (RR), Shortest Remaining Time
First (SRTF), Priority, …

- Ưu điểm:
+ Ưu tiên quan trọng: Cho phép hệ thống ưu tiên các tiến trình quan trọng hơn để
đảm bảo chúng được xử lý trước, điều này có thể quan trọng trong các ứng dụng
yêu cầu độ ổn định và đáng tin cậy.
+ Phản hồi nhanh: Các tiến trình ưu tiên có thể có thời gian phản hồi tốt hơn, giúp
cải thiện trải nghiệm người dùng hoặc xử lý các tác vụ quan trọng nhanh chóng.
+ Ứng dụng linh hoạt: Thuật toán lập lịch ưu tiên cho phép ứng dụng linh hoạt các
mức độ ưu tiên khác nhau cho các tiến trình, tùy theo yêu cầu cụ thể.
- Nhược điểm:
+ Tiêu tốn tài nguyên: Phải sử dụng tài nguyên tính toán có hạn.
+ Phức tạp: Lập lịch ưu tiên có thể phức tạp và đòi hỏi sự cân nhắc kỹ lưỡng để
đảm bảo rằng hệ thống vẫn hoạt động một cách cân đối và hiệu quả.
+ Không công bằng: Tiến trình có ưu tiên thấp phải chờ nếu có nhiều tiến trình ưu
tiên có cao đến cùng một lúc.

2.1.3.2 Non-preemptive scheduling (lập lịch không ưu tiên):

Được thực hiện khi một tiến trình bị hủy hoặc tiến trình chuyển từ trạng thái running
state sang waiting state. Phương pháp này cho phép một tiến trình khi được giao CPU
sẽ độc chiếm CPU cho đến khi hoàn tất xử lý hoặc tự nguyện giải phóng CPU. Trong
quá trình này, không có tiến trình nào có quyền can thiệp và giành CPU cho bản thân.

9
Sau khi tiến trình hiện tại hoàn thành xử lý, CPU sẽ tự động chuyển sang tiến trình tiếp
theo trong hàng đợi để thực hiện.

Một số thuật toán lập lịch không ưu tiên: Shortest Job First – non-preemptive
(STJF), First Come First Serve (FCFS), …

- Ưu điểm:
+ Tối ưu tài nguyên: Điều này có nghĩa là hệ điều hành không phải tốn nhiều
thời gian và tài nguyên để lên lịch cho các tiến trình khác nhau. Hơn nữa, các
chương trình đồng thời có thể sử dụng ít tài nguyên tính toán hơn so với các
chương trình tuần tự vì chúng có thể chia sẻ tài nguyên và chồng lấp các tác vụ.
+ Triển khai dễ dàng: Lập lịch không ưu tiên là thuật toán tương đối đơn giản để
triển khai.
+ Tốc độ xử lý cao: Các chương trình đồng thời có thể có tốc độ xử lý cao vì
chúng có thể xử lý nhiều tác vụ cùng lúc.
- Nhược điểm:
+ Thời gian phản hồi với tiến trình nhanh: Điều này có nghĩa là các chương trình
đồng thời có thể phản hồi với các tiến trình khác nhau rất nhanh chóng.
+ Lỗi có thể khiến máy tính bị treo: Nếu có lỗi trong chương trình đồng thời, nó
có thể khiến toàn bộ máy tính bị treo.

2.1.3.3 Nhận xét


Trong lập lịch ưu tiên, CPU được phân bổ cho các tiến trình trong một khoảng thời
gian giới hạn, trong khi trong lập lịch phi ưu tiên, CPU được phân bổ cho tiến trình
cho đến khi nó kết thúc hoặc chuyển sang trạng thái chờ.
Tiến trình đang thực thi trong lập lịch ưu tiên bị gián đoạn ở giữa thực thi khi có
một tiến trình có mức độ ưu tiên cao hơn xuất hiện, trong khi tiến trình đang thực thi
trong lập lịch phi ưu tiên không bị gián đoạn ở giữa thực thi và chờ cho đến khi thực
thi xong.
Trong lập lịch ưu tiên, có chi phí chuyển đổi tiến trình từ trạng thái sẵn sàng sang
trạng thái chạy, ngược lại và duy trì hàng đợi sẵn sàng. Trong khi đó, trong lập lịch
không ưu tiên không có chi phí chuyển đổi tiến trình từ trạng thái chạy sang trạng thái
sẵn sàng.
Trong lập lịch ưu tiên, nếu một tiến trình có mức độ ưu tiên cao thường xuyên xuất
hiện trong hàng đợi sẵn sàng thì tiến trình có mức độ ưu tiên thấp phải chờ đợi trong

10
thời gian dài và có thể bị starvation. Trong lập lịch không ưu tiên, nếu CPU được phân
bổ cho tiến trình có thời gian thực thi lớn hơn thì các tiến trình có thời gian thực thi
nhỏ hơn có thể bị starvation.
Lập lịch ưu tiên đạt được sự linh hoạt bằng cách cho phép các tiến trình quan trọng
truy cập CPU khi chúng đến hàng đợi sẵn sàng, bất kể tiến trình nào đang thực thi hiện
tại. Lập lịch không ưu tiên được gọi là cứng nhắc vì ngay cả khi một tiến trình quan
trọng vào hàng đợi sẵn sàng thì tiến trình đang chạy CPU cũng không bị xáo trộn.
Lập lịch ưu tiên phải duy trì tính toàn vẹn của dữ liệu được chia sẻ, do đó nó có chi
phí liên quan, điều này ngược lại với lập lịch không ưu tiên.

Thông số Lập lịch ưu tiên Lập lịch không ưu tiên


Một khi tài nguyên (chu kỳ CPU)
Tài nguyên (chu kỳ CPU) được cấp được cấp cho một tiến trình, tiến
Cơ bản cho một tiến trình trong một khoảng trình sẽ được thực thi cho đến khi
thời gian giới hạn hoàn thành hoặc chuyển sang trạng
thái chờ
Tiến trình không thể bị gián đoạn
Tiến trình có thể bị gián đoạn giữa
Ngắt cho đến khi kết thúc hoặc hết thời
chừng
gian.
Nếu một tiến trình có mức độ ưu tiên
Nếu một tiến trình có thời gian thực
cao thường xuyên xuất hiện trong
thi dài đang chạy CPU, thì các tiến
Starvation hàng đợi sẵn sàng, thì một tiến trình
trình đến sau với thời gian thực thi
có mức độ ưu tiên thấp có thể bị
CPU ngắn hơn có thể bị stavation
stavation
Tính linh
Linh hoạt Cố định
hoạt
Chi phí Có chi phí Không có chi phí
CPU
CPU Utilization cao CPU Utilization thấp
Utilization
Waiting
Waiting Time thấp Waiting Time cao
Time
Response
Response Time thấp Response Time cao
Time
Ra quyết Quyết định được đưa ra bởi trình lập Quyết định được đưa ra bởi chính
định lịch và dựa trên mức độ ưu tiên và tiến trình và hệ điều hành chỉ làm

11
phân bổ thời lượng. theo hướng dẫn của tiến trình.
Kiểm soát Hệ điều hành có nhiều quyền kiểm Hệ điều hành có ít quyền kiểm soát
tiến trình soát hơn hơn

Bảng 2.2 Bảng so sánh 2 loại thuật toán lập lịch

2.1.4 Các tiêu chí lập lịch cho CPU


Liên quan đến lập lịch ta có các tiêu chí cho các thuật toán nhằm đạt được sự tối ưu
cho hệ thống, giải thuật khác nhau có các thuộc tính khác nhau và có xu hướng ưu tiên
một loại tiến trình. Các tiêu chí bao gồm:
1. CPU Utilization (Tính hiệu quả của CPU): Giữ CPU càng bận càng tốt, và
hiệu năng CPU chạy từ khoảng 40 – 90% tùy theo tiến trình. Do đó để tối ưu thì
CPU Utilization lớn nhất có thể.
2. Throughput (Thông lượng tối đa): Số tiến trình hoàn thành trong một đơn vị
thời gian. Để tối đa hóa khả năng của CPU, thì Throughput lớn nhất có thể.
3. Turnaround time (Thời gian hoàn thành): Tổng lượng thời gian để hoàn
thành một tiến trình. Từ lúc đợi trong hàng chờ sẵn sàng (ready queue), đến
lúc được thực thi với CPU và thực hiện thao tác vào ra I/O. Với Turnaround
time, kì vọng sẽ là nhỏ nhất có thể để hoàn thành được nhiều tiến trình.
4. Response time (Thời gian phản hồi): Thời gian từ lúc gửi yêu cầu cho đến khi
có đáp ứng đầu tiên. Trong những hệ thống tương tác, Turnaround time không
phải là tiêu chí quan trọng nhất. Với người dùng thì cái họ mong muốn sau khi
truy cập một ứng dụng là có một phản hồi sớm nhất, dù dữ liệu chưa hoàn
toàn đầy đủ (có thể trả ra sau đó, do vậy Response time mong muốn nhỏ nhất
có thể.
5. Waiting time (Thời gian chờ): Thời gian một tiến trình chờ trong hàng đợi sẵn
sàng (ready queue). Điểm chú ý ở đây là thuật toán lập lịch của CPU sẽ không
ảnh hưởng tới việc tiến trình được thực thi hay thực hiện thao tác vào ra I/O. Nó
chỉ xử lý duy nhất việc tiến trình đó chờ trong hàng đợi sẵn sàng (ready queue)
bao lâu. Do đó, Waiting time kì vọng so nhỏ nhất có thể.

Như vậy trong lập lịch CPU, có năm tiêu chí quan trọng và mục tiêu khác nhau, và
mỗi tiêu chí này có sự ưu tiên khác nhau. Trong hầu hết các tình huống, việc tối ưu hóa
một tiêu chí tổng quan là điều quan trọng. Tuy nhiên, có những trường hợp cụ thể nên
ưu tiên tối ưu hóa một hoặc một số chỉ số quan trọng hơn là tối ưu hóa tất cả các tiêu

12
chí. Các nghiên cứu đã chỉ ra rằng trong các hệ thống tương tác giữa con người và máy
tính, như máy tính cá nhân, việc tối ưu hóa khoảng thời gian phản hồi giữa các tiến
trình quan trọng (response time) quan trọng hơn so với việc tối ưu hóa thời gian phản
hồi trung bình (average response time).

Do đó, với các thuật toán lập lịch tiến trình được đề xuất, nhóm chúng em sẽ sử
dụng thời gian chờ (waiting time) và thời gian chờ trung bình (average waiting time),
làm thước đo chính để so sánh hiệu suất giữa các thuật toán.

2.2 Các thuật toán lập lịch cho CPU


Hiện nay có rất nhiều thuật toán đã và đang được sử dụng để lập lịch cho CPU.
Trong báo cáo này, chúng em tập trung vào mô hình CPU đơn lõi (single processor),
nghĩa là chỉ một tiến trình được thực hiện tại một thời điểm, và mô tả một số thuật toán
lập lịch cơ bản và đặc trưng.

Đối với mỗi thuật toán, chúng em sẽ trình bày lý thuyết, ví dụ minh họa, điểm mạnh
và yếu điểm, và đề xuất cách cải thiện và tối ưu thời gian chờ (nếu có).

2.2.1 First-Come, First-Served Scheduling (FCFS)

2.2.1.1 Lý thuyết

FCFS được coi là thuật toán lập lịch trình hệ điều hành đơn giản nhất trong tất cả
các thuật toán lập lịch CPU. Thuật toán lập lịch First Come First Serve quy định rằng
tiến trình yêu cầu CPU đầu tiên sẽ được cấp phát CPU đầu tiên và được triển khai
bằng cách sử dụng hàng đợi FIFO.

2.2.1.2 Đặc điểm

- FCFS hỗ trợ các thuật toán lập lịch trình CPU không ưu tiên và cả ưu tiên.
- Các tác vụ luôn được thực thi theo khái niệm First-come, First-serve.
- FCFS dễ dàng triển khai và sử dụng.
- Thuật toán này không hiệu quả lắm về hiệu suất và thời gian chờ đợi khá cao.

2.2.1.3 Ưu điểm

- Dễ dàng triển khai và không yêu cầu nhiều tài nguyên.


- FCFS đảm bảo rằng các tiến trình được cấp phát CPU theo thứ tự đến. Điều này
được coi là công bằng vì các tiến trình đến sớm sẽ được phục vụ trước.

13
2.2.1.4 Nhược điểm

- Dễ dẫn đến tình trạng Stavation


- Thời gian chờ đợi trung bình cao hơn nhiều so với các thuật toán khác.
- FCFS rất đơn giản và dễ triển khai nên không hiệu quả so với các thuật toán khác.

2.2.1.5 Nguyên lí hoạt động và ví dụ

Process Arrival Burst Time Completion Time Turn around Time Waiting Time
Time

P0 0 ms 5 ms 5 ms 5 ms 0 ms

P1 1 ms 3 ms 8 ms 7 ms 4 ms

P2 2 ms 8 ms 16 ms 14 ms 6 ms

P3 3 ms 6 ms 22 ms 19 ms 13 ms

Bảng 2.3 Ví dụ lập lịch thuật toán FCFS

Thuật toán hoạt động rất đơn giản, tiến trình nào đến trước sẽ được thực hiện trước
đến khi nó hoàn thành.
Gantt Chart:

*đơn vị: ms
Turn Around Time = 45ms, Average Turn Around Time = 45ms/4 = 11.2ms
Waiting Time = 23ms, Average Waiting Time = 23ms/4 = 5.75ms

14
CHƯƠNG 3. MÔ PHỎNG CÁC GIẢI THUẬT LẬP LỊCH

Chương này chúng em sẽ trình bày về mục tiêu, lý do và các bước và ý tưởng cụ thể
mà nhóm đã làm để có thể mô phỏng được các giải thuật lập lịch.

3.1 Mục tiêu thiết kế


 Dùng ngôn ngữ Bash Shell để mô phỏng và kiểm nghiệm giải thuật First Come
First Serve trên nhiều tiến trình thật như là các lệnh hoặc các file code.

3.2 Lý do lựa chọn các công cụ trên


 Chạy được các file, lệnh để mô phỏng được trực quan và thực tế hơn
 Mong muốn thể hiện ready queue một cách rõ ràng và thể hiện được đầu vào
đầu ra của ready queue, do đó việc biểu diễn sẽ đơn giản và tiện lợi hơn.
 Đồng thời biểu diễn được cụ thể biểu đồ Gantt giúp mô phỏng các tiến trình
được tốt hơn.

3.3 Ý tưởng và các bước thực hiện


Mong muốn của chúng em là có thể mô phỏng được giải thuật First Come First
Serve:

 Chạy được các tiến trình thật như các lệnh hoặc là các file code
 Tính được các thông số cơ bản của từng tiến trình như thời gian tới, thời gian
hoàn thành, thời gian chờ,…
 Biểu diễn biểu đồ gantt chart của các tiến trình

Các bước thực hiện như sau:

1. Đưa ra 1 file text gồm các tiến trình kèm theo thời gian tới
2. Lần lượt cập nhật các tiến trình vào trong ready queue theo thời gian tới
3. Từ ready sẽ thực hiện lần lượt các tiến trình theo quy tắc FIFO
4. Sau khi mỗi tiến trình được thực hiện thì sẽ lưu lại các thông số của tiến trình
5. Khi chạy hết các tiến trình sẽ hiển thị gantt chart và kết thúc chương trình

3.3.1 Mô phỏng thuật toán lập lịch FCFS

3.3.1.1 Kịch bản mô phỏng

- Input là các file text gồm các lệnh

15
- Output là các tiến trình kèm theo các thông số: thời gian đến, thời gian chờ, thời
gian hoàn thành, thời gian bắt đầu, thời gian kết thúc.

3.3.1.2 Thực hiện mô phỏng

Bước 1: Khởi tạo các tiến trình gồm thời gian tới và lệnh

Bước 2: Đọc lần lượt các lệnh và tiến trình vào ready queue dựa theo arrival time

Hình 3.1 File đường dẫn tiến trình và thời gian thực

Bước 3: Từ ready queue thực hiện các tiến trình dựa theo quy tắc FIFO

Hình 3.2 Đọc các tiến trình theo thời gian tới

Bước 4: Hiển thị các thông số của các tiến trình

Hình 3.3 Thông số của tiến trình 1

16
Hình 3.4 Thông số tiến trình 2

Hình 3.5 Thông số tiến trình 3

Bước 5: Hiển thị gantt chart

17
Tài liệu tham khảo

1. A comparative study of CPU Scheduling Algorithm (arxiv.org)


2. Sci-Hub | [IEEE 2019 3rd International Conference on Computing

Methodologies and Communication (ICCMC) - Erode, India (2019.3.27-

2019.3.29)] 2019 3rd International Conference on Computing Methodologies

and Communication (ICCMC) - Comparative Analysis of CPU Scheduling

Algorithms and Their Optimal Solutions | 10.1109/iccmc.2019.8819679

(hkvisa.net)
3. https://www.geeksforgeeks.org/preemptive-and-non-preemptive-scheduling/
4. https://www.studytonight.com/operating-system/priority-scheduling
5. CPU Scheduling in Operating Systems - GeeksforGeeks

18

You might also like