🌱 Core 15. RTOS - Context Switch - Chuyển đổi ngữ cảnh

🌱 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. 

RTOS

    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.
    👉 Các Task trong Queue này sẽ được gọi thực thi bởi hàm lập lịch - Scheduler(). Hàm lập lịch sẽ gọi trong các trường hợp sau: 
  • 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().
    Vậy khi gọi hàm lập lịch, Kernel sẽ cho phép chuyển từ Task hiện tại sang Task đứng đầu Queue. Như đã nói thì việc chuyển Task như vậy cần một cơ chế chuyển đổi ngữ cảnh.

    👉 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.
RTOS

    Việc thực thi Context Switch sẽ dựa trên 2 exceptions của hệ thống, đó là: 
  • SVC - supervisor call.
  • PendSV Exception.
    Chi tiết về cách thực hiện Context Switch khá đơn giản, các bạn xem tại slide dưới đây do mình xây dựng để hiểu sâu về quá trình này!


>>>= Follow ngay =<<<

Để theo dõi những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

                        

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

1 Nhận xét

Mới hơn Cũ hơn