CHƯƠNG 2 : QUẢN LÝ TIẾN TRÌNH
2.3. ĐIỀU ĐỘ TIẾN TRÌNH
2.3.5. Điều độ trên hệ thống cụ thể
Điều độ trong Windows
Windows là hệ điều hành hỗ trợ đa luồng, do vậy CPU được điều độ ở mức luồng. Trong các phiên bản đầu, tức là tới trước Win 95, điều độ là không phân phối lại. Các phiên bản từ Win 95 điều độ luồng dựa trên mức ưu tiên và có phân phối lại, tức là luồng có thể bị
thu hồi CPU cả khi đang ở trong trạng thái chạy.
Mỗi luồng trong Windows được gán một mức ưu tiên dùng cho điều độ. Có tất cả 32 mức ưu tiên nằm trong khoảng từ không (thấp nhất) tới 31 (cao nhất). Chỉ duy nhất một luồng có mức ưu tiên bằng khơng là luồng của hệ điều hành có nhiệm vụ xóa nội dung tất cả các trang nhớ trống về không và luồng này được thực hiện khi khơng có luồng nào khác có nhu cầu chạy.
Windows xếp các luồng có cùng mức ưu tiên vào cùng một hàng đợi. Các luồng trong cùng hàng đợi được điều độ theo phương pháp quay vòng. Trước tiên, hệ thống phân phối
CPU cho các luồng có mức ưu tiên cao nhất. Nếu khơng có luồng nào trong số đó sẵn sàng để chạy, Windows sẽ chuyển sang cấp CPU cho hàng đợi gồm các luồng với mức ưu tiên cao tiếp theo. Trong lúc một luồng đang chạy, nếu một luồng ở mức ưu tiên cao hơn có yêu cầu
Các tiến trình hệ thống
Các tiến trình tương tác
Các tiến trình xử lý mẻ
Các tiến trình nền
Mức ưu tiên thấp nhất Mức ưu tiên cao nhất
CPU, luồng đang chạy sẽ bị ngắt ngay, bất kể lượng tử thời gian của tiến trình đó đã hết chưa, để nhường CPU cho tiến trình có mức ưu tiên cao hơn mới xuất hiện.
32 mức ưu tiên được nhóm thành sáu nhóm, mỗi nhóm bao gồm một dải mức ưu tiên. Mức ưu tiên của luồng được xác định dựa trên hai thơng tin: 1) luồng thuộc nhóm ưu tiên nào; và 2) độ ưu tiên của luồng so với trung bình của nhóm.
Các nhóm ưu tiên. Windows xác định sáu nhóm ưu tiên như sau:
IDLE_PRIORITY_CLASS BELOW_NORMAL_PRIORITY_CLASS NORMAL_PRIORITY_CLASS ABOVE_NORMAL_PRIORITY_CLASS HIGH_PRIORITY_CLASS REALTIME_PRIORITY_CLASS
Có thể đặt nhóm ưu tiên cho luồng sử dụng lời gọi hệ thống SetPriorityClass, hoặc đặt bằng tay từ giao diện đồ họa của Task Manager. Theo mặc định, luồng thuộc nhóm ưu tiên
NORMAL_PRIORITY_CLASS. Luồng có mức ưu tiên IDLE_PRIORITY_CLASS là luồng làm các
công việc nền như screen saver. Các luồng không được khuyến cáo đặt mức ưu tiên ở mức
REALTIME_PRIORITY_CLASS vì khi có luồng với mức ưu tiên như vậy chạy, các luồng khác
sẽ không nhận được CPU để chạy, kể cả các luồng xử lý tín hiệu từ chuột, bàn phím.
Mức ưu tiên trong nhóm. Mỗi nhóm bao gồm một số mức ưu tiên. Các luồng thuộc
một nhóm ưu tiên có thể thay đổi mức ưu tiên cụ thể tùy vào mức ưu tiên tương đối trong nhóm. Các mức ưu tiên tương đối trong nhóm bao gồm:
THREAD_PRIORITY_IDLE THREAD_PRIORITY_LOWEST THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_ABOVE_NORMAL THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_TIME_CRITICAL
Mức ưu tiên cụ thể của luồng được xác định bằng cách kết hợp mức ưu tiên cơ sở của nhóm với mức ưu tiên tương đối trong nhóm. Quy tắc kết hợp được thể hiện trên bảng 2.1, trong đó các cột là các nhóm ưu tiên, các hàng là mức ưu tiên tương đối trong nhóm. Các ô chứa mức ưu tiên cụ thể tương ứng với mỗi hàng và cột.
Bảng 2.1. Mức ưu tiên của luồng Windows dựa trên nhóm và mức ưu tiên tương đối Realtime
class
High class Above Normal class Normal class Below Normal class Idle class Time_critical 31 15 15 15 15 15 Highest 26 15 12 10 8 6 Above_normal 25 14 11 9 7 5 Normal 24 13 10 8 6 4 PTIT
Below_normal 23 12 9 7 5 3
Lowest 22 11 8 6 4 2
Idle 16 1 1 1 1 1
Bên cạnh việc sử dụng mức ưu tiên, Windows còn phân biệt giữa các tiến trình đang được chọn, tức là tiến trình có cửa sổ nằm trên cùng, với các tiến trình cịn lại. Tiến trình đang được chọn sẽ được tăng lượng tử thời gian lên khoảng 3 lần so với các tiến trình khác cùng mức ưu tiên và do vậy sẽ được nhận CPU trong khoảng thời gian dài hơn.