
Phát triển trên Bare Metal và RTOS
Việc lựa chọn Bare Metal hay RTOS đóng vai trò quan trọng trong thiết kế và phát triển hệ thống nhúng.
Khi phát triển các hệ thống nhúng có khả năng hoạt động theo thời gian thực, một trong những câu hỏi đầu tiên và quan trọng nhất là liệu ứng dụng nên chạy trên hệ điều hành thời gian thực (RTOS) hay được phát triển trực tiếp trên phần cứng (bare-metal). Lập trình bare-metal thường có nghĩa là viết ứng dụng trực tiếp cho phần cứng mà không sử dụng một lớp phần mềm trung gian như hệ điều hành. Trong trường hợp này, ứng dụng truy cập trực tiếp vào các thanh ghi phần cứng của vi điều khiển. Phương pháp này thường sử dụng một vòng lặp vô hạn để thực hiện nhiều tác vụ với thời gian xử lý có thể dự đoán được. Việc thực thi tuần tự chỉ bị gián đoạn bởi các sự kiện ngắt. Do đó, phương pháp phát triển bare-metal này cho các hệ thống nhúng cũng được gọi là siêu vòng lặp (super-loop).
Tự xây dựng hay mua sẵn – Phát triển trực tiếp trên phần cứng so với hệ điều hành thời gian thực (RTOS)
Khi phát triển các hệ thống nhúng có khả năng hoạt động theo thời gian thực, một trong những câu hỏi đầu tiên và quan trọng nhất là liệu ứng dụng nên chạy trên hệ điều hành thời gian thực (RTOS) hay được phát triển trực tiếp trên phần cứng (bare-metal). Lập trình bare-metal thường có nghĩa là viết ứng dụng trực tiếp cho phần cứng mà không sử dụng một lớp phần mềm trung gian như hệ điều hành. Trong trường hợp này, ứng dụng truy cập trực tiếp vào các thanh ghi phần cứng của vi điều khiển. Phương pháp này thường sử dụng một vòng lặp vô hạn để thực hiện nhiều tác vụ với thời gian xử lý có thể dự đoán được. Việc thực thi tuần tự chỉ bị gián đoạn bởi các sự kiện ngắt. Do đó, phương pháp phát triển bare-metal này cho các hệ thống nhúng cũng được gọi là siêu vòng lặp (super-loop).
Trái ngược với lập trình trực tiếp trên phần cứng, các hệ thống nhúng sử dụng hệ điều hành thời gian thực (RTOS) sử dụng nhân hệ điều hành kết hợp với bộ lập lịch hoặc trình điều khiển thiết bị làm lớp trung gian giữa phần cứng và mã ứng dụng. Ưu điểm là nó cho phép đa luồng, điều này rất quan trọng khi cần thực hiện nhiều tác vụ trên phần cứng thay vì chỉ thực hiện một vài tác vụ được xác định rõ ràng với tài nguyên được phân bổ cố định. Mỗi tác vụ có thể được ưu tiên một cách thuận tiện và hiệu năng của nhiều lõi CPU có thể được tận dụng. Nói cách khác, một hệ điều hành thời gian thực với bộ lập lịch cho phép các tác vụ chạy đồng thời và, quan trọng nhất, mang lại tính linh hoạt, khả năng ưu tiên và quản lý hoạt động tổng thể của hệ thống.
Nhìn chung, nhân hệ điều hành và trình điều khiển thiết bị đóng vai trò là giao diện giữa mã ứng dụng thực tế và phần cứng vi điều khiển. Tuy nhiên, PikeOS của SYSGO hơi khác một chút: nó sử dụng một vi nhân rất nhỏ chỉ chứa các thành phần thiết yếu, giúp dễ dàng kiểm tra và xác minh. Mặc dù một số trình điều khiển chạy trong không gian người dùng, chúng thường được lưu trữ trong một phân vùng trình điều khiển và được thực thi bằng các kỹ thuật như giao tiếp liên phân vùng hoặc cơ chế xếp hàng cổng. Nhân hệ điều hành cũng có thể được triển khai cùng với một hypervisor riêng biệt, như trong PikeOS của SYSGO, cho phép cách ly nghiêm ngặt nhiều ứng dụng khi cần thiết đối với các hệ thống quan trọng về an toàn và bảo mật, cũng như nhiều ứng dụng khác.
Lập trình trực tiếp trên phần cứng (bare-metal programming) mang lại lợi thế là cho phép thiết kế các giải pháp phần mềm nhúng dành riêng cho từng trường hợp sử dụng với quy mô nhỏ nhất có thể, mà không phải chịu phần chi phí xử lý và các lỗi tiềm ẩn liên quan đến hệ điều hành. Trong trường hợp tốt nhất, điều này dẫn đến một giải pháp có khả năng tùy chỉnh cao, đáng tin cậy và tiết kiệm tài nguyên, điều này rất lý tưởng nếu các tác vụ cần thực hiện có thể được quản lý để đảm bảo mức độ nhất quán và tính xác định cao nhất của hệ thống, đặc biệt trong những trường hợp mà bộ điều khiển là khả thi.
Ngược lại, các lập trình viên viết mã trực tiếp trên phần cứng cũng phải đối mặt với những thách thức trong việc quản lý độ phức tạp ngày càng cao. Nếu một dự án vốn đã lớn lại bất ngờ mở rộng quy mô trong quá trình triển khai — ví dụ, nếu các tính năng mới không được xem xét trong kế hoạch ban đầu — thì việc kiểm soát tổng thể có thể trở nên khó khăn. Hơn nữa, nếu lập trình được thực hiện bằng ngôn ngữ assembly và tài liệu về bo mạch không đầy đủ hoặc thiếu một lớp trừu tượng hóa phần cứng, ngay cả những lập trình viên giàu kinh nghiệm cũng có thể gặp khó khăn. Có thể cho rằng hệ điều hành tạo ra thêm chi phí xử lý và làm giảm mức độ kiểm soát trực tiếp, nhưng hệ điều hành chắc chắn làm giảm nỗ lực lập trình bằng cách cung cấp các chức năng quản lý bộ nhớ và tiến trình, đồng thời cho phép lập trình bằng các ngôn ngữ cấp cao như C, vốn có các thư viện giúp đơn giản hóa công việc của lập trình viên nhưng thường không có sẵn trong lập trình trực tiếp trên phần cứng. Không thể phủ nhận rằng đôi khi lập trình trực tiếp trên phần cứng vẫn đòi hỏi nhiều nỗ lực, chẳng hạn như phải tự quản lý việc đồng bộ hóa tài nguyên bằng semaphore. Tuy nhiên, trong mọi trường hợp, người lập trình có được mức độ tự do quản lý rất lớn. Điều này trở nên rõ ràng hơn khi nhận ra rằng việc phân vùng tài nguyên theo thời gian và không gian cho phép các ứng dụng quan trọng về an toàn và bảo mật chạy đồng thời với các phân vùng Linux/Android trên cùng một phần cứng.
Việc cân nhắc ưu điểm và nhược điểm của lập trình trực tiếp trên phần cứng không phải lúc nào cũng dễ dàng. Mặc dù có những người ủng hộ và phản đối mạnh mẽ, cần xem xét các khía cạnh khác (phi kỹ thuật) ngoài những điều đã đề cập. Chúng bao gồm nỗ lực cần thiết cho việc lập trình trực tiếp trên phần cứng và trách nhiệm hoàn toàn đối với ứng dụng, cả theo hướng tích cực lẫn tiêu cực. Lập trình trực tiếp trên phần cứng có thể trở thành rủi ro đối với dự án nếu một nhân viên vắng mặt trong thời gian dài mà không có thông báo trước. Việc thay thế nhanh chóng không dễ dàng đối với các lập trình viên thành thạo C, Rust hoặc Python, nhưng lại đặc biệt khó khăn đối với các kỹ năng ngôn ngữ assembly, đặc biệt trong các dự án có tiến độ gấp đòi hỏi chuyên môn sâu rộng. Về mặt kỹ thuật, độ tin cậy thường là một yếu tố cần xem xét. Khi độ phức tạp tăng lên, khả năng xảy ra lỗi cũng tăng theo. Trong trường hợp tốt nhất, có thể có sẵn một phần mềm của bên thứ ba đã được kiểm chứng đầy đủ, nhưng lỗi vẫn có thể xảy ra với lập trình trực tiếp trên phần cứng. Một khía cạnh tích cực của các hệ thống dựa trên RTOS là một số chức năng đã được thử nghiệm thực tế và tuân thủ các tiêu chuẩn an toàn nghiêm ngặt, chẳng hạn như DO-178C trong hàng không hoặc ISO 26262 trong ngành ô tô, mang lại mức độ đảm bảo nhất định về chức năng.
Hệ thống mạng và bảo mật
Hiện nay, khi mức độ kết nối mạng ngày càng tăng, các mô-đun ứng dụng hoặc hệ thống nhúng đang nhận được nhiều sự chú ý hơn, dù là vì lý do bảo trì hay giám sát hiệu suất hệ thống từ xa. Do đó, khả năng sửa đổi các ứng dụng hiện có đóng vai trò ngày càng quan trọng. Tất nhiên, một số mô-đun sẽ vẫn không được kết nối trong tương lai, chẳng hạn để tránh rủi ro an ninh mạng. Tuy nhiên, cần thừa nhận rằng trong tương lai, các mô-đun này có thể không còn đáp ứng được những yêu cầu cần thiết, đòi hỏi phải sửa đổi hệ thống hoặc mã nguồn. Điều này có thể dẫn đến khó khăn, bởi vì trong kiến trúc nhúng bare-metal, thời gian phản hồi và thời gian thực thi được quyết định bởi cấu trúc mã nguồn và phải được thay đổi bất cứ khi nào có thay đổi hoặc bổ sung chức năng, dẫn đến tăng nỗ lực và thời gian sửa đổi. Ngược lại, hệ điều hành thời gian thực (RTOS) thường cung cấp tính linh hoạt cao về kết nối mạng và thường đi kèm với các tính năng bảo mật tích hợp. Có thể thấy rằng các vấn đề bảo mật sẽ trở nên ngày càng nghiêm trọng hơn, và cả người dùng lẫn lập trình viên sẽ phải đối mặt với câu hỏi liệu họ muốn một hệ thống có kết nối mạng hay không. Trong trường hợp đầu tiên, các hệ điều hành thời gian thực (RTOS) như PikeOS của SYSGO có các thành phần được chứng nhận trước và hỗ trợ các khái niệm bảo mật mới, chẳng hạn như phương pháp tiếp cận không tin cậy (zero-trust).
Ngoài các chức năng cơ bản của một hệ điều hành, chẳng hạn như lập lịch và chia sẻ thời gian, các hệ điều hành thời gian thực (RTOS) hiện đại cung cấp khả năng ưu tiên các tác vụ một cách nghiêm ngặt trong thời gian thực, giúp các ứng dụng có thời gian phản hồi chính xác và có thể dự đoán được. Mặc dù ngắt có thể được sử dụng để kiểm soát việc thực thi trong các hệ thống bare-metal, một RTOS hoàn chỉnh sẽ mang lại sự tiện lợi cao hơn và nhiều chức năng hơn. Ngược lại, lập trình bare-metal có lợi thế khi cần thời gian khởi động rất ngắn và có thể dự đoán chính xác; thông thường, quá trình khởi động của RTOS có thể mất vài giây.
Sự trừu tượng hóa tạo điều kiện thuận lợi cho việc tích hợp
Một ưu điểm quan trọng của hệ điều hành thời gian thực (RTOS) là hệ sinh thái rộng lớn. Trong hầu hết các trường hợp, nhiều RTOS bao gồm phần mềm trung gian thân thiện với người dùng, chẳng hạn như hệ thống tệp, USB hoặc TCP/IP, có thể dễ dàng tích hợp, cũng như trình điều khiển thiết bị hoặc các thành phần khác từ các nhà phát triển bên thứ ba. Việc sử dụng RTOS biến các thành phần này thành các khối phần mềm có thể tích hợp dễ dàng, giúp tăng tốc đáng kể quá trình phát triển phần mềm. Do đó, quyết định sử dụng phần mềm của bên thứ ba là một chỉ báo quan trọng để xác định xem RTOS có phải là lựa chọn tốt hơn so với bộ lập lịch tự phát triển trên nền bare-metal hay không.
Việc cố gắng thiết kế một hệ thống bare-metal sử dụng phần mềm trung gian như vậy sẽ cực kỳ tốn thời gian và dễ xảy ra lỗi. Hơn nữa, hệ điều hành thời gian thực (RTOS) đơn giản hóa đáng kể việc phát triển mã nguồn có tính di động và có thể tái sử dụng, vì các giải pháp dựa trên RTOS thường tạo ra phần mềm nhúng với các tác vụ được xác định rõ ràng, phù hợp để tái sử dụng. Ngoài ra, sự trừu tượng hóa giữa phần cứng và ứng dụng do hệ điều hành cung cấp giúp đơn giản hóa đáng kể việc thay đổi phần cứng hoặc tích hợp các mô-đun của bên thứ ba. Thêm vào đó, RTOS là lựa chọn phù hợp khi muốn sử dụng các bộ xử lý hiện đại, mạnh mẽ có MMU (Bộ quản lý bộ nhớ), vì bare-metal không mặc định cung cấp cơ chế địa chỉ ảo.
An toàn, bảo mật và chứng nhận
Các hệ điều hành thời gian thực (RTOS) hiện đại thể hiện đầy đủ sức mạnh của mình khi các hệ thống được phát triển có tính chất quan trọng về an toàn và bảo mật, phức tạp và yêu cầu chứng nhận theo các tiêu chuẩn quốc gia hoặc ngành nghề cụ thể, cho dù đó là hàng không, đường sắt, y tế hay công nghiệp. Ngay cả những thay đổi nhỏ đối với mã nguồn của một giải pháp truyền thống cũng có thể yêu cầu chứng nhận lại toàn bộ, điều này tốn thời gian và chi phí. Với RTOS, nỗ lực này được giảm thiểu đáng kể vì chỉ cần xem xét các thành phần riêng lẻ. Hơn nữa, một khi các thành phần được chứng nhận, chúng có thể được tái sử dụng, nhìn chung sẽ làm giảm thêm chi phí chứng nhận.
Vì các hệ thống quan trọng thường bao gồm các thành phần ít quan trọng hơn, chẳng hạn như các ngăn xếp truyền thông, bên cạnh các chức năng cốt lõi, nên việc sử dụng RTOS dựa trên nhân và hypervisor để phân vùng hệ thống thường được khuyến nghị. Với các hệ điều hành thời gian thực như vậy, sự tách biệt nghiêm ngặt giữa các ứng dụng quan trọng và không quan trọng được thực hiện thông qua việc phân vùng tài nguyên và thời gian, cho phép một hệ thống hỗn hợp với các mức độ quan trọng khác nhau chạy trên một thiết bị phần cứng duy nhất. Những lo ngại dễ hiểu về các lỗ hổng bảo mật tiềm ẩn được giải quyết bằng các thực tiễn đã được chứng minh dựa trên các tiêu chuẩn bảo mật nghiêm ngặt, đảm bảo mức độ tin cậy rất cao cho các hệ thống như vậy. Mỗi phân vùng có thể hỗ trợ một hệ điều hành khách khác nhau, cho phép các ứng dụng không quan trọng chạy trên Linux nhúng như ELinOS, trong khi các ứng dụng quan trọng chạy trên ARINC (liên quan đến hàng không), AUTOSAR (liên quan đến ô tô) hoặc RTOS gốc. Với PikeOS của SYSGO, các phân vùng POSIX cũng có thể được sử dụng để xử lý các tác vụ có mức độ quan trọng trung bình mà Linux có thể không phù hợp.
Trong quá trình phân vùng, tất cả các tài nguyên khả dụng và tạm thời đều được phân bổ tĩnh. Mỗi ứng dụng được đảm bảo quyền truy cập vào các tài nguyên đã được phân bổ nhưng không thể truy cập tài nguyên trong các phân vùng khác. Sự cô lập nghiêm ngặt đảm bảo rằng tất cả các ứng dụng được tách biệt hoàn toàn và chỉ có thể giao tiếp với nhau thông qua hypervisor hoặc các kênh được cấu hình cụ thể. Điều này loại bỏ khả năng các lỗ hổng trong các ứng dụng không quan trọng lan rộng khắp hệ thống và ảnh hưởng đến các ứng dụng quan trọng. Ví dụ, PikeOS cho phép các hệ thống con dựa trên Linux và các ứng dụng quan trọng về an toàn và bảo mật chạy trên các hệ điều hành tương ứng của chúng trên cùng một nền tảng CPU. Tất cả các phân vùng hoạt động ở chế độ người dùng và không ảnh hưởng đến chế độ kernel ổn định.
Nhờ sự phân tách ứng dụng nghiêm ngặt, cách ly nhân hệ điều hành và việc sử dụng hypervisor, việc chứng nhận các hệ thống quan trọng mang lại những lợi thế đáng kể. Ví dụ, các tài liệu chứng nhận có thể được sử dụng lại, và khi có thay đổi, chỉ cần chứng nhận các phần mới hoặc đã sửa đổi, giúp cải thiện đáng kể thời gian đưa sản phẩm ra thị trường và giảm chi phí chứng nhận. Hơn nữa, bản thân PikeOS đã được chứng nhận EAL 3+, cho phép triển khai đáng tin cậy các biện pháp bảo mật CNTT cấp cao. Bên cạnh an toàn vận hành, vốn rất quan trọng đối với các ứng dụng giao tiếp với thế giới bên ngoài, các ứng dụng dựa trên phần cứng có thể được bảo vệ bằng các biện pháp bảo mật bên ngoài, nhưng bản thân chúng không có các cơ chế bảo mật chuyên sâu để ngăn chặn những cuộc tấn công phức tạp. Do đó, phân tích heuristic hoặc các phương pháp giảm thiểu như Kiểm soát Tính toàn vẹn Luồng điều khiển (Control Flow Integrity – CFI) cực kỳ hữu ích trong trường hợp này.
Với hệ thống phân vùng của mình, PikeOS cũng cung cấp một lộ trình chuyển đổi tương đối đơn giản từ hệ thống bare-metal sang hệ điều hành thời gian thực (RTOS). Quá trình này bắt đầu bằng cách cài đặt các ứng dụng bare-metal hiện có vào phân vùng riêng, sau đó sử dụng các lệnh gọi API để giao tiếp với nhân hệ điều hành, và cuối cùng là chuyển quyền quản lý sang nhân hệ điều hành cho các ứng dụng khác.
Hệ thống truyền thông cần một hệ điều hành thời gian thực (RTOS)
Tóm lại, quyết định sử dụng bare-metal hay hệ điều hành thời gian thực (RTOS) là một quyết định kinh điển: tự xây dựng hay mua sẵn. Các khía cạnh kinh tế đóng vai trò quan trọng, cũng như hướng phát triển của hệ thống nhúng, đặc biệt là về khả năng kết nối mạng. Phát triển các hệ thống nhỏ, đơn giản trên nền tảng bare-metal là hợp lý, nhưng RTOS mang lại lợi thế kinh tế về tỷ suất hoàn vốn đầu tư (ROI) và tổng chi phí sở hữu (TCO) thấp hơn, cũng như lợi thế công nghệ về khả năng thích ứng với các yêu cầu phát triển trong tương lai. Hơn nữa, việc tái sử dụng mã nguồn và tài liệu hiện có (nếu có) giúp rút ngắn thời gian đưa sản phẩm ra thị trường. Vì lý do tương tự, các chức năng mới có thể được tích hợp nhanh chóng, tiết kiệm và an toàn với RTOS, đặc biệt là RTOS dựa trên hypervisor. Ngoài ra, các hệ thống dựa trên RTOS có khả năng thích ứng tốt hơn với các yêu cầu an ninh mạng trong tương lai, điều ngày càng quan trọng trong môi trường mạng hiện nay.
Đối với các nhà phát triển, việc áp dụng một hệ điều hành thời gian thực (RTOS) ban đầu đòi hỏi một quá trình học hỏi, nhưng điều này sẽ sớm mang lại lợi ích. Các công cụ và phần mềm trung gian phù hợp có thể giảm đáng kể nỗ lực phát triển, đồng thời giảm nhu cầu phải tự xây dựng lại các chức năng cơ bản và giảm rủi ro dự án. Cuối cùng, đối với các nhà phát triển hệ thống nhúng, RTOS thể hiện thế mạnh thực sự trong xử lý đa luồng, vì các chức năng tích hợp của nó giúp đơn giản hóa việc lập trình. Ngược lại, việc tự quản lý lịch thực thi, đặc biệt khi chỉ làm việc với các chương trình xử lý ngắt, có thể gặp khó khăn về độ tin cậy và độ chính xác. Với một hypervisor tích hợp, các hệ thống lai cũng khả thi; ví dụ, một đồng hồ đo quãng đường có thể hoạt động an toàn cùng với một hệ thống thông tin giải trí, chẳng hạn như trong ô tô.




