🌱 Core 15. RTOS - Context Switch - Chuyển đổi ngữ cảnh
Một vấn đề quan trọng trong RTOS đó là việc chuyển đổi ngữ cảnh, việc một Task đang chạy phải dừng lại để nhường chỗ cho Task khác, sau đó khi trở lại hoạt động thì Task đó vẫn tiếp tục công việc cũ không hề đơn giản.
Vì vậy cần có những cơ chế riêng để thực hiện việc này, đó chính là cơ chế Context Switch - Chuyển đổi ngữ cảnh.
👉 Khi nào cần gọi hàm lập lịch - Scheduler()?
Khi xây dựng việc lập lịch cho RTOS, chúng ta cần có một list các Task cần được thực hiện, cụ thể, để quy định việc Task nào sẽ được thực hiện tiếp theo, chúng ta sẽ xây dựng một Queue - hàng đợi. Task nào đứng đầu Queue sẽ là task tiếp theo cần thực hiện.
Queue được xây dựng cho các Task sẽ giống như trong hình trên. Các task mới cần được thực hiện sẽ được đưa vào Queue này.
- Task có mức độ ưu tiên cao hơn sẽ được xếp trên các Task có mức độ ưu tiên thấp hơn.
- Task đến trước sẽ đứng trên Task đến sau nếu có cùng mức độ ưu tiên.
- Task có mức độ ưu tiên cao hơn task đang thực thi muốn thực hiện. Khi đó, task này sẽ nhảy lên đầu Queue, task đang thực thi sẽ phải nhường lại quyền điều khiển cho task đó. Lúc này, Kernel sẽ gọi hàm lập lịch Scheduler() để chuyển sang Task có mức ưu tiên cao hơn.
- Khi Task hiện tại gọi hàm vTaskDelay(). Khi gọi hàm này, Task hiện tại sẽ ngưng làm việc trong thời gian delay, vì vậy, để tránh lãng phí tài nguyên hệ thống, Kernel sẽ gọi hàm lập lịch Scheduler() để chuyển qua Task khác.
- Khi hết thời gian Time-Slice, Kernel sẽ chuyển sang task tiếp theo để thực thi bằng cách gọi hàm lập lịch Scheduler().
👉 Context Switch - Chuyển đổi ngữ cảnh
Việc chuyển đổi ngữ cảnh sinh ra với 2 mục đích:
- Lưu lại ngữ cảnh (dữ liệu) của Task đang thực thi trước khi chuyển qua task khác, ngữ cảnh này sẽ được lưu vào vùng nhớ TCB của Task.
- Lấy lại ngữ cảnh cũ của Task đang chuẩn bị được thực thi để tiếp tục task đó. Việc này ngược lại với việc trên, đó là lấy dữ liệu từ vùng nhớ TCB của Task tương ứng.
- SVC - supervisor call.
- PendSV Exception.
Bài viết hay , dễ hiểu a
Trả lờiXóa