ntaquan
Gà con
Phần 1: Các khái niệm cơ bản
1. Hệ điều hành (OS)
OS là một phần mềm dùng để điều hành và quản lý tài nguyên và điều phối các hoạt động của hệ thống máy tính, nó có các chức năng sau:
2. Hệ thống thời gian thực
A: non-realtime, B: soft-realtime, C: hard-realtime
Hard-realtime: được thiết kế để hoạt động trong các giới hạn thời gian rất nghiêm ngặt, trong đó việc bỏ lỡ thời hạn (deadline) có thể dẫn đến hậu quả thảm khốc. Ví dụ về các hệ thống thời gian thực cứng bao gồm hệ thống kiểm soát không lưu, hệ thống điều khiển cho các nhà máy điện hạt nhân. Các hệ thống này phải đáp ứng thời hạn một cách chắc chắn tuyệt đối và không thể chấp nhận bất kỳ sự chậm trễ hoặc lỗi hệ thống nào.
Soft-realtime: được thiết kế để hoạt động trong các ràng buộc thời gian linh hoạt hơn. Các hệ thống này có thể có thời hạn quan trọng, nhưng việc bỏ lỡ thời hạn không dẫn đến hậu quả thảm khốc. Ví dụ về các hệ thống thời gian thực mềm bao gồm các ứng dụng đa phương tiện như truyền phát video, gaming trực tiếp. Mặc dù các hệ thống này yêu cầu xử lý kịp thời, nhưng chúng có thể chịu được một số độ trễ mà không ảnh hưởng đến nhiều trải nghiệm chung của người dùng.
Non-realtime: hệ thống trong đó thời gian phản hồi không quan trọng và không có các ràng buộc nghiêm ngặt về thời gian xử lý. Thời gian phản hồi có thể khác nhau tùy thuộc vào tải trên hệ thống và tài nguyên hệ thống.
3. Hệ điều hành thời gian thực (RTOS)
Sử dụng trong các hệ thống cần thời gian đáp ứng nhanh và chính xác.
Sử dụng trong các hệ thống lớn, cần quản lý tài nguyên.
Ưu điểm:
4. Kernel: là thành phần cốt lõi của hệ điều hành, đóng vai trò như một lớp trừu tượng quản lý và điều phối sự tương tác giữa phần cứng và phần mềm. Nó chịu trách nhiệm điều hành việc sử dụng tài nguyên hệ thống cũng như cung cấp các dịch vụ thiết yếu cho các tiến trình và ứng dụng.
5. Task: chương trình sử dụng RTOS được chia thành những đơn vị nhỏ gọi là task, mỗi task là một hàm. Mỗi task sẽ bao gồm một vòng lặp vô tận và không có câu lệnh trả về.
Kernel chịu trách nhiệm quản lý các task, bao gồm việc tạm dừng (suspend) và khôi phục (resume) hoạt động của task. Một chương trình có thể chứa nhiều task, tuy nhiên trên vi điều khiển chỉ có một core thì tại một thời điểm chỉ có một task được thực thi. Vậy task sẽ có 2 trạng thái Runing và Not running. Trong đó trạng thái Not running còn bao gồm các trạng thái nhỏ hơn:
6. Cấu trúc chương trình nhúng / mô hình lập trình trong hệ thống
Simple loop: là phần mềm cơ bản trong đó một loạt các lệnh được thực hiện lặp đi lặp lại một cách tuần tự. Trong loại chương trình này, thời gian thực hiện chương trình là không xác định. Chương trình càng lớn, tính real-time càng bị ảnh hưởng.
Loop and ISRs: là một phần mở rộng của simple loop, trong đó các sự kiện ngắt nhất định có thể làm gián đoạn luồng chương trình chính và được thực thi ngay lập tức. Tuy nhiên, chương trình càng lớn, càng khó quản lý (thứ tự ưu tiên các ngắt, chương trình ngắt lớn, độ trễ ngắt)
RTOS: được thiết kế đặc biệt cho các hệ thống thời gian thực, trong đó thời gian thực hiện các task là xác định. Các chương trình RTOS đảm bảo rằng các task quan trọng được hoàn thành trong thời hạn của chúng.
7. Multitasking Vs Concurrency
Bằng cách chuyển qua lại giữa các task, nó cho ta cảm giác như các task được chạy một cách đồng thời mặc dù tại một thời điểm chỉ 1 task chạy.
Ngày nay thì đa số là sử dụng vi xử lý đa nhân nên sẽ là real parallelism chứ không còn là concurrency so với vi xử lý đơn nhân nữa.
8. Scheduler: Là một phần của kernel, xác định task nào được phép chạy.
Một số luật cho scheduling:
Cooperative scheduling: Giống với lập trình thông thường, mỗi task chỉ có thể thực thi khi task trước đó thực hiện xong, task có thể dùng hết tất cả tài nguyên của CPU. Ưu điểm là nó dễ thực hiện, lý tưởng cho các hệ thống nhỏ, nơi tài nguyên bị hạn chế. Tuy nhiên, nhược điểm chính là nó có thể dẫn đến hiệu quả và khả năng phản hồi của hệ thống thấp, vì các task có thể chiếm độc quyền của CPU và ngăn cản các task khác thực thi (vd max time out, delay).
Round-robin scheduling: Mỗi task được thực hiện trong thời gian định trước (time slice) và không có ưu tiên. Khi một task đã chạy hết thời gian của nó, nó sẽ bị dừng và di chuyển đến cuối queue, và task tiếp theo trong queue sẽ được trao quyền kiểm soát CPU.
Preemptive scheduling: Các task có mức ưu tiên thấp luôn nhường các task có mức ưu tiên cao hơn thực thi trước.
Tài liệu tham khảo
1. Hệ điều hành (OS)
OS là một phần mềm dùng để điều hành và quản lý tài nguyên và điều phối các hoạt động của hệ thống máy tính, nó có các chức năng sau:
- Quản lý và phân bổ bộ nhớ (Allocation of memory)
- Quản lý năng lượng (Power management)
- Quyết định tiến trình nào được sử dụng CPU (Process scheduling)
- Quản lý hoạt động các ngoại vi (I/O management)
- Bảo mật (Safety and Security Features)
2. Hệ thống thời gian thực
A: non-realtime, B: soft-realtime, C: hard-realtime
Soft-realtime: được thiết kế để hoạt động trong các ràng buộc thời gian linh hoạt hơn. Các hệ thống này có thể có thời hạn quan trọng, nhưng việc bỏ lỡ thời hạn không dẫn đến hậu quả thảm khốc. Ví dụ về các hệ thống thời gian thực mềm bao gồm các ứng dụng đa phương tiện như truyền phát video, gaming trực tiếp. Mặc dù các hệ thống này yêu cầu xử lý kịp thời, nhưng chúng có thể chịu được một số độ trễ mà không ảnh hưởng đến nhiều trải nghiệm chung của người dùng.
Non-realtime: hệ thống trong đó thời gian phản hồi không quan trọng và không có các ràng buộc nghiêm ngặt về thời gian xử lý. Thời gian phản hồi có thể khác nhau tùy thuộc vào tải trên hệ thống và tài nguyên hệ thống.
3. Hệ điều hành thời gian thực (RTOS)
Sử dụng trong các hệ thống cần thời gian đáp ứng nhanh và chính xác.
Sử dụng trong các hệ thống lớn, cần quản lý tài nguyên.
Ưu điểm:
- Dễ bảo trì và mở rộng (Maintainability/Extensibility)
- Tái sử dụng mã nguồn và dễ dàng kiểm thử (Code reuse / Easier testing)
- Hỗ trợ phát triển trong một nhóm (Team development)
- Nâng cao hiệu suất (Improved efficiency)
- Quản lý năng lượng (Power management)
4. Kernel: là thành phần cốt lõi của hệ điều hành, đóng vai trò như một lớp trừu tượng quản lý và điều phối sự tương tác giữa phần cứng và phần mềm. Nó chịu trách nhiệm điều hành việc sử dụng tài nguyên hệ thống cũng như cung cấp các dịch vụ thiết yếu cho các tiến trình và ứng dụng.
5. Task: chương trình sử dụng RTOS được chia thành những đơn vị nhỏ gọi là task, mỗi task là một hàm. Mỗi task sẽ bao gồm một vòng lặp vô tận và không có câu lệnh trả về.
Kernel chịu trách nhiệm quản lý các task, bao gồm việc tạm dừng (suspend) và khôi phục (resume) hoạt động của task. Một chương trình có thể chứa nhiều task, tuy nhiên trên vi điều khiển chỉ có một core thì tại một thời điểm chỉ có một task được thực thi. Vậy task sẽ có 2 trạng thái Runing và Not running. Trong đó trạng thái Not running còn bao gồm các trạng thái nhỏ hơn:
- RUNNING: Task đang được MCU thực thi.
- READY: Task đã sẵn sàng để thực thi ngay khi MCU rảnh.
- WAITING / BLOCKED: Task đang chờ một sự kiện hoặc tài nguyên (ví dụ: semaphore, I/O).
- INACTIVE / SUSPENDED: Task ở trạng thái không hoạt động, bị loại cho đến khi được kích hoạt lại.
6. Cấu trúc chương trình nhúng / mô hình lập trình trong hệ thống
Simple loop: là phần mềm cơ bản trong đó một loạt các lệnh được thực hiện lặp đi lặp lại một cách tuần tự. Trong loại chương trình này, thời gian thực hiện chương trình là không xác định. Chương trình càng lớn, tính real-time càng bị ảnh hưởng.
Loop and ISRs: là một phần mở rộng của simple loop, trong đó các sự kiện ngắt nhất định có thể làm gián đoạn luồng chương trình chính và được thực thi ngay lập tức. Tuy nhiên, chương trình càng lớn, càng khó quản lý (thứ tự ưu tiên các ngắt, chương trình ngắt lớn, độ trễ ngắt)
RTOS: được thiết kế đặc biệt cho các hệ thống thời gian thực, trong đó thời gian thực hiện các task là xác định. Các chương trình RTOS đảm bảo rằng các task quan trọng được hoàn thành trong thời hạn của chúng.
7. Multitasking Vs Concurrency
Bằng cách chuyển qua lại giữa các task, nó cho ta cảm giác như các task được chạy một cách đồng thời mặc dù tại một thời điểm chỉ 1 task chạy.
8. Scheduler: Là một phần của kernel, xác định task nào được phép chạy.
Một số luật cho scheduling:
Cooperative scheduling: Giống với lập trình thông thường, mỗi task chỉ có thể thực thi khi task trước đó thực hiện xong, task có thể dùng hết tất cả tài nguyên của CPU. Ưu điểm là nó dễ thực hiện, lý tưởng cho các hệ thống nhỏ, nơi tài nguyên bị hạn chế. Tuy nhiên, nhược điểm chính là nó có thể dẫn đến hiệu quả và khả năng phản hồi của hệ thống thấp, vì các task có thể chiếm độc quyền của CPU và ngăn cản các task khác thực thi (vd max time out, delay).
Tài liệu tham khảo
- Bài giảng "Thiết kế hệ thống nhúng", bộ môn Điện Tử
- Bài giảng "Lập trình hệ thống nhúng", bộ môn Điện Tử
- Bài giảng "Mạng cảm biến không dây và ứng dụng", bộ môn Viễn Thông
- "Mastering the FreeRTOS Real Time Kernel - A Hands-On Tutorial Guide"
- "Mastering STM32", Carmine Noviello
Last edited: