🌱 RTOS 02: RTOS - Đa nhiệm & Lập lịch (Multi-Task & Scheduling)

🌱 RTOS 02: RTOS - Đa nhiệm & Lập lịch (Multi-Task & Scheduling)

     post trước, chúng ra đã cùng tìm hiểu về RTOS là gì và tác dụng của RTOS trong những hệ thống lớn. Ở post này chúng ta sẽ cùng tìm hiểu về các đặc điểm quan trọng nhất của RTOS, đó là các task, và cơ chế lập lịch - Scheduling.

    👉 Các nội dung chính

    1. Task là gì? Multi-Task trong RTOS
    2. Cơ chế lập lịch - Scheduling

        👉 Task là gì? Multi-Task trong RTOS

        Giống như công việc thường ngày của chúng ta, vi điều khiển thực thi những nhiệm vụ riêng của nó, trong RTOS, các công việc đó gọi là Task. Như vậy, đối với vi điều khiển, Task là một tập hợp các câu lệnh, được lưu trong bộ nhớ vi điều khiển, để thực hiện một nhiệm vụ nào đó.

        Ví dụ trong post trước mình đã nêu ra một ví dụ với 3 task:

    • Task 1: Nháy LED với chu kỳ 1s.
    • Task 2: Đọc giá trị cảm biến và cảnh báo khi cần.
    • Task 3: Đọc nút bấm để thay đổi chu kỳ nháy led.
        ➤ Với chương trình bình thường, chúng ta chạy lần lượt các task trong một vòng while(1) - Super Loop, và có thể dùng ngắt khi cần.
        Còn đối với RTOS, các task này sẽ cần được thực hiện gần như "song song". Vì vậy, mỗi task cần có một "chương trình riêng", ở đây là một function để thực hiện chức năng của chúng. Việc thực hiện đa tác vụ trên cùng một chương trình vi điều khiển (ở đây là 1 core) gọi là Multi-Task.


        Ở đây do vi điều khiển của mình chỉ có một Core nên tại một thời điểm chỉ có 1 câu lệnh được thực hiện, đồng nghĩa với việc các task không thể thực hiện song song được!!! 
        Vì vậy, người ta cần có một cơ chế để giúp việc thực thi các task gần như là song song, đó là cơ chế lập lịch - Scheduling.

        👉 Cơ chế lập lịch - Scheduling

        Lập lịch - Scheduling là một thuật toán để xác định Task nào được thực thi. Về cơ bản, một task sẽ có 4 trạng thái chính:
    • READY: Sẵn sàng chạy.
    • RUNNING: Đang chạy.
    • BLOCKED: Chờ một sự kiện hoặc tài nguyên.
    • SUSPENDED: Bị tạm dừng, không tham gia vào lập lịch.
        Scheduling sẽ quyết định task nào ở trạng thái RUNNING, task nào ở trạng thái SUSPENDED / BLOCKED.

    RTOS Task States
    Các trạng thái hoạt động của RTOS
        Nhờ có bộ lập lịch mà chúng ta có thể điều khiển các task hoạt động theo yêu cầu, không có task nào bị miss, cũng như việc thực hiện các task sẽ gần như là song song. Hình bên dưới mô tả rất rõ về Multi-Task. 
    RTOS Multi-Task Timing
    Thực tế hoạt động của RTOS
        Mặc dù các Task thực hiện tuần tự (như hình dưới) nhưng mắt người nhìn nó như là song song (hình ở trên). Việc các task thực hiện trong một khoảng thời gian rồi ngay lập tức chuyển qua task khác cũng giúp tiết kiệm tài nguyên của hệ thống. 
        Chẳng hạn, với 3 task có nêu ở đầu post, scheduler có thể thực hiện task 1 là đảo led, sau đó chuyển qua task 2, 3 để làm việc (Dù sao thì cũng delay 1s không làm gì cả, CPU thoải mái la cà ở nơi khác rồi về nhà đúng giờ là được 😂). Nên sau này khi lập trình RTOS bạn sẽ không còn thấy hàm delay thông thường nữa, mà thay vào đó là 1 hàm delay đặc biệt của RTOS, trong khoảng delay đó CPU sẽ đi thực hiện task khác. 

        Đó chính là tác dụng của bộ lập lịch - Scheduler, chỉ là một thuật toán nhưng nó giống như một ông leader ngồi phân chia công việc của team một cách hiệu quả. Với RTOS thì chúng ta có rất nhiều thuật toán lập lịch mà chúng ta sẽ được tìm hiểu ở post sau.

    >>>= 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