Khi một bộ vi xử lý phải thực hiện một tập các tác vụ tƣơng tranh (đồng thời), bộ vi xử lý phải đƣợc chỉ định tới các tác vụ khác nhau theo một chuẩn đã đƣợc định sẵn trƣớc đó, gọi là chiến lƣợc lập lịch (scheduling policy). Ngày nay, có một loạt các thuật toán đƣợc đề xuất cho lập lịch của các hệ thống thời gian thực. Một lập lịch là một sự phân công của các tác vụ cho bộ vi xử lý, do đó mỗi tác vụ đƣợc thực hiện cho đến khi đƣợc hoàn thành.
Các bộ điều phối (dispatcher) phân bổ bộ vi xử lý tới các tác vụ đã lựa chọn bởi chiến lƣợc lập lịch (scheduling policy). Kết quả là, một tác vụ khả năng có thể đƣợc thực hiện bởi bộ vi xử lý (active task), có thể là trong lúc đang chạy (running task) hoặc là đợi cho đến khi hàng đợi sẵn sàng nếu nhƣ tác vụ khác đang thực thi. Các chuyển mạch ngữ cảnh cho phép các running task trao đổi trên bộ vi xử lý.
18 r(taski,k) kí hiệu thời gian sớm nhất có thể bắt đầu của thời điểm kth
của tác vụ taski, nghĩa là thời điểm sớm nhất tác vụ sẵn sàng đƣợc thực hiện.
s(taski,k) kí hiệu thời gian mà tác vụ bắt đầu đƣợc thực thi
f(taski,k) kí hiệu của thời điểm mà tác vụ hoàn thành việc thực thi của chúng.
taski,k
Ti
taski time
Hình 2-3. Mô tả các thời điểm của tác vụ
Nhìn chung, để xác định đƣợc một vấn đề lập lịch chúng ta cần phải xác định đƣợc ba điều sau: một tập các tác vụ, một tập các bộ vi xử lý, một tập các loại tài nguyên. Hơn nữa, các mối quan hệ ƣu tiên giữa các tác vụ có thể đƣợc xác định thông qua một đồ thị có hƣớng không tuần hoàn, và các ràng buộc định thời có thể đƣợc liên kết với mỗi tác vụ. Trong bối cảnh này, lập lịch có nghĩa là chỉ định các bộ vi xử lý và các tài nguyên tới các tác vụ để hoàn thành tất cả các tác vụ dƣới các ràng buộc đã áp đặt trƣớc. Chú ý rằng, sự phức tạp của các thuật toán lập lịch là rất phù hợp khi các quyết định lập lịch phải đƣợc thi trên mạng, trong khi thực hiện hiện tác vụ.
Để giảm sự phức tạp của việc lập lịch có tính khả thi, ta có thể đơn giản hóa kiến trúc máy tính, hoặc có thể làm đơn giản hóa các giả định trong các tác vụ (ví dụ nhƣ loại bỏ bớt các ràng buộc ƣu tiên). Một lập lịch đƣợc cho là khả thi nếu tất cả các tác vụ có thể đƣợc hoàn thành theo nhƣ các ràng buộc đã xác định trƣớc. Để kiểm tra tính khả thi của lập lịch trƣớc khi các tác vụ đƣợc thực thi, hệ thống phải lên kế hoạch xem xét hoạt động của nó có thể xảy ra ở tƣơng lai, giả định các trƣờng hợp xấu nhất có thể xảy đến. Nhớ lại các ứng dụng thời gian thực cứng yêu cầu các hoạt động có thể dự đoán đƣợc, tính khả thi của lập lịch nên đƣợc bảo đảm trƣớc khi các tác vụ đƣợc thực thi. Việc kiểm tra tính khả thi có thể đƣợc dựa trên phƣơng pháp sử dụng bộ vi xử lý (xem xét từng phần nhỏ thời gian bộ vi xử lý tiêu tốn trong thực thi tác vụ) hoặc là trên các kĩ thuật phân tích thời gian phản hồi (sử
19 dụng các công thức lặp đi lặp lại để tính toán thời gian kết thúc của trƣờng hợp xấu nhất của một tác vụ bất kì).
Ví dụ, một điều kiện cần thiết để có thể có đƣợc lập lịch sử dụng phƣơng pháp tiếp cận sử dụng bộ vi xử lý trong một bộ vi xử lý duy nhất đó là:
1 1 n i i i C T (2.1)
Ci và Ti là thời gian thực thi của trƣờng hợp xấu nhất của tác vụ taski và chu kì. Các điều kiện đầy đủ cho các thuật toán lập lịch nhƣ RM và EDF:
1 n i i i C U T
với U = 1 cho EDF và 1 /
( 2 n 1)
U n cho RM (2.2) Trong phần sau, chúng ta sẽ đƣa ra một mô tả ngắn của các loại thuật toán lập lịch chính (phân loại này đƣợc dựa trên các giả định về hệ thống hay các tác vụ). Thay vì mô tả một cách đầy đủ, tôi chỉ lấy những tính chất và khái niệm quan trọng đƣợc quan tâm đặc biệt để dùng cho đồ án này.
Lập lịch offline và online
Trong sự đa dạng về các phƣơng pháp tiếp cận lập lịch thời gian thực đã đƣợc trình bày, các thuật toán lập lịch thời gian thực rơi vào hai loại phụ thuộc vào thời gianvcác quyết định lập lịch, đó là: lập lịch online và offline.
Trong lập lịch offline, ngƣời lập lịch phải biết đầy đủ về tập các tác vụ và các ràng buộc của nó, nhƣ là deadline, thời gian tính toán, các ràng buộc ƣu tiên. Việc lập lịch đƣợc dựa trên các thông số cố định, đƣợc chỉ định tới các tác vụ trƣớc khi nó đƣợc kích hoạt. Toàn bộ lập lịch offline đƣợc lƣu trữ trong một bảng (chứa tất cả các tác vụ đã sắp xếp theo đúng thứ tự) và đƣợc gửi đi sau trong khi hệ thống đang chạy. Những ƣu điểm chính của lập lịch offline là nó cung cấp các quyết định, nhƣ tất cả thời gian thực thi tác vụ đƣợc quyết định và đƣợc biết trƣớc. Ngoài ra, hao phí thời gian chạy không phụ thuộc và sự phức tạp của thuật toán. Điều này cho phép các thuật toán rất tinh vi đƣợc sử dụng để giải quyết các vấn đề phức tạp (ví dụ nhƣ các ràng buộc điều khiển). Tuy nhiên, nhƣ tất cả các hoạt động phải đƣợc lên kế
20 hoạch trƣớc khi khởi động, sự linh hoạt của runtime sẽ kém đi. Lập lịch offline cũng còn đƣợc gọi là lập lịch tĩnh hay lập lịch pre-runtime.
Ngƣợc lại, các thuật toán lập lịch online đƣa ra các quyết định lập lịch trong thời gian runtime. Ngƣời lập lịch online sẽ linh hoạt và có khả năng thích ứng, nhƣng họ có thể phải chịu những hao phí đáng kể bởi quá trình xử lý của runtime. Bên cạnh đó, các thuật toán lập lịch online không cần phải có sự hiểu biết đầy đủ về các tác vụ hay là các ràng buộc định thời của nó. Ví dụ, với một sự kiện ở bên ngoài đến trong lúc runtime của hệ thống, chúng ta phải làm việc với nó cho đến khi có sự kiện mới tới. Trong các thuật toán lập lịch online, các quyết định lập lịch online đƣợc đƣa ra mỗi khi có một tác vụ mới đi vào hệ thống, khi một tác vụ sẵn sàng hay là khi một tác vụ chấm dứt. Mặc dù, lập lịch online có thể cung cấp sự linh hoạt hơn hơn, nhƣng khả năng dự đoán của nó bị giới hạn, nhƣ là các thời gian bắt đầu và hoàn thành phụ thuộc vào các sự kiện run-time. Cần chú ý rằng, tùy thuộc vào các thuật toán, sự đảm bảo phải đƣợc thực hiện online (ví dụ nhƣ khi một tác vụ mới đi vào hệ thống). Trong trƣờng hợp này, bởi vì các thuật toán đảm bảo đƣợc dựa trên các giả định cho trƣờng hợp xấu nhất, một tác vụ không cần thiết có thể bị từ chối. Mặt khác, lợi ích của việc có một cơ chế đảm bảo online là một trạng thái quá tải online có thể đƣợc phát hiện trƣớc, dó đó có thể tránh đƣợc những ảnh hƣởng tiêu cực đến hệ thống. Lập lịch online thƣờng đƣợc gọi là lập lịch runtime hay là lập lịch động.
Đây cũng là phƣơng pháp tiếp cận lập lịch rơi vào cả hai loại, ví dụ nhƣ kết hợp lập lịch online và offline lợi dụng những quyết định đƣợc cho bởi lập lịch offline và sự linh hoạt của lập lịch online.
Để minh họa cho quyết định cho bởi các chiến lƣợc lập lịch online và offline, chúng ta xem xét tập tác vụ sau (Bảng 2-1) với hai tác vụ định kì, Ti là chu kì tác vụ,
Ci là WCET. Chúng ta giả sử deadline bằng với một chu kì.
Ti Ci
task2 5 2
task1 4 1
21 Áp dụng một chiến lƣợc lập lịch offline, chúng ta có thể xây dựng, theo các tác vụ ràng buộc định thời, lịch trình offline khả thi thông qua các chu kì tác vụ LCM (Least Common Multiple), đƣợc minh họa trong Hình 2-4 (các ô đánh dấu đậm các chu kì tác vụ và các ô mờ đánh dấu thời gian thực thi của trƣờng hợp xấu nhất).
Hình 2-4. Lịch trình offline
Cho lịch trình offline này, trong thời gian chạy, các bộ điều phối sẽ thực thi từng nấc tác vụ (taski,k) theo nhƣ thứ tự đƣợc cung cấp bởi bảng đã xây dựng (Bảng 2.2) cho mỗi LCM.
Time 0 2 4 5 8 10 12 15 17
Task instance task2,1 task1,1 task1,2 task2,2 task1,3 task2,3 task1,4 task2,4 task1,5
Bảng 2-2. Bảng điều phối
Vì vậy, nhìn vào lịch trình ở Hình 2-4 và Bảng điều phối 2-2, tại thời gian chạy, thời gian bắt đầu thực thi của mỗi nấc sẽ trùng với các thời gian bắt đầu của các nấc offline. Tuy nhiên, nhìn vào thời gian hoàn thành, vì lập lịch offline đƣợc dựa trên thời gian thực thi của trƣờng hợp xấu nhất, thời gian hoàn thành của thời gian chạy có thể khác với thời gian hoàn thành offline, bởi trong thời gian chạy mỗi nấc tác vụ có thể thực thi ít hơn giả định ở trong trƣờng hợp xấu nhất (nhƣ minh họa trong Hình 2-5 cho một trong các thực thi LCM, ô mờ đánh dấu thời gian thực thi thực tế).
Hình 2-5.Thời gian chạy thực thi của lịch trình offline
Chú ý cho ví dụ ở nấc đầu tiên, thứ ba và thứ thứ tƣ của tác vụ task2 (tƣơng ứng bắt đầu ở các thời gian 0, 10, và 15 Hình 2-5) thực thi ít hơn WCET của nó. Thay vì thực thi cho hai đơn vị thời gian (nhƣ giả định bởi tình huống xấu nhất), nấc 1 và 3 thực thi 1 đơn vị thời gian trong khi nấc thứ 4 thực thi 1,5 đơn vị thời
22 gian. Hiện tƣợng xảy ra tƣơng tự với thời gian kết thúc trong các nấc của tác vụ task1 (Hình 2-5). Do đó, thời gian bắt đầu của mỗi nấc của tác vụ đƣợc biết trƣớc khi thời gian chạy, thời gian kết thúc thực tế, nếu lịch trình offline đƣợc xây dựng trong khuôn khổ các điều kiện của các tác vụ WCET có thể sẽ không trùng với thời gian kết thúc offline.
Tuy nhiên, nếu những cái đặc trƣng cho mỗi tác vụ (Bảng 2-1) là thời gian thực thi chính xác (đó là một giả định hợp lý cho hầu hết các hệ thống điều khiển thời gian thực) thay vì thời gian thực thi cho trƣờng hợp xấu nhất, thời gian hoàn thành runtime cũng sẽ trùng với thời gian hoàn thành offline.
Tuy nhiên, không có cái nào trong số các thuộc tính này (thời gian hoàn thành và bắt đầu đƣợc biết) áp dụng cho lập lịch trình online. Ví dụ, chúng ta áp dụng EDF cho tập tác vụ xác định trong Bảng 2-1. Nhớ lại rằng EDF là một chiến lƣợc lập lịch online, ở đây các nấc tác vụ đƣợc phân phối ở trong thời gian chạy theo nhƣ deadline trƣớc đó.
Tập các tác vụ tuân theo biểu thức sau:
2 1 2 1 0 .6 5 1 5 4 i i i C U T (2.3)
Một ví dụ về lịch trình có đƣợc thông qua các chu kì LCM đƣợc minh họa trong Hình 2-6, các ô đậm đánh dấu các chu kì tác vụ còn các ô nhạt đánh dấu WCET.
Hình 2-6. Ví dụ về lịch trình tạo bởi EDF
Trong trƣờng hợp này, mỗi khi một nấc tác vụ kết thúc việc thực thi của nó (có thể thực thi trong thời gian thực thi xấu nhất hoặc ít hơn), ngƣời lập lịch chỉ định bộ vi xử lý tới nấc tác vụ khác. Kết quả là, trƣớc thời gian chạy, thời gian hoàn thành và bắt đầu chính xác mỗi nấc tác vụ không đƣợc biết.
23 Vấn đề trƣớc đó (biết đƣợc thời gian hoàn thành và bắt đầu trƣớc thời gian chạy) tăng lên khi chiến lƣợc lập lịch online có các quyết định lập lịch khi xuất hiện sự kiện mới của các tác vụ không theo chu kì hoặc lẻ tẻ.
Ƣu tiên và không đƣợc ƣu tiên (Pre-emptive vs. non pre-emptive)
Nhìn vào cách xử lý run-time của các chiến lƣợc lập lịch trình khác nhau, hai chế độ có thể đƣợc phân biệt là: lập lịch pre-emptive và non pre-emptive. Với lập lịch trình pre-emptive, tác vụ đang chạy có thể đƣợc ngắt bất cứ lúc nào bởi một tác vụ khác, theo một số các chiến lƣợc lập lịch đƣợc định trƣớc. Trong lập lịch non pre-emptive, một tác vụ một khi đã bắt đầu, đƣợc thực thi bởi một bộ vi xử lý cho đến khi hoàn thành.
Khi các tác vụ ứng dụng có các giới hạn mức độ quan trọng khác nhau, nghĩa là, sự ƣu tiên, quyền đƣợc thực hiện trƣớc cho phép chúng ta dự đoán trƣớc sự thực thi của hầu hết các tác vụ quan trọng, tạo ra những lịch trình hiệu quả hơn trong các điều kiện của đáp ứng hệ thống. Tuy nhiên, điều này cũng có nghĩa là khả năng dự đoán về mặt thời gian cho sự thực thi tác vụ giảm xuống.
Để minh họa sự sụt giảm của các quyết định, chúng ta xem xét lại Bảng 2-1 đã trình bày trƣớc đó. Ví dụ chúng ta áp dụng cho cách tiếp cận lập lịch của các tác vụ RM, đây là một chiến lƣợc lập lịch pre-emptive dựa trên kế hoạch tác vụ ƣu tiên: cung cấp cho các tác vụ một mức độ ƣu tiên dựa trên chu kỳ thời gian của nó, chu kỳ nhỏ hơn thì ƣu tiên cao hơn; có nghĩa là Ti< Tj, Pi> Pj trong đó Ti và Pi biểu thị chu kỳ tác vụ và ƣu tiên của mỗi tác vụ taski. Bảng 2-3 cũng đƣa ra sự phân công ƣu tiên cho tập các tác vụ chúng ta đang xem xét (nhớ lại rằng deadline của các tác vụ đƣợc giả định là bằng với chu kì tác vụ).
Ti Ci Pi
task2 5 2 2
task1 4 1 1
Bảng 2-3. Phân công ƣu tiên cho RM
Tập các tác vụ tuân theo biểu thức sau nhƣ chi tiết trong bảng 2.4:
2 1 2 1 2 1 0 .6 5 2 ( 2 1) 0 .8 3 5 4 i i i C U T (2.4)
24 Một ví dụ về lịch trình mà chúng ta có đƣợc thông qua các chu kì tác vụ LCM đƣợc thể hiện trong Hình 2-7, các ô đậm đánh dấu chu kỳ tác vụ, các ô nhạt đánh dấu thời gian thực thi xấu nhất.
Hình 2-7. Ví dụ về lịch trình tạo bởi RM
Nhƣ có thể nhìn thấy trong Hình 2-7, nấc thứ 4 của tác vụ task2 đƣợc ƣu tiên ở time thứ 16 bởi nấc thứ 5 của tác vụ task1. Sự gián đoạn này bổ sung thêm sự thay đổi trong thời gian hoàn thành của nấc thứ 4 của tác vụ task2.
Time triggered so với event triggered
Có hai nguyên tắc khác nhau cơ bản xác định sự kích hoạt của các tác vụ trong một hệ thống thời gian thực, đấy là Event-Triggered và Time-Triggered. Trong các hệ thống Event-Triggered, tất cả các hoạt động đƣợc kích hoạt trong phản ứng với các sự kiện có liên quan bên ngoài vào hệ thống. Khi một sự kiện quan trọng ở bên ngoài xảy ra, nó đƣợc phát hiện bởi các cảm biến, sau đó các thiết bị kèm theo (bộ vi xử lý) lấy đƣợc một tín hiệu ngắt. Đối với các hệ thống thời gian thực mềm, với rất nhiều tính toán cho dự phòng, cách tiếp cận này là đơn giản và hoạt động tốt. Vấn đề chính với các hệ thống Event-Triggered là chúng có thể không hoạt động trong điều kiện tải lớn nghĩa là khi một vài sự kiện đang xảy ra cùng một lúc. Các thiết kế Event-Triggered cho phản hồi nhanh hơn ở điều kiện tải thấp nhƣng hao phí và khả năng thất bại lớn ở điều kiện tải cao. Cách tiếp cận này phù hợp hơn với các môi trƣờng động nơi các hoạt động động có thể đến bất cứ lúc nào.
Trong một hệ thống Time-Triggered, tất cả các hoạt động tại một số điểm trong thời gian đó đƣợc biết là một ƣu tiên. Theo đó, tất cả các node trong các hệ thống Time-Triggered đều có quan niệm chung về thời gian, dựa trên các clock