Chương 2 Kiến trúc của hệ điều hành nhúng
2.7 Nhân hệ điều hành
Lập lịch (scheduler), cũng còn được gọi là điều vận (dispatcher), là một phần của nhân chịu trách nhiệm xác định tác vụ nào sẽ chạy tiếp theo. Hầu hết các nhân thời gian thực đều dựa trên quyền ưu tiên. Mỗi tác vụ được gán một quyền ưu tiên dựa trên mức độ quan trọng của nó. Quyền của tác vụ là do ứng dụng xác định. Trong một nhân dựa trên quyền ưu tiên, việc điều khiển CPU luôn được trao cho tác vụ ở trạng thái READY có quyền ưu tiên cao nhất. Tuy nhiên, khi tác vụ có quyền ưu tiên cao nhất chiếm được CPU, được xác định bởi loại kernel được sử dụng. Có hai loại nhân dựa trên quyền ưu tiên là nhân có hỗ trợ đoạt quyền ưu tiên và nhân không hỗ trợ đoạt quyền ưu tiên.
2.7.1 Nhân không hỗ trợ đoạt quyền ưu tiên
Các nhân không hỗ trợ đoạt quyền ưu tiên yêu cầu mỗi tác vụ làm một việc gì đó để từ bỏ dứt khoát việc điều khiển CPU. Để duy trì sự đánh lừa về sự trùng lặp về thời gian, thì quá trình này phải được làm một cách tuần tự. Việc lập lịch không đoạt quyền ưu tiên cũng còn được gọi là sự phối hợp nhiều tác vụ (cooperative multitasking), các tác vụ phối hợp với nhau để chia sẻ CPU. Các sự kiện không đồng bộ vẫn được xử lý bởi các ISR. Một ISR có thể tạo ra một tác vụ có quyền cao hơn ở trạng thái READY và sẵn sàng để chạy, nhưng ISR luôn trả về cho tác vụ bị ngắt. Một tác vụ mới có quyền ưu tiên cao hơn sẽ có được quyền điều khiển CPU chỉ khi tác vụ hiện tại từ bỏ quyền điều khiển CPU.
Đáp ứng mức tác vụ sử dụng nhân không hỗ trợ đoạt quyền ưu tiên có thể thấp hơn rất nhiều so với mức nền/đáy hệ thống bởi vì đáp ứng mức tác vụ được đo bằng thời gian của tác vụ dài nhất.
Một ưu điểm nữa của nhân không hỗ trợ đoạt quyền ưu tiên ít cần thiết phải bảo vệ dữ liệu dùng chung thông qua việc sử dụng các semaphore. Mỗi tác vụ chiếm CPU thành của riêng nó, và không phải sợ rằng tác vụ sẽ bị đoạt quyền. Điều này không phải là một quy tắc tuyệt đối, và trong một vài trường hợp, các semaphore cũng nên được sử dụng. các thiết bị chia sẻ I/O cũng có thể yêu cầu việc sử dụng semaphore, ví dụ, một tác vụ cũng có thể cần thiết phải truy cập tới một máy in.
Hình 2-6 Hoạt động của nhân không hỗ trợ đoạt quyền ưu tiên
Hình vẽ 2-5 sau minh hoạ hoạt động của nhân không hỗ trợ đoạt quyền ưu tiên. Một tác vụ đang được thực hiện[F2,4(1)], nhưng nhận được ngắt. Nếu các ngắt được cho phép, thì các vector CPU chuyển tới ISR [L2.4(2)]. Ngắt xử lý sự kiện [F2.4(3)] và tạo một tác vụ ở trạng thái READY có quyền ưu tiên cao hơn. Khi kết thúc ngắt, thì lệnh RFI (Return From Interrupt) được thực hiện, và việc điều khiển CPU chuyển về cho tác vụ bị ngắt [F2.4(4)]. Tác vụ bị ngắt sẽ khôi phục và bắt đầu thực hiện tại lệnh tiếp theo của lệnh bị ngắt [F2.4(5)]. Khi tác vụ hoàn thành, nó gọi một service cung cấp bở nhân để giải phóng CPU cho tác vụ khác [F2.4(6)]. Tác vụ có quyền ưu tiên cao hơn sẽ được thực hiện để xử lý sự kiện gây ra bởi ngắt ISR.
Bất lợi quan trọng của nhân không hỗ trợ đoạt quyền ưu tiên là khả năng đáp ứng.
Một tác vụ có quyền ưu tiên cao hơn mà đang ở trạng thái READY có thể phải đợi một thời gian dài để chạy bởi vì tác vụ hiện tại phải giải phóng CPU khi nó sẵn sàng làm như vậy. Thời gian đáp ứng của mức tác vụ trong nhân không hỗ trợ đoạt quyền ưu tiên là không xác định, ta không thể biết khi nào thì tác vụ có quyền ưu tiên cao hơn chiếm được quyền điều khiển CPU. Nó do ứng dụng quyết định giải phóng điều khiển CPU.
Tổng kết lại, một nhân không hỗ trợ đoạt quyền ưu tiên cho phép mỗi tác vụ chạy cho đến khi nó tự nguyện từ bỏ quyền điều khiển CPU. Ngắt đoạt quyền ưu tiên của tác vụ, khi hoàn thành ngắt ISR, ISR trả CPU lại cho tác vụ bị chiếm. Tác vụ đáp ứng tốt hơn so với hệ foreground/background nhưng nó vẫn không xác định. Rất ít nhân thương mại là loại không hỗ trợ đoạt quyền ưu tiên.
2.7.2 Nhân hỗ trợ đoạt quyền ưu tiên
Nhân hỗ trợ đoạt quyền ưu tiên được sử dụng khi đáp ứng hệ thống là quan trọng.
Tác vụ có quyền ưu tiên cao nhất ở trạng thái READY luôn luôn được sử dụng CPU. Khi một tác vụ tạo ra một tác vụ khác có quyền ưu tiên cao hơn ở trạng thái READY, thì tác vụ hiện tại bị ngưng và tác vụ có quyền cao hơn được trao quyền điều khiển CPU ngay lập tức. Nếu một ngắt tạo ra một tác vụ có quyền cao hơn ở trạng thái READY, khi ngắt kết thúc, tác vụ bị ngắt bị ngưng và tác vụ có quyền ưu tiên cao hơn sẽ được chạy. Hình vẽ 2-6 miêu tả điều này.
Với nhân có đoạt quyền ưu tiên, việc thực hiện các tác vụ có quyền ưu tiên cao nhất là xác định, có thể xác định khi nào nó đoạt quyền điều khiển CPU. Do đó, đáp ứng thời gian mức tác vụ được tối thiểu hoá do sử dụng nhân có đoạt quyền ưu tiên.
Tóm lại, nhân có đoạt quyền ưu tiên luôn thực hiện tác vụ có quyền ưu tiên cao nhất ở trạng thái READY. Ngắt đoạt quyền của tác vụ. Khi hoàn thành ISR, nhân chuyển quyền chiếm CPU cho tác vụ ở trạng thái READY mà có quyền ưu tiên cao hơn để chạy.
Hình 2-7 Hoạt động của nhân có hỗ trợ đoạt quyền ưu tiên