Lập lịch

Một phần của tài liệu Cấu trúc, nguyên lý, phân tích mã nguồn CentOS (Trang 53)

Linux là hệ đa xử lí, tức khả năng thực thi nhiều tác vụ cùng một lúc. Một chương trình máy tính là một chuỗi các chỉ lệnh (intructions, hay còn gọi là lệnh máy) mà theo đó máy tính phải thực hiện. Mặt khác tài nguyên máy tính (CPU, bộ nhớ, tệp, các thiết bị...) là hữu hạn và khi các chương trình chạy thì các chương trình đều có nhu cầu trên các tài nguyên đó. Để đáp ứng nhu cầu tài nguyên, cần có một sách lược chạy trình thật hiệu quả để đảm bảo tính đa nhiệm, nhiều người dùng. Cách phổ biến nhất là cấp tài nguyên cho mỗi chương trình trong một lượng thời gian nhất định, sao cho các chương trình đều có cơ hội thực hiện như nhau và trong thời gian thực hiện chương trình, cần kiểm soát việc thực hiện đó chặt chẽ. Trong các hệ phân chia thời gian, kernel sẽ phân phối CPU cho các tiến trình trong một khoảng thời gian nhất định (gọi là time slice). Khi lượng thời gian này kết thúc kernel sẽ lập lịch (schedule) chọn tiến trình khác và cấp CPU cho tiến trình đó.

Khi một tiến trình được tạo ra đều có độ ưu tiên tĩnh ban đầu ngầm định là 0, mức ưu tiên này có thể được thay bởi một lời gọi hệ thống nice (). Mức độ ưu tiên của một tiến trình có thể dao động từ 1 đến 99. Chỉ có người sử dụng có quyền root mới có thể giảm giá trị biểu diễn độ ưu tiên của tiến trình, một người dùng thống thường chỉ có thể giảm mức độ ưu tiên của một tiến trình bằng việc tăng giá trị biểu diễn độ ưu tiên lên. Mức ưu tiên động cho mỗi tiến trình thông thường sẽ bằng tổng các lượng thời gian và số tick của CPU đã trôi qua cho tiến trình trước khi lượn thời gian giành cho tiến trình kết thúc.

Các thuật toán lập lịch tiến trình thường sẽ dựa vào mức độ ưu tiên để đưa ra sơ đồ thực thi cho các tiến trình. Trong hệ thống những tiến trình đáp ứng thời gian thực sẽ có độ ưu tiên dao động từ 0 đến 99, trong đó nhưng tiến trình khác lại có độ ưu tiên trong khoảng 100 đến 140. Ta có thể thấy mức độ ưu tiên của những tiến trình mang tính thời gian thực sẽ luôn được ưu tiên hơn trong việc lập lịch để thực hiện trước.

Để giải quyết cho các tiến trình thời gian thực ta có thể sử dụng 2 phương pháp. Một là thực hiện cách lập lịch theo cơ chế FIFO (First In-First Out), tiến trình nào có mức ưu tiên cao hơn sẽ được lập lịch chạy trước, và chúng sẽ chiếm dụng CPU cho tới khi nào hoàn thành xong công việc của mình mà ko quan tâm tới time slice. Hai là thực hiện cách lập lịch Round Robin, tiến trình nào có mức ưu tiên cao hơn sẽ được lập lịch chạy trong khoảng thời gian cố định time slice mà HDH đã quy định về việc sử dụng CPU, hết thời gian này tiến trình sẽ phải nhường CPU cho tiến trình khác và trở về dưới cuối hàng đợi ưu tiên đợi xoay vòng tiếp. Ngoài ra ta có thể tự lập lịch cho hệ thống để đáp ứng cho các yêu cầu cụ thể (đáp ứng về time, hay hiệu suất) của mình bằng việc thay tập tin này chúng ta có thế định nghĩa lại MIN_ TIMESLICE, MAX_TIMESLICE, MAX_SLEEP_AVG…

Một phần của tài liệu Cấu trúc, nguyên lý, phân tích mã nguồn CentOS (Trang 53)

Tải bản đầy đủ (DOCX)

(64 trang)
w