Lập lịch các tác vụ chia sẻ tài nguyên quan trọng làm nảy sinh một số vấn đề trong tất cả các ứng dụng khoa học máy tính:
• Các vấn đề đồng bộ hoá giữa các tác vụ và cụ thể là tình huống đảo ngược độ ưu tiên khi chúng chia sẻ các tài nguyên loại trừ lẫn nhau;
• Các vấn đề deadlock và bị khoá dây chuyền
Trong các hệ thời gian thực, một phương pháp đơn giản để giải quyết những vấn đề này là giữ chỗ (reservation) và giữ trước (pre-hold) tài nguyên khi bắt đầu thực thi tác vụ. Tuy nhiên, một kỹ thuật như vậy gây ra tình trạng hệ số sử dụng tài nguyên thấp, vì thế mà một số giao thức truy xuất tài nguyên đã được thiết kế để tránh những yếu điểm như vậy và cũng để giới hạn thời gian phản hồi tối đa của các tác vụ.
Một số giao thức khác nhau đã được phát triển để tránh sự đảo ngược độ ưu tiên trong ngữ cảnh lập lịch RM hay EDF. Những giao thức này cho phép định cận trên của thời gian bị khoá khi xác định truy xuất tài nguyên quan trọng cho mỗi tác vụ τi. Cận này gọi là Bi. Khoảng thời gian bị khoá tối đa này được tích hợp trong các kiểm tra khả năng lập lịch được của các thuật toán lập lịch cổ điển/ cơ bản (classical) như RM hay EDF. Sự tích hợp này có thể đạt được dễ dàng bằng cách xem rằng một tác vụ τi có thời gian thực thi bằng Ci + Bi. Một số giao thức truy xuất tài nguyên cũng tránh hiện tượng deadlock.
Giao thức thừa kế độ ưu tiên (priority inheritance protocol
Ý tưởng chính của giao thức kế thừa độ ưu tiên là thay đổi một cách động độ ưu tiên của một số tác vụ. Vậy thì một tác vụ τi đang sử dụng một tài nguyên quan trọng trong một miền găng, có được độ ưu tiên của bất kỳ tác vụ τj đợi tài nguyên này nếu độ ưu tiên của tác vụ τj cao hơn tác vụ τi. Như vậy, tác vụ τi được lập lịch ở một mức cao hơn mức ưu tiên ban đầu của nó. Ngữ cảnh mới này dẫn tới việc giải phóng tài nguyên quan trọng sớm hơn và giảm thiểu thời gian đợi của tác vụ τj có độ ưu tiên cao hơn. Giao thức kế thừa độ ưu tiên không tránh deadlock, mà muốn tránh deadlock phải sử dụng các kỹ thuật đề cập ở trên. tuy nhiên, giao thức
kế thừa độ ưu tiên phải được sử udngj cho mã của tác vụ một cách chính xác trong các miền găng lồng nhau. Trong trường hợp này, giao thức được áp dụng theo cách đệ qui (recursive). Giao thức kế thừa độ ưu tiên đã được cài đặt trong hệ điều hành thời gian thực DUNE-IX.
Hình 3.10 minh hoạ một ví dụ của giao thức này với một tập tác vụ tạo nên từ 3 tác vụ {τ1, τ2, τ3}có các độ ưu tiên giảm dần và 2 tài nguyên quan trọng {R1, R2}. Tác vụ τ1 sử dụng tài nguyên R1, tác vụ τ2 sử dụng tài nguyên R2 và tác vụ
τ3 sử dụng cả 2 tài nguyên R1 và R2. Tác vụ τ3 bắt đầu chạy đầu tiên và lần lượt lấy 2 tài nguyên R1 và R2. Sau đó tác vụ τ2 thức và tước quyền của tác vụ τ3 trong một miền găng lồng. Khi tác vụ τ2 yêu cầu tài nguyên R2, nó bị khoá bởi tác vụ τ3 và khi đó τ3 lấy đi độ ưu tiên của τ2. Chúng ta nói rằng táv ụ τ3 kế thừa độ ưu tiên của tác vụ τ2. Cũng tương tự như vậy, tác vụ τ2 thức và tước quyền tác vụ τ3 trong miền găng của nó. Khi tác vụ τ1 yêu cầu tài nguyên R1, nó bị khoá bởi τ3, khi đó tác vụ τ3 lại kế thừa độ ưu tiên của tác vụ τ1. Vậy nên tác vụ τ3 tiếp tục thực thi với độ ưu tiên cao nhất của tập tác vụ. Khi τ3 giải phóng các tài nguyên R2 và sau đó là R1, nó trở lại độ ưu tiên ban đầu. Ngay lập tức, tác vụ τ1 có độ ưu tiên cao hơn, đợi một tài nguyên, tước quyền của tác vụ τ3 và giành bộ xử lý. Phần cuối của chuỗi thực thi tuân theo các luật cơ bản/cổ điển của lập lịch
Khi sử dụng giao thức kế thừa độ ưu tiên, có thể đánh giá cận trên của thời gian bị khoá của mỗi tác vụ. Với giao thức này, một tác vụ τi có thể bị khoá nhiều nhất bởi n miền găng của các tác vụ có độ ưu tiên thấp hơn hay bởi m miền găng tương ứng với các tài nguyên được chia sẻ với các tác vụ độ ưu tiên thấp hơn. Nghĩa là:
Bi ≤ inf(n, m).CRmax (3.12)
Như chúng ta có thể thấy ở hình 3.10, tác vụ τ2 bị hoãn nhiều nhất bởi miền găng dài nhất của tác vụ τ3 (chú ý rằng các miền găng được sử dụng bởi một tác vụ phải được lồng nhau chính xác. Như trong ví dụ, R một được giải phóng sau R2).
Giao thức trần độ ưu tiên
Ý tưởng cơ bản của giao thức này là mở rộng giao thức trên để tránh các deadlock và bị khoá dây chuyền bằng cách tránh cho các tác vụ đi vào một vùng quan trọng dẫn tới bị khoá nó. Để làm vậy, mỗi tài nguyên được gán cho một độ ưu tiên, được gọi là trần độ ưu tiên (priority ceiling), bằng với độ ưu tiên của tác vụ có độ ưu tiên cao nhất có thể sử dụng nó. Trần độ ưu tiên thì giống như ngưỡng (threadhold). Cũng giống như trong giao thức kế thừa độ ưu tiên, một tác vụ τi d dang sử dụng phần tài nguyên quan trọng trong một miền găng giành độ ưu tiên của bất kỳ tác vụ τj đang đợi tài nguyên này nếu như tác vụ τj có độ ưu tiên cao hơn độ ưu tiên của τi. Như vậy, tác vụ τi được lập lịch với độ ưu tiên cao hơn độ ưu tiên ban đầu của nó và thừoi gian đợi của tác vụ có độ ưu tiên cao hơn τj được giảm thiểu. Hơn nữa, để tránh các deadlock, khi một tác vụ yêu cầu một tài nguyên, tài nguyên được cấp phát nếu và chỉ nếu nó đang tự do và nếu độ tưu tiên của tác vụ này lớn hơn tuyệt đối trần độ ưu tiên cao nhất của các tài nguyên được các tác vụ khác sử dụng. Luật này giúp khoá các tác vụ sớm có thể gây ra deadlock và đảm bảo các tác vụ có độ ưu tiên cao hơn trong tương lai có được tài nguyên của nó.
Hình 3.11 minh hoạt một ví dụ của giao thức này cho một tập tác vụ tạo ênn từ ba tác vụ {τ1, τ2, τ3} với độ ưu tiên giảm dần và 2 tài nguyên quan trọng là {R1, R2}. Tác vụ τ1 sử dụng tài nguyên R1 và tác vụ τ2 sử dụng tài nguyên R2, tác vụ
τ3 sử dụng cả hai tài nguyên R1 và R2.
Tác vụ τ3 bắt đầu chạy đầu tiên và giữ tài nguyên R1 đang tự do. Trần độ ưu tiên của tài nguyên R1 là độ ưu tiên của τ1 và trần độ ưu tiên của R2 là độ ưu tiên của τ2. Sau đó tác vụ τ2 tỉnh và tước quyền cảu τ3 với độ ưu tiên của nó cao hơn độ ưu tiên của tác vụ hiện thời τ3. Khi tác vụ τ2 yêu cầu tài nguyên R2 nó bị khoá gởi giao thức vì độ ưu tiên của nó không lớn hơn tuyệt dối trần độ ưu tiên của tài nguyên bị giữ R1. Vì tác vụ τ2 đợi, tác vụ τ3 kế thừa độ ưu tiên của tác vụ τ2 và quay trở lại thực thi. Tương tự như vậy, tác vụ τ1 thức và tước quyền tác vụ τ3 với độ ưu tiên của nó lớn hơn độ ưu tiên của tác vụ τ3. Khi tác vụ τ1 yêu cầu tài nguyên R1, nó bị khoá bởi giao thức vì độ ưu tiên của nó không lớn hơn thực sự trần độ ưu tiên của tài nguyên đang sử dụng R1. Và vì tác vụ τ1 đang đợi, tác vụ τ3 kế thừa độ ưu tiên của τ1 và quay trở lại thực thi của nó. Khi tác vụ τ3 kết thúc (ra khỏi) miền găng của cả 2 tài nguyên R2 và sau đó là R1, nó quay trở về độ ưu tiên ban đầu và ngay lập tức bị tước quyền bởi tác vụ đang đợi có độ ưu tiên cao nhất, nghĩa là tác vụ τ1. Phần cuối của chuỗi thực thi tuân thủ theo các luật lập lịch cổ
thuật toán lập lịch có độ ưu tiên thay đổi như EDF. Trong bối cảnh đó, trần độ ưut iên được đánh giá ở mỗi sửa đổi của danh sách tác vụ sẵn sàng xuất hiệt khi bắt đầu kích hoạt hay thực thi của các tác vụ. Giao thức này đã được cài đặt bởi hệ điều hành thời gian thực Mach của đại học Carnegie Mellon.
Cần chú ý rằng giao thức này cần biết trước tất cả các độ ưu tiên các tác vụ và tất cả các tài nguyên được sử dụng bởi mỗi tác vụ để gán các trần độ ưu tiên. Hơn thế, chúng ta có thẻ phác hoạ các thuộc tính của giao thức này là đúng trong bối cảnh sử dụng đơn xử lý. Khi giao thức trần độ ưu tiên được sử dụng, có thể đánh giá cận trên của thời gian bị khoá của mỗi tác vụ. Với giao thức này, một tác vụ τi có thể bị khoá nhiều nhất bởi miền găng dài nhất của tác vụ có độ ưu tiên thấp hơn đagn sử udngj tài nguyên có trần độ ưu tiên nhỏ hơn hay bằng dộ ưu tiên của tác vụ τi.
Giao thức trần độ ưu tiên cũng được gọi là giao thức trần độ ưu tiên ban đầu. Một giao thức trần độ ưu tiên hơi khác một chút được gọi là giao thức trần độ ưu tiên trung sử dụng một cách tiếp cận đơn giản hơn và nâng độ ưu tiên của tiến trình ngay khi nó khoá một tài nguyên chứ không chỉ khoá chi nó thực sự khoá một tiến trình có độ ưu tiên cao hơn. Hành vi trong trường hợp xấu nhất của hai giao thức này là như nhau.
Chính sách tài nguyên ngăn xếp (Stack Resource policy)
Chính sách giao thức tài nguyên ngăn xếp mở rộng giao thức trước về 2 mặt: Nó cho phép sử dụng các tài nguyên nhiều đơn vị và có thể được áp dụng với một thuật toán có độ ưu tiên biến thiên như EDF (Baker, 1990). Ngoài độ ưu tiên truyền thống, mỗi tác vụ được gán cho một tham số mới π, gọi là mức độ độc quyền (level of preemtion), mức độ này liên quan tới thời gian giành cho việc thực thi của tác vụ (nghĩa là π tỷ lệ nghịc với thời hạn tương đối D). Mức độ độc quyền được thiết lập sao cho một tác vụ τi không thể tước quyền một tác vụ τj trừ khi π(τi) > π(τj). Mức độ tước quyền hiện tại của hệ thống được xác định nhờ một hàm của truy xuất tài nguyên. Như vậy thì một tác vụ không thể ở trạng thái được chọn nếu mức độ độc quyền của nó thấp hơn mức độ độc quyền toàn cục. Ứng dụng của luật này cho thấy sự khác biệt chính giữa giao thức trần độ ưu tiên và chính sách tài nguyên
ngăn xếp là thời điểm tác vụ bị khóa (blocked). Với giao thức trần độ ưu tiên, một tác vụ bị khóa ngay khi nó muốn sử dụng tài nguyên, còn với chính sách tài nguyên ngăn xếp thì một tác vụ bị khóa ngay khi nó muốn dành bộ xử lý. Giao thức đầy đủ và chính xác được trình bày trong sách của Buttazzo và Stankovic.