xỉ
3.3.1. Thuật toán: Approx (𝝉, 𝒊, 𝒌)
Một nhiệm vụ thời gian thực τ𝑖 có khả năng lập lịch khi và chỉ khi nó hoàn thành trong kỳ hạn và khoảng thời gian bận rộn mức 𝑖 đã kết thúc. Tuy nhiên, với khoảng thời gian nguyên tố cuối cùng trong 𝑆 𝑖 là 𝑡𝑚𝑎𝑥, ∞ (với 𝑡𝑚𝑎𝑥 = max𝑗 <𝑖 𝑘 − 1 𝑇𝑗 − 𝐽𝑗 ), không cần thiết để xác minh khoảng thời gian bận rộn mức i đã kết thúc hay chƣa. Mặt khác, 𝐼𝑖(𝑡) cũng không thể áp dụng cho trƣờng hợp 𝑡 = ∞. Do đó, với các tác vụ hoàn thành trƣớc hoặc ở thời điểm 𝑡𝑚𝑎𝑥 (nghĩa là hoàn thành trong các khoảng thời gian nguyên tố của 𝑆 𝑖 mà không phải là khoảng cuối cùng), ngoài việc kiểm tra xem nhiệm vụ có hoàn thành trong kỳ hạn hay không, chúng ta cần xác định khoảng bận rộn đã kết thúc hay chƣa. Với các tác vụ hoàn thành sau thời điểm 𝑡𝑚𝑎𝑥
(nghĩa là hoàn thành trong khoảng thời gian nguyên tố cuối cùng của 𝑆 𝑖) thì ta chỉ cần kiểm tra các tác vụ có hoàn thành trong kỳ hạn hay không. Trong giai đoạn sau này, với mọi 𝑗 < 𝑖, hàm 𝑅𝐵𝐹 (τ𝑗, 𝑡) là hàm tuyến tính.
Input: τ = C[n], T[n], D[n], J[n]: các mảng số nguyên /* Các tham số của hệ */
i: integer /* Chỉ số của nhiệm vụ cần phân tích */
k: integer /* Số bước chính xác cần xét */
Output: f: boolean /* Xác định nhiệm vụ lập lịch được hay không */
Gọi last_active: integer /* Chỉ số của tác vụ cuối cùng
hoàn thành trong mỗi khoảng thời gian nguyên tố của 𝑆𝑖 */
Xây dựng tập 𝑆 𝑖 theo định nghĩa 6 /* Tập các điểm lập lịch cần xét */ last_active = 0; f = true;
Foreach𝑡𝑎 ∈ 𝑆 𝑖 − 0 − {∞}
If 𝐼𝑖 𝑡𝑎 > 𝑙𝑎𝑠𝑡_𝑎𝑐𝑡𝑖𝑣𝑒 then /* Tồn tại𝜏𝑖,𝑙 hoàn thành trong (𝑡𝑎−1, 𝑡𝑎] */
𝑚𝑖𝑛 = 𝑙𝑎𝑠𝑡_𝑎𝑐𝑡𝑖𝑣𝑒 + 1 𝑚𝑎𝑥 = 𝐼𝑖(𝑡𝑎)
/*Kiểm tra tác vụ đầu tiên hoàn thành trong khoảng có lập lịch được không*/ Gọi ta-1 là điểm liền kề trƣớc ta trong 𝑆𝑖;
If (𝑑𝑖,𝑚𝑖𝑛 ≤ 𝑡𝑎−1 𝑜𝑟 𝑊𝑖,𝑚𝑖𝑛 𝑑𝑖,𝑚𝑖𝑛 > 𝑑𝑖,𝑚𝑖𝑛) then
𝑓 = 𝑓𝑎𝑙𝑠𝑒;
Return (f)
End if
/* Kiểm tra khoảng bận rộn đã kết thúc hay chưa */
If 𝑊𝑖,𝑚𝑎𝑥 𝑎𝑖,𝑚𝑎𝑥 +1 ≤ 𝑎𝑖,𝑚𝑎𝑥 +1 𝑜𝑟 (𝑎𝑖,𝑚𝑎𝑥 +1 ≥ 𝑡𝑎) then Return (f) End if 𝑙𝑎𝑠𝑡_𝑎𝑐𝑡𝑖𝑣𝑒 = 𝑚𝑎𝑥 End if End foreach ℎ = last_active + 1; If 𝑑𝑖,ℎ ≤ 𝑡𝑚𝑎𝑥 𝑜𝑟 𝑊𝑖,ℎ 𝑑𝑖,ℎ > 𝑑𝑖,ℎ then 𝑓 = 𝑓𝑎𝑙𝑠𝑒;
Return(𝑓)
Thuật toán nhận đầu vào là các tham số của hệ 𝜏 và chỉ số 𝑖 của nhiệm vụ cần phân tích. Từ đó, ta xây dựng đƣợc tập các điểm lập lịch 𝑆 𝑖 theo định nghĩa 6. Tại mỗi điểm 𝑡𝑎 ∈ 𝑆 𝑖 − 0 − ∞ , trƣớc tiên ta xét xem có tác vụ nào hoàn thành trong khoảng (𝑡𝑎−1, 𝑡𝑎] hay không. Nếu có, ta tiếp tục kiểm tra tác vụ đầu tiên hoàn thành trong khoảng này có đáp ứng kỳ hạn hay không. Cuối cùng, ta kiểm tra xem khoảng bận rộn mức 𝑖 đã kết thúc hay chƣa. Nếu tác vụ đầu tiên hoàn thành trong khoảng không đáp ứng đƣợc kỳ hạn hoặc khoảng thời gian bận rộn đã kết thúc thì ta dừng thuật toán và kết luận khả năng lập lịch của nhiệm vụ. Ngƣợc lại, ta tiếp tục với các khoảng thời gian nguyên tố tiếp theo.
Hình 3.4. Tác vụ đầu tiên hoàn thành trong khoảng thời gian nguyên tố.
Hình 3.4 cho thấy, tại mỗi khoảng (𝑡𝑎−1, 𝑡𝑎], để kiểm tra tác vụ đầu tiên hoàn thành trong khoảng này có lập lịch đƣợc hay không ta chỉ cần dựa vào kỳ hạn 𝑑𝑖,𝑚𝑖𝑛 của nó. Trƣờng hợp 𝑑𝑖,𝑚𝑖𝑛 ≤ 𝑡𝑎−1, nghĩa là nếu trong khoảng (𝑡𝑎−1, 𝑡𝑎] tồn tại điểm cắt (điểm nhiệm vụ hoàn thành) thì điểm này sẽ nằm sau 𝑑𝑖,𝑚𝑖𝑛. Với trƣờng hợp 𝑊𝑖,𝑚𝑖𝑛 𝑑𝑖,𝑚𝑖𝑛 > 𝑑𝑖,𝑚𝑖𝑛, dễ dàng nhận thấy điểm cắt cũng nằm sau 𝑑𝑖,𝑚𝑖𝑛. Do đó, trong cả 2 trƣờng hợp, tác vụ đầu tiên đều không lập lịch đƣợc trong khoảng này.
Để kiểm tra khoảng bận rộn mức 𝑖 đã kết thúc trong khoảng (𝑡𝑎−1, 𝑡𝑎] hay chƣa, ta chỉ cần dựa vào thời điểm hoàn thành của tác vụ cuối cùng trong khoảng này. Trƣờng hợp 𝑟𝑖,𝑚𝑎𝑥 +1 ≥ 𝑡𝑎, nghĩa là nếu trong khoảng (𝑡𝑎−1, 𝑡𝑎] tồn tại điểm cắt thì
𝑡𝑎−1 𝑑𝑖,𝑚𝑖𝑛 𝑡𝑎 𝑦 = 𝑡 𝑊𝑖,𝑙 𝑡 𝐶𝑖 𝐶𝑖
điểm này sẽ nằm trƣớc 𝑟𝑖,𝑚𝑎𝑥 +1. Với trƣờng hợp 𝑊𝑖,𝑚𝑎𝑥 𝑟𝑖,𝑚𝑎𝑥 +1 ≤ 𝑟𝑖,𝑚𝑎𝑥 +1, dễ dàng nhận thấy điểm cắt cũng nằm trƣớc 𝑟𝑖,𝑚𝑎𝑥 +1. Do đó, trong cả 2 trƣờng hợp, điểm cắt nếu có đều nằm trƣớc 𝑟𝑖,𝑚𝑎𝑥 +1, tức là khoảng bận rộn mức 𝑖 đã kết thúc.
Hình 3.5. Tác vụ cuối cùng hoàn thành trong khoảng thời gian nguyên tố.
Sau khi kiểm tra hết các khoảng thời gian nguyên tố (𝑡𝑎−1, 𝑡𝑎] trong 𝑆 𝑖 với 𝑡𝑎 ∈ 𝑆 𝑖 − 0 − ∞ , nếu khoảng bận rộn mức 𝑖 chƣa kết thúc, ta tiếp túc xét khoảng thời gian nguyên tố cuối cùng trong 𝑆 𝑖. Với last_active là chỉ số của tác vụ cuối cùng hoàn thành trong khoảng thời gian nguyên tố trƣớc đó thì ℎ = 𝑙𝑎𝑠𝑡_𝑎𝑐𝑡𝑖𝑣𝑒 + 1 chính là chỉ số của tác vụ đầu tiên hoàn thành trong khoảng thời gian này. Do đó, ta chỉ cần kiểm tra xem ℎ có hoàn thành kỳ hạn trong khoảng này hay không để xác định nhiệm vụ 𝜏𝑖 có lập lịch đƣợc không.
Thuật toán trả về giá trị 𝑓 xác định khả năng lập lịch của nhiệm vụ 𝜏𝑖. Nếu 𝑓 = 𝑡𝑟𝑢𝑒 thì kết luận 𝜏𝑖 có khả năng lập lịch, ngƣợc lại 𝜏𝑖 không có khả năng lập lịch. Hệ nhiệm vụ 𝜏 gọi là có khả năng lập lịch khi mọi 𝜏𝑖 ∈ 𝜏 đều có khả năng lập lịch.