Mars Pathfinder: Nguyên nhân thực sự của các reset hệ thống

Phân tích sự cố reset liên tục của tàu đổ bộ Mars Pathfinder năm 1997 do hiện tượng priority inversion trong VxWorks.

Mars Pathfinder: Nguyên nhân thực sự của các reset hệ thống

NASA đã đưa tàu đổ bộ Mars Pathfinder và rover Sojourner lên sao Hỏa vào năm 1997. Sau vài ngày hoạt động, tàu đổ bộ liên tục gặp các reset toàn bộ hệ thống, buộc phải khởi động lại bằng watchdog timer.

Điểm chính

Nguyên nhân gốc rễ của các reset là hiện tượng priority inversion . Khi một tác vụ có ưu tiên thấp giữ mutex mà một tác vụ có ưu tiên cao cần, tác vụ cao sẽ bị chặn. Trong trường hợp của Pathfinder, có ba tác vụ:

  • Tác vụ ưu tiên cao : phân phối dữ liệu.
  • Tác vụ ưu tiên trung bình : bảo trì bus.
  • Tác vụ ưu tiên thấp : xử lý dữ liệu khí tượng học.

Vấn đề xảy ra khi tác vụ ưu tiên thấp chiếm mutex và mất thời gian thực thi trước khi giải phóng. Tác vụ ưu tiên cao sau đó không thể lấy mutex, nhưng tác vụ trung bình lại chiếm CPU, khiến tác vụ thấp không được lên lịch lại. Kết quả, tác vụ cao đang chờ một tài nguyên không thể được giải phóng – đó là priority inversion.

Trong quá trình thử nghiệm, các kỹ sư đã ghi nhận hiện tượng này nhưng cho rằng chỉ là lỗi ngẫu nhiên. Hệ điều hành thời gian thực VxWorks, được sử dụng trên Pathfinder, hỗ trợ cơ chế priority inheritance . Khi bật tính năng này cho mutex liên quan, hệ thống sẽ tự động nâng ưu tiên của tác vụ thấp để nó có thể hoàn thành và giải phóng mutex, nhờ đó ngăn ngừa priority inversion.

💡 Góc nhìn kỹ thuật Hagapa

Hiện tượng priority inversion là bài học quan trọng cho mọi hệ thống nhúng IoT và PCCC, nơi các tác vụ thời gian thực chia sẻ tài nguyên chung. Khi thiết kế firmware cho cảm biến công nghiệp hoặc thiết bị an toàn, chúng ta nên luôn kích hoạt cơ chế priority inheritance (nếu RTOS hỗ trợ) và thực hiện kiểm thử stress đa tác vụ để phát hiện sớm. Đối với các dự án sử dụng VxWorks, FreeRTOS hoặc Zephyr, việc cấu hình mutex đúng cách sẽ giảm nguy cơ hệ thống bị treo hoặc reset không mong muốn.

Nguồn tham khảo: Hackaday