Sự khác biệt giữa realtime OS (FreeRTos) và non-realtime OS (Linux)

Real time os là gì

Cụm từ real time đã không còn xa lạ với chúng ta. Đa số mọi người đều hiểu ý nghĩa của real time OS là gì – Đó là một OS mà bộ lập lịch của nó phải cho phép 1 task vụ hoàn thành công việc trước một khoảng thời gian định sẵn. Linux không phải là một hệ điều hành real time.

Tuy nhiên, số lượng người hiểu được bản chất đằng sau của việc real time và non real time là không nhiều. Nếu chỉ hiểu về real time OS giống như phần trên, chúng ta sẽ có cảm giác real time OS sẽ chạy nhanh hơn non-real time, vì đơn giản tất các các task vụ trong hệ thống đều được hoàn thành đúng hạn, không còn tình trạng treo máy khi chạy những task vụ nặng như trên Linux.

Vậy realtime OS sẽ có nhược điểm gì? Nếu nó toàn ưu điểm thì tại sao tất cả các OS còn lại không bắt chước để trở thành hệ điều hành real time?

Quay lại một chút để phân tích những điểm cơ bản nhất của bộ lập lịch trong Linux.Trong Linux, các task có độ ưu tiên khác nhau, tuy nhiên mọi task đều có cơ hội được cpu xử lý, cho dù nó có độ ưu tiên thấp đến đâu.

Tại sao Linux lại làm được việc đó? Đơn giản là độ ưu tiên của các task sẽ được thay đổi liên tục chứ không được gắn cố định, một task càng lâu không được chạy thì độ ưu tiên của nó sẽ tăng dần lên, cho đến một thời điểm nào đó thì độ ưu tiên của nó sẽ đủ cao để được cpu xử lý. Sau khi được cpu xử lý thì độ ưu tiên của nó sẽ lại giảm đi, tuy nhiên sẽ lớn hơn hoặc bằng độ ưu tiên ban đầu của task. Chính vì Linux được thiết kế để mọi task vụ đều có khả năng được chạy, bất kể trong hệ thống có 1 task vụ có độ ưu tiên cao đến đâu, nên Linux được gọi tên là hệ điều hành đa nhiệm. Nếu không thiết kế như vậy thì người dùng sẽ không thể vừa quét virus vừa lướt web được.

Tuy nhiên, nhược điểm của Linux chính là nó chỉ đảm bảo 1 task vụ sẽ được chạy chứ không đảm bảo task vụ đó sẽ được hoàn thành trước khoảng thời gian cho phép. Kết quả là nhiều task vụ sẽ hoàn thành công việc quá muộn. Ví dụ như nhiều khi máy tính bị treo, bạn gõ chữ nhưng phải 1 phút sau chữ đó mới hiện lên màn hình, kết quả hiện lên màn hình lúc đó đã không còn ý nghĩa gì nữa.

Tiếp theo là các hệ điều hành real time OS như FreeRTos. Trong FreeRTos, mỗi task vụ đều được cố định cứng độ ưu tiên khi chúng được tạo ra. FreeRTos sẽ không tự động thay đổi lại độ ưu tiên của các task. Kết quả là task vụ có độ ưu tiên cao nhất luôn được cpu thực thi đến khi nó hoàn thành. Sau đó cpu sẽ tiếp tục xử lý task vụ có độ ưu tiên cao thứ 2,…

Ngoài ra, bộ lập lịch sẽ tính toán sắp xếp các task cho cpu sao cho tối đa hóa các task vụ được hoàn thành đúng deadline. Như vậy những task vụ có độ ưu tiên thấp sẽ có khả năng vĩnh viễn không được cpu thực hiện. Ví dụ: 1 task vụ có độ ưu tiên cao chui vào 1 vòng lặp vĩnh viễn.

Tuy nhiên, đối với 1 hệ thống có ít chức năng thì 1 hệ điều hành thời gian thực sẽ tin cậy về mặt xử lý hơn hệ điều hành như Linux. Đơn giản là người lập trình viên có thể chủ động quyết định độ ưu tiên cho tất cả các task vụ có thể xuất hiện trong hệ thống, từ đó anh ta luôn chắc chắn trong mọi tình huống, task vụ nào sẽ phải được hoàn thành trước. Ví dụ: trong hệ thống ô tô, thì task vụ mở túi khí phải luôn được hoàn thành trước dead line, bất kể các task khác trong hệ thống đang trong tình trạng nào.


Như vậy tóm tắt lại thì mỗi bộ lập lịch hay mỗi OS sẽ có ưu nhược điểm riêng. Về độ tin cậy thì real time OS – FreeRTos hơn, về khả năng xử lý nhiều task vụ cùng một lúc thì Linux hơn.

(P/S: Bài viết trên khi viết về phần lập lịch trên hệ điều hành Linux có một lỗ hổng lớn (do mình muốn trình bày vấn đề một cách đơn giản nhất). Nếu bạn nào hay làm về driver của Linux thì sẽ biết điểm thiếu sót của mình nằm ở đâu)

Link tham khảo: https://www.embedded.com/…/Comparing-the-real-time…

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top