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à một lớp trừu tượng giúp quản lý hoạt động giữa hệ điều hành và phần cứng, là thành phần cốt lõi trong hệ điều hành. Các dịch vụ của kernel bao gồm:
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 sẽ chịu trách nhiệm quản lý các task bằng cách dừng và phục hồi hoạt động của task.
Một chương trình có thể bao gồm nhiều task, vi điều khiển thường chỉ có 1 core nên trong một thời điểm chỉ có đúng 1 task được chạy. 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
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:
- Allocation of memory
- Power management
- Which process uses the CPU
- When I/O takes place
- 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:
- Maintainability/Extensibility
- Code reuse/Easier testing
- Team development
- Improved efficiency
- Power Management
4. Kernel: là một lớp trừu tượng giúp quản lý hoạt động giữa hệ điều hành và phần cứng, là thành phần cốt lõi trong hệ điều hành. Các dịch vụ của kernel bao gồm:
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 sẽ chịu trách nhiệm quản lý các task bằng cách dừng và phục hồi hoạt động của task.
Một chương trình có thể bao gồm nhiều task, vi điều khiển thường chỉ có 1 core nên trong một thời điểm chỉ có đúng 1 task được chạy. 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: executing on the CPU
- READY: ready to be executed
- WAITING / BLOCKED: waiting for an event
- INACTIVE / SUSPENDED: not active
6. Cấu trúc chương trình nhú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