Professional Documents
Culture Documents
Báo - Cáo - Lần 4 - Nhóm-15
Báo - Cáo - Lần 4 - Nhóm-15
Báo - Cáo - Lần 4 - Nhóm-15
Hà Nội, 11/2023
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
1. Nhóm...................................................................................................................................4
1.1 Cơ cấu thành viên............................................................................................4
1.2 Phân công nhiệm vụ.........................................................................................4
1
DANH MỤC HÌNH ẢNH
Hình 3.2 Đọc các tiến trình theo thời gian tới..................................................................16
2
DANH MỤC BẢNG BIỂU
3
CHƯƠNG 1. XÁC ĐỊNH NHÓM VÀ ĐỀ TÀI
1. Nhóm
1.1 Cơ cấu thành viên
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
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ụ
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.
Tiến trình là một chương trình đang trong quá trình thực thi.
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.
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.
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ý.
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
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 đó.
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."
Đượ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.
Đượ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.
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.
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
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.
Đố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.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.
- 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
13
2.2.1.4 Nhược điểm
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
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.
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
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
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.
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
16
Hình 3.4 Thông số tiến trình 2
17
Tài liệu tham khảo
(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