Hệ điều hành RTOS

      Khi chúng ta nghe thấy ai đó nhắc tới hệ điều hành (Operating System – OS) thì chúng ta sẽ nghĩ ngay tới chiếc máy tính chạy Windows XP, Windows 7, Windows 8 hay chạy một distro Linux và Android hoặc iOS cho điện thoại. Chúng ta biết đến hệ điều hành chủ yếu là dành cho máy tính. Tuy nhiên trong thực tế, có rất nhiều thiết bị điện tử có chạy một dạng hệ điều hành rút gọn bên trong nó. Bên cạnh đó cũng có rất nhiều loại hệ điều hành được thiết kế cho vi điều khiển. Trong số chúng có một số thuộc họ Hệ điều hành thời gian thực (Real Time Operating System – RTOS), cụm từ thời gian thực ở đây chỉ ra rằng thời gian phản hồi của hệ thống là rất nhanh.

  • Hệ điều hành thông thường hiện diện trong máy tính của bạn, khi bạn mở ứng dụng lên thì sẽ có nhiều lúc bạn phải chờ khá lâu. Việc chờ như vậy hầu như không ảnh hưởng gì nhiều lắm, và bạn có thể pha cho mình 1 tách cafe trong khi chờ ứng dụng khởi chạy. Đôi khi ứng dụng lỗi thì chúng ta chỉ cần đóng process rồi chạy lại, gần như chẳng ảnh hưởng gì đến ai, có chăng thì khó chịu một chút thôi.
  • Hệ điều hành thời gian thực được thiết kế ra cho các nhiệm vụ đặc biệt. Các ứng dụng cần được thực thi với thời gian thật chính xác, các lỗi phát sinh cần được cô lập và xử lý nhanh chóng. Mọi sự chậm trễ, lỗi phát sinh không lường trước có thể khiến hệ thống bị đổ vỡ.

      Vì vậy, RTOS sử dụng trong những ứng dụng yêu cầu thời gian đáp ứng nhanh, chính xác về thời gian. Vi điều khiển có tài nguyên rất giới hạn. Do đó, hệ điều hành này chỉ tập trung vào một số ít các tính năng. Chúng cố gắng tối ưu tối đa số luồng, bộ lập lịch và các tác vụ (task) trên một hệ thống cỡ nhỏ.

      Thông thường, RTOS là một phân đoạn hoặc một phần của chương trình, trong đó nó giải quyết việc điều phối các task, lập lịch và phân mức ưu tiên cho task, nắm bắt các thông điệp gửi đi từ task. RTOS khá phức tạp, nói một cách dễ hiểu hơn là nó thực hiện việc xử lý các trạng thái máy (State Machine). Dưới đây là 1 minh hoạ cho bạn dễ hiểu hơn về thứ gọi là trạng thái máy.

      Bạn có thể thấy trong đoạn mã trên, có sự điều chuyển giữa các mệnh lệnh thực thi một cách liên tục. Nó có thể được phát triển và thiết kế phức tạp hơn nữa. Người lập trình có thể thay đổi và sử dụng các lệnh điều kiện (if-else, switch-case…) để chuyển qua lại giữa các task. Do vậy, các luồng chương trình có thể được xác định rõ ràng.

      Nhân (kernel) của hệ điều hành giao cho CPU thực hiện việc xử lý các task theo những khoảng thời gian. Nó cũng liên tục kiểm tra mức ưu tiên của các task, xắp xếp các thông điệp từ task và tiến hành lập lịch.

      Trong một hệ thống chạy RTOS, cũng có các tài nguyên dùng chung cùng với phần được cấp phát riêng cho mỗi task.

Các chức năng cơ bản của một RTOS
  • Bộ lập lịch (Scheduler).

  • Các dịch vụ thời gian thực (Realtime Services).
  • Đồng bộ và xử lý thông điệp (Synchronization and Messaging).
  • Scheduler

      Mỗi task có thể có 3 trạng thái.

  • Ready to run: Là trạng thái mà task đã có đủ các tài nguyên để khởi chạy nhưng chưa chạy. Đây là trạng thái chuẩn bị của task.
  • Running: Là trạng thái mà task đang được thực thi.
  • Blocked: Khi task không có đủ các tài nguyên cần thiết để chạy thì nó sẽ được đưa về trạng thái blocked.

Để lập lịch cho Task, có 3 kỹ thuật được áp dụng:

  • Co-operative scheduling: Mỗi task được thực thi đến khi kết thúc quá trình thì task tiếp theo mới được thực thi.
  • Round Robin Scheduling: Mỗi task được chia cho một khe thời gian cố định, nếu trong khoảng thời gian được chia đó mà task chưa thực hiện xong thì sẽ bị tạm dừng, chờ đến lượt tiếp theo để thực hiện tiếp công việc sau khi hệ thống xử lý hết một lượt các task.
  • Preemptive Scheduling: Phương pháp này ưu tiên phân bổ thời gian cho các task có mức ưu tiên cao hơn. Mỗi task được gán 1 mức ưu tiên duy nhất. Có thể có 256 mưc ưu tiên trong hệ thống, và có thể có nhiều task có cùng mức ưu tiên.

Kernel tiến hành quản lý task ở nhiều giai đoạn. Chúng bao gồm:

  • Tạo task.
  • Huỷ task.
  • Thay đổi mức ưu tiên của task.
  • Thay đổi trạng thái của task.
RTOS Services (Dịch vụ thời gian thực)

Kernel là trái tim của mỗi hệ điều hành. Nó thực hiện chức năng quản lý và lập lịch các quá trình sử dụng CPU và điều phối tài nguyên. Mỗi task chỉ được thưc thi bởi CPU trong một khoảng thời gian, trong các khoảng thời gian còn lại thì task được quản lý bởi các dịch vụ quản lý của hệ điều hành.

Các dịch vụ của RTOS bao gồm:

  • Xử lý ngắt (Interrupt handling services).
  • Dịch vụ quản lý thời gian (Time services).
  • Dịch vụ quản lý thiết bị (Device management services).
  • Dịch vụ quản lý bộ nhớ (Memory management services).
  • Dịch vụ quản lý các kết nối Vào – Ra (IO services).
Messaging (Các thông điệp)

Các thông điệp sử dụng để trao đổi thông tin giữa các hệ thống khác nhau hoặc giữa các task. Các dịch vụ quản lý thông điệp bao gồm:

  • Semaphores.
  • Event flags.
  • Mailboxes.
  • Pipes.
  • Message queues

Semaphores: Dùng để đồng bộ hóa quyền truy cập vào các tài nguyên dùng chung.

Event Flags: Dùng để đồng bộ hóa các hoạt động cần có sự phối hợp của nhiều task.

Mailboxes, Pipes, Message queues: Dùng để quản lý các thông điệp gửi đi – đến giữa các task.

Source:  VOER Edu, Blog ThanhNT.

PHẠM HOÀNG LONG