Professional Documents
Culture Documents
Mặc dù rất cố gắng nhưng do hạn chế về thời gian, trình độ nên chắc chắn bài viết sẽ
không tránh khỏi sai sót khách quan. Chúng em mong thầy và các bạn tận tình chỉ bảo để
chúng em rút ra kinh nghiệm.
Hệ điều hành là phần gần bó trực tiếp với phần cứng và là môi trường để cho các
chương trình ứng dụng khác chạy trên nó. Với chức năng quản lý và phân phối tài nguyên
một cách hợp lý, đồng thời gia lập một máy tính mở rộng và tạo giao diện tiện lợi với người
sử dụng, hệ điều hành là một thành phần then chốt không thể thiếu được trong mỗi một hệ
thống máy tính điện tử.
Một trong những chức năng quan trọng của hệ điều hành là quản lý CPU. Trong môi
trường xử lý đa chương, có thể xảy ra tình huống nhiều tiến trình đồng thời sẵn sàng đề xử
lý. Mục tiêu của các hệ phân chia thời gian(time-sharing) là chuyển đổi CPU qua lại giữa
các tiến trình một cách thưởng xuyên để nhiều người sử dụng có thể tương tác cùng lúc với
từng chương trình trong quá trình xử lý.
Để thực hiện được mục tiêu này, hệ điều hành phải lựa chọn tiến trình được xử lý tiếp
theo. Bộ điều phối sẽ sử dụng một giải thuật điều phối thích hợp để thực hiện nhiệm vụ này.
Một thành phần khác của hệ điều hành cũng tiềm ẩn trong công tác điều phối là bộ điều
phối(dispatcher). Bộ phân phối sẽ chịu trách nhiệm chuyển đổi ngủ cảnh và trao CPU cho
tiến trình được chọn bởi bộ điều phối để xử lý.
Vì những lợi ích lớn lao mà giải thuật điều phối CPU đem lại và để tìm hiểu kĩ hơn về
nguyên tắc hoạt động của chúng, chúng em quyết định chọn đề tài: Xây dựng chương trình
mô phỏng các giải thuật định thời cho CPU.
- Tìm hiểu các giải thuật: First Come First Serve(FCFS), Round Robin(RR),Shortest
Job First(SJF), Shortest Remain Time(SRT).
- Chỉ ra được ưu và nhược điểm cả các giải thuật lập lịch CPU.
- Xây dựng chương trình mô phỏng các giải thuật đã tìm hiểu và kết quả demo
2. Cơ sở lý thuyết.
2.1. Khái niệm cơ bản
2.1.1. Tiến trình:
Khái niệm:
Một tiến trình là một chương trình hoặc ứng dụng đang được thực thi bởi bộ xử lý
trung tâm (CPU) của máy tính. Một tiến trình có thể được coi là một vật chứa cho các tài
nguyên và chỉ dẫn cần thiết để chạy một chương trình. Những tài nguyên này bao gồm bộ
nhớ, thao tác nhập/xuất và các tài nguyên hệ thống khác. Hệ điều hành chịu trách nhiệm
quản lý và lập lịch trình cho các tiến trình, có thể bao gồm việc tạo, hủy và chuyển đổi giữa
chúng.
Các trạng thái của tiến trình:
Tại một thời điểm, tiến trình có thể nhận một trong các trạng thái sau:
- New: tiến trình vừa mới được tạo.
- Ready: tiến trình đang chờ được cấp phát CPU để xử lí.
- Running: tiến trình đang được xử lí.
- Waiting: tiến trình dừng để 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 đó.
- End: tiến trình được hoàn tất xử lí.
- Đầu tiên khi vừa được khởi tạo, tiến trình sẽ ở trạng thái NEW và được lưu trong bộ
nhớ tạm.
- Sau khi tiến trình được tạo, sẽ chuyển sang trạng thái READY, tiến trình được tải lên
bộ nhớ chính. Tiến trình đã sẵn sàng để chạy và một khi được cấp phát CPU thì sẽ
chuyển qua trạng thái RUNNING.
- Bất cứ khi nào có yêu cầu nhập xuất hoặc yêu cầu đầu vào từ phía người dùng tiến
trình sẽ chuyển sang trạng thái WAITING. Tiến trình tiếp tục chờ đợi trong bộ nhớ
chính và sau khi thao tác nhập xuất hay yêu cầu người dùng được xử lí xong tiến trình
sẽ chuyển qua trạng thái READY.
- Sau khi tiến trình được thực thi xong, gặp lệnh thoát thì sẽ kết thúc, tiến trình từ trạng
thái RUNNING chuyển sang trạng thái END.
Như vậy lập lịch cho CPU có nghĩa là tổ chức một hàng đợi các tiến trinh sẵn sàng để
phân phối giờ CPU cho chúng dựa trên độ ưu tiên của các tiến trình; sao cho hiệu suất sử
dụng CPU là tối ưu nhất.
Như vậy lập lịch cho CPU có nghĩa là tổ chức một hàng đợi các tiến trinh sẵn sàng để
phân phối giờ CPU cho chúng dựa trên độ ưu tiên của các tiến trình; sao cho hiệu suất sử
dụng CPU là tối ưu nhất.
Mục tiêu lập lịch
Bộ điều phối không cung cấp cơ chế, mà đưa ra các quyết định. Các hệ điều hành xây
dựng nhiều chiến lượt khác nhau để thực hiện việc điều phối, nhưng tựu chung cần đạt được
các mục tiêu sau:
- Sự công bằng: các tiến trình chia sẻ CPU một cách công bằng không có tiến trình nào
phải đợi vô hạn để được cấp phát CPU
- Tính hiệu quả: Hệ thống phải tận dụng được CPU 100% thời gian
- Thời gian đáp ứng hợp lý: cực tiểu hóa thời gian hồi đáp cho các tương tác của người
sử dụng
- Thời gian lưu lại trong hệ thống: cực tiểu hóa thời gian hoàn tất các tác vụ xử lý theo
lỗ
- Thông lượng tối đa: cực đại hóa số công việc được xử lý trong một đơn vị thời gian.
Tuy nhiên thường không thể thỏa mãn tất cả các mục tiêu kể trên vì bản thân chúng có sự
mâu thuẫn với nhau mà chỉ có thể dung hòa chúng ở mức độ nào đó.
2.1.3 Điều phối tiến trình:
Điều phối hoạt động các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệ điều hành
phải xem xét nhiều yếu tố khác nhau để có thể đạt được những mục đích đề ra. Một số tiêu
chuẩn điều phối của tiến trình cần được quan tâm như:
- Tính hướng nhập/xuất của tiến trình (I/O – boundedness): Hoạt động của các tiến
trình đa số là các thao tác nhập xuất. Thời gian thực hiện nhập xuất nhiều hơn so với
thời gian xử lý.
- Tính hướng của xử lý tiến trình (CPU - boundedness): Hoạt động của các tiến trình đa
số là các thao tác tính toán, xử lý. Thời gian xử lý tiến trình là nhiều hơn thời gian
thực hiện nhập xuất.
- Tiến trình tương tác hay xử lý theo lô: Khi có cả hai tiến trình tương tác và xử lý theo
lô, tiến trình xử lý theo lô có thể được tạm dừng và ưu tiên cho tiến trình tương tác
được phản hồi ngay lập tức.
- Độ ưu tiên của tiến trình: Các tiến trình có thể được phân cấp theo một số tiêu chuẩn
đánh giá nào đó, một cách hợp lý, các tiến trình quan trọng hơn cần được ưu tiên cao
hơn.
- Thời gian đã sử dụng CPU của tiến trình: một số quan điểm ưu tiên chọn những tiến
trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất
để hoàn tất và rời khỏi hệ thống. Tuy nhiên cũng có quan điểm cho rằng các tiến trình
nhận được CPU trong ít thời gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu
tiên chọn chúng.
- Thời gian còn lại tiến trình cần để hoàn tất: Có thể giảm thiều thời gian chờ trung
bình của các tiến trình bằng cách cho các tiến trình cần ít thời gian nhất để hoàn tất
được thực hiện trước.
Ưu điểm :
- Các quá trình sẽ được luân phiên cho CPU xử lý nên thời gian chờ gian chờ đợi sẽ ít.
- Đối với các quá trình liên quan đến nhập xuất , IO, người dùng thì hiệu quả .
- Việc cài đặt không quá phức tạp
Nhược điểm:
- Thời gian chờ đợi trung bình dưới chính sách RR thường là quá dài.
- Nếu thời gian định mức cho việc xử lý quả lớn thì RR thành FIFO
- Nếu thời gian quả ngắn so với thời gian xử lý của một tiến trình trong danh sách hàng
đợi thì việc chờ đợi và xử lý luân phiên sẽ nhiều.
- Qui tắc là định mức thời gian nên dài hơn 80% chu kỳ CPU.
2.3.4 Shortest Remaining Time First(SRT)
Tương tự như SJF nhưng trong thuật toán này, độ ưu tiên thực hiện các tiến trình dựa vào
thời gian cần thiết để thực hiện nốt tiến trình(bằng tổng thời gian trừ đi thời gian đã thực
hiện). Như vậy, trong thuật toán này cần phải thường xuyên cập nhật thông tin về giời gian
đã thực hiện của tiến trình. Đồng thời, chế độ phân bố lại giờ CPU cũng phải được áp dụng
nếu không sẽ làm mất tình ưu việc của thuật toán.
Ưu điểm :
- Thời gian chờ đợi,tồn tại trong hệ thống của mỗi tiến trình đều ngắn
- Tránh tiến trình lớn độc chiếm CPU
Nhược điểm :
- Việc cải đặt thuật toán khá phức tạp
- Cần quản lý chặt chẽ việc điều phối các tiến trình
- Cần quản lý thời gian đến của mỗi tiến trình
- Khó ước lượng thời gian thực hiện của tiến trình
2.3.5 Multilevel queue (MLQ)
Multilevel queue là thuật toán chia Ready queue thành nhiều queue riêng biệt. Các
tiến trình được gán với hàng đợi thường dựa trên các tiêu chí: Kích thước bộ nhớ tiến trình,
mức độ ưu tiên của tiến trình, loại tiến trình….
Ví dụ về thuật toán Multilevel queue với 5 hàng đợi (queue) được sắp xếp theo thứ tự ưu
tiên.
- Systems Processes: là hệ điều hành có quy trình riêng để chạy.
- Interactive Processes: là một quá trình trong đó phải có cùng một loại tương tác.
- Batch Processes: là một kỹ thuật trong Hệ điều hành thu thập các chương trình và dữ
liệu với nhau dưới dạng batch trước khi quá trình xử lý bắt đầu.
- Student Processes: Có độ ưu tiên thấp nhất.
Có thể áp dụng nhiều giải thuật lập lịch khác nhau, phù hợp với từng hàng đợi
2.3.6 Multilevel feedback queue
Tương tự với MLQ nhưng lập lịch hàng đợi phản hồi đa cấp (MLFQ) cho phép một
tiến trình di chuyển giữa các hàng đợi. Ý tưởng là tách riêng các tiến trình với các đặc điểm
chu kỳ CPU khác nhau. Nếu một tiến trình dùng quá nhiều thời gian CPU thì nó sẽ được di
chuyển tới hàng đợi có độ ưu tiên thấp. Một tiến trình chờ quá lâu trong hàng đợi có độ ưu
tiên thấp hơn có thể được di chuyển tới hàng đợi có độ ưu tiên cao hơn.
Nói chung, bộ lập lịch hàng đợi phản hồi đa cấp được xác định bởi các tham số sau:
- Số lượng hàng đợi.
- Thuật toán lập lịch cho mỗi hàng đợi.
- Phương pháp được sử dụng để xác định thời điểm nâng cấp quy trình lên hàng đợi có
mức độ ưu tiên cao hơn.
- Phương pháp được sử dụng để xác định thời điểm hạ cấp một quy trình xuống hàng
đợi có mức độ ưu tiên thấp hơn.
- Phương pháp được sử dụng để xác định hàng đợi mà một quy trình sẽ vào khi quy
trình đó cần dịch vụ.
Định nghĩa của bộ lập lịch hàng đợi phản hồi đa cấp làm cho nó trở thành thuật toán lập
lịch CPU chung nhất. Nó có thể được cấu hình để phù hợp với một hệ thống cụ thể đang
được thiết kế. Tuy nhiên, nó cũng yêu cầu một số phương tiện chọn giá trị cho tất cả các
tham số để xác định bộ lập lịch tốt nhất. Mặc dù hàng đợi phản hồi đa cấp là sơ đồ chung
nhất, nhưng nó cũng là sơ đồ phức tạp nhất.
Ưu điểm:
- Đây là một thuật toán lập lịch linh hoạt.
- Cho phép các tiến trình khác nhau di chuyển giữa các hàng đợi khác nhau.
- Trong thuật toán này, một tiến trình chờ đợi quá lâu trong hàng đợi có mức độ ưu tiên
thấp hơn có thể được chuyển sang hàng đợi có mức độ ưu tiên cao hơn, giúp ngăn
chặn tình trạng tiến trình phải chờ lâu (starvation).
Nhược điểm:
- Thuật toán này quá phức tạp.
- Khi các tiến trình di chuyển xung quanh các hàng đợi khác nhau, dẫn đến việc tạo ra
nhiều CPU hơn.
- Để chọn bộ lập lịch tốt nhất, thuật toán này yêu cầu một số phương tiện khác để chọn
các giá trị
Kết quả:
3.2 Shortest Job First :
Ví dụ : Preemptive SJF
Process ID Arrival Time Burst Time
P1 0 12
P2 2 4
P3 3 6
P4 8 5
Tại thời điểm 0, P1 đến và thực hiện:
0
P1
Tại thời điểm 2, P2 đến, khi đó so sánh burst time của 2 tiến trình nhận thấy P2 có burst time
nhỏ hơn đồng nghĩa với độ ưu tiên cao hơn, P2 giành được CPU
0 2
P1 P2
Tại thời điểm 3, P3 đến, khi đó so sánh burst time của P2, P3, P1 , burst time P2 nhỏ nhất
nên P2 tiếp tục thực hiện
0 2 3 P3 P1
P1 P2
Tại thời điểm 6, P2 thực hiện xong, khi đó so sánh burst time của P3, P1 , burst time P3 nhỏ
hơn nên P3 được thực hiện
0 2 6 P1
P1 P2 P3
Tại thời điểm 8, P4 đến, khi đó so sánh burst time của P3, P1,P4 , burst time P3 nhỏ nhất nên
P3 tiếp tục được thực hiện.
0 2 6 P4 P1
P1 P2 P3
Tại thời điểm 12, P3 thực hiện xong, khi đó so sánh burst time của P1,P4 , burst time P4 nhỏ
hơn nên P4 được thực hiện.
0 2 6 12 P1
P1 P2 P3 P4
Tại thời điểm 17, P4 thực hiện xong, khi đó P1 được thực hiện.
0 2 6 12 17 27
P1 P2 P3 P4 P1
Gantt chart:
0 2 6 12 17 27
P1 P2 P3 P4 P1
Với bảng dữ liệu trên, ta biết thêm được quantum time = 2. Như vậy, để tính toán thuận tiện,
ta cũng tiếp tục sử dụng giản đồ Gantt:
Quá trình bắt đầu với tiến trình P1, có Burst time = 5. Ở đây, mọi tiến trình thực hiện trong 2
giây. P2 và P3 vẫn đang trong hàng đợi
Tại thời điểm = 2, P1 được thêm vào cuối Hàng đợi và P2 bắt đầu thực thi.
Tại thời điểm = 3, P4 được thêm vào cuối Hàng đợi và P2 tiếp tục thực thi.
Tại thời điểm = 4, P5 được thêm vào cuối Hàng đợi và CPU bị chiếm bởi P3, tiếp đó P2 lại
được đẩy xuống cuối hàng đợi
Tại thời điểm = 5, P3 thực hiện xong , P1 tiếp tục tiến trình
Tại thời điểm = 7, P1 bị đẩy xuống cuối hàng đợi , P4 tiếp tục tiến trình
Tại thời điểm = 11, P5 bị đẩy xuống cuối hàng đợi , P2 tiếp tục được thực hiện
Tại thời điểm = 12, P2 thực hiện xong , P1 tiếp tục được thực hiện
Tại thời điểm = 13, P1 thực hiện xong , P5 tiếp tục được thực hiện
Gantt Chart: