Làm thế nào để sửa đổi phần mềm để trở thành thời gian thực? [đóng cửa]


9

Đầu tiên tôi muốn đề cập rằng tôi là người mới trong lập trình hệ thống thời gian thực Đó là lý do tại sao tôi không chắc câu hỏi của mình có đúng không. Xin lỗi vì điều đó Nhưng tôi cần sự giúp đỡ

Câu hỏi ngắn gọn: Làm thế nào để thực hiện phần mềm thời gian thực cứng để đảm bảo nó đáp ứng thời hạn khó? Có cần thiết phải sử dụng một số tính năng QNX? Hoặc nó chỉ đủ để viết nó cho linux, port sang QNX và nó sẽ là thời gian thực theo mặc định?

Câu hỏi đầy đủ: Chúng tôi đã triển khai một số phần mềm đa xử lý đa nền tảng phức tạp với việc chuyển đổi liên quy trình cho Linux, Windows, Android và QNX. Ngôn ngữ lập trình là C ++, chúng tôi sử dụng Boost và planty của các lib khác. Phần mềm của chúng tôi hoạt động tốt và nhanh chóng nhưng nó vẫn là nguyên mẫu. Đối với mục đích sản xuất, chúng tôi cần thực hiện theo thời gian thực Một số tính năng của chúng tôi phải là thời gian thực và rất mạnh mẽ vì chúng rất quan trọng và an toàn cho những người sử dụng phần mềm của chúng tôi có thể phụ thuộc vào chúng. Chúng hoạt động khá nhanh - lên tới hàng trăm mili giây. Nhưng tôi không chắc rằng hệ thống của chúng tôi thực sự là thời gian thực vì thực tế này (tôi có đúng không?).

Vì vậy, có một câu hỏi chính: làm thế nào để sửa đổi phần mềm của chúng tôi thành thời gian thực? Tôi đã googled rất nhiều nhưng tôi vẫn không biết làm thế nào để làm điều đó.

Một số thông tin bổ sung về các nền tảng của chúng tôi: Linux và Windows chúng tôi hiện chỉ sử dụng cho mục đích thử nghiệm. Android - chúng tôi vẫn chưa quyết định liệu chúng tôi có cần nó hay không. QNX - là hệ điều hành mục tiêu của chúng tôi để sản xuất. Tôi đoán câu trả lời cho câu hỏi tiếp theo của tôi là "KHÔNG" :) Nhưng liệu có thể hoàn toàn cài đặt phần mềm thời gian thực đa nền tảng (cho HĐH thời gian thực (RTOS) cũng như cho các HĐH đa năng (GPOS)) không?

Có lẽ chúng ta cần nỗ lực để thực hiện tất cả các tính năng thời gian thực chỉ dành cho QNX? Nhưng tôi vẫn không hiểu làm thế nào để làm điều đó. Ai đó có thể làm sáng tỏ câu hỏi này?


55
Nếu dự án của bạn là an toàn quan trọng, bạn thực sự cần một người hiểu hệ thống thời gian thực trong bảng lương của bạn.
Blrfl

18
Hệ thống thời gian thực là mã của bạn chính xác đến mức nào về thời gian thực hiện, không phải là nhanh hay chậm.
Pagotti

22
Tôi cảm thấy rằng bạn không sửa đổi một phần mềm hiện có để trở thành thời gian thực, bạn thiết kếviết từ đầu một phần mềm mới, có tính đến các ràng buộc thời gian thực ràng. Và câu hỏi của bạn quá rộng: chính xác phần mềm của bạn đang làm gì? Trên loại hệ thống thời gian thực chính xác nào, đối với loại hệ thống nhúng cụ thể nào (mục đích gì: thông tin giải trí trên máy bay thương mại không giống như điều khiển lò phản ứng hạt nhân)? Bạn cần chỉnh sửa câu hỏi của mình để cụ thể hơn, chính xác hơn và thúc đẩy nó.
Basile Starynkevitch

24
Đọc lại bình luận của Blrfl. Và sau đó đọc lại nó lần nữa, lần nữa và lần nữa cho đến khi bạn thuê một người có kinh nghiệm thích hợp. Hoặc đảm bảo rằng bảo hiểm trách nhiệm của bạn đã được thanh toán. Bởi vì nếu bạn đang tạo phần mềm quan trọng về an toàn với các yêu cầu trong thời gian thực và không có trải nghiệm đó, thì bạn đang sơ suất.
kdgregory

4
Bạn đã hỏi: " hoàn toàn có thể triển khai phần mềm thời gian thực đa nền tảng (cho hệ điều hành thời gian thực (RTOS) cũng như cho các hệ điều hành có mục đích chung (GPOS)) không? " Tôi đoán là không, nếu không thì RTOS sẽ không hiện hữu. "Nền tảng chéo" khá giống với "Chén thánh".

Câu trả lời:


38

Nhanh không có nghĩa là thời gian thực và thời gian thực không có nghĩa là nhanh.

Thời gian thực có nghĩa là ngày mà kết quả được phân phối cũng quan trọng như giá trị của nó. Nói cách khác, nếu kết quả có giá trị đúng nhưng được phân phối quá sớm hoặc quá muộn, thì kết quả chung là sai.

Ví dụ, nghĩ về một trình phát video. Nếu khung hình video không được hiển thị ở mức phù hợp, người dùng sẽ không hài lòng. Tệ hơn nếu hình ảnh và âm thanh không đồng bộ.

Ví dụ này cho thấy một số ứng dụng thời gian thực có thể được triển khai trên các HĐH có mục đích chung hiện tại.

Nhưng có một sự khác biệt giữa thời gian thực cứng và thời gian thực mềm đối với hậu quả của việc bỏ lỡ thời hạn: trong các hệ thống thời gian thực mềm, đây chỉ là một sự phiền toái hoặc dịch vụ xuống cấp (nghĩ về hình ảnh bị đóng băng trong vài giây ví dụ về trình phát video), trong khi đó là một sự cố (có khả năng thảm khốc) trong hệ thống thời gian thực cứng, chẳng hạn như trong một nhà máy điện hạt nhân.


Ông mouviciel, Cảm ơn bạn đã trả lời câu hỏi của tôi Chúng tôi cần một số tính năng để cứng thời gian thực khác có thể mềm thời gian thực Tôi không hiểu cách viết phần mềm để đảm bảo thời hạn? Bạn có thể làm sáng tỏ câu hỏi này?
dùng172825

7
@ user172825 - Câu trả lời cho câu hỏi này bao gồm các kệ thư viện. Điểm khởi đầu có thể là "lập trình thời gian thực", bài viết trên wikipedia liên quan hoặc hướng dẫn về RTOS như QNX hoặc RTEMS.
mouviciel

Đó là câu hỏi phức tạp nhất đối với tôi. Tôi tìm thấy rất nhiều cuốn sách lớn liên quan đến chủ đề này. Nhưng tôi hy vọng có thể giải thích nó trong vài câu. :)
dùng172825

5
" Chỉ có hai điều khó trong Khoa học Máy tính: vô hiệu hóa bộ đệm và đặt tên cho mọi thứ. " - Phil Karlton OK, và thời gian thực. Ở đó, một câu giải thích tại sao nó không thể được giải thích trong hai câu. Bây giờ chúng tôi đưa bạn trở lại chương trình thường xuyên theo lịch trình của bạn.

1
Tôi thấy việc gọi "thời gian thực cứng" là "thời gian xác định" thường giúp mọi người hiểu rõ hơn.
whatsisname

15

Như @mouviciel đã nói, thời gian thực và nhanh thực sự là hai thuộc tính độc lập, mặc dù nhiều thời hạn thực tế ngụ ý rằng cần có một phản ứng tương đối nhanh.

Khi viết phần mềm thời gian thực, thuộc tính quan trọng nhất bên cạnh phản hồi chính xác là bạn có thể dự đoán chính xác tốc độ phản hồi sẽ được cung cấp nhanh như thế nào. Đối với các tính năng thời gian thực cứng, bạn thậm chí phải có thể đảm bảo rằng thời hạn sẽ được đáp ứng trong mọi điều kiện có thể xảy ra khi thiếu điện hoàn toàn.

Các nguồn điển hình của sự khó lường có thể được tìm thấy trong

  • Phân bổ bộ nhớ động và bộ sưu tập rác
  • (Ưu tiên cao hơn) ngắt
  • Bộ lập lịch trong HĐH
  • Sáng tạo và phá hủy các đối tượng
  • Một lượng lớn mã được thực hiện có điều kiện

Tôi không nói rằng bạn phải tránh các khu vực đó (vì rất có thể bạn không thể), nhưng bạn phải biết làm thế nào chúng có thể ảnh hưởng đến sự dễ dàng mà bạn có thể dự đoán rằng bạn sẽ đáp ứng thời hạn thực cho các tính năng có liên quan.


4
Trong mã được thực hiện có điều kiện, hãy cẩn thận với các thuật toán được khấu hao, trong đó phần lớn thời gian hoạt động là rẻ nhưng đôi khi có thể chuyển thành hoạt động đắt hơn nhiều, ví dụ khi một vectơ thêm khi cần phân bổ lại.
ratchet quái dị

2
Trong một số trường hợp, bạn có thể cần thực hiện phân tích WCET , dự đoán thời gian thực hiện đến mili giây
Basile Starynkevitch

3
@ user172825: Hồ sơ có thể giúp ích, nhưng phần lớn trong số đó là để trải nghiệm và biết ngôn ngữ và thư viện thực sự tốt.
Bart van Ingen Schenau

3
Hồ sơ có thể không đủ tốt nếu bạn có yêu cầu thời gian thực khó. Nếu thời gian chạy không hoàn toàn xác định, thì việc lập hồ sơ có thể mang lại cho bạn ấn tượng rằng nó sẽ luôn hoàn thành đúng hạn, khi thực tế nó chỉ đáp ứng thời hạn 99 lần trong số 100. Nếu bạn có yêu cầu thời gian thực khó khăn, thì nó cần phải đáp ứng 100 lần trong số 100.
James_pic

2
@ user172825 Thời gian thực dành cho phần mềm phẫu thuật não là gì cho y học - bạn cần có nhiều kinh nghiệm và kỹ năng để thực hiện chính xác và bạn phải thực sự, thực sự chắc chắn về những gì bạn đang làm. Những dự án này được thực hiện tốt hơn dưới sự giám sát của một chuyên gia lành nghề của khu vực. Chúng không phải là thứ bạn có thể ném cho một nhà phát triển thông thường và nói "làm cho thứ này hoạt động như một hệ thống thời gian thực".
T. Sar

8

Tôi cho rằng lời giải thích hai câu của thời gian thực là một hệ thống thời gian thực được thiết kế để hiểu và kiểm soát các trường hợp xấu nhất thời gian đáp ứng từ đầu vào thay đổi để kết quả đầu ra thay đổi.

Điều đó đòi hỏi một phân tích bao gồm toàn bộ hệ thống. Giả sử bạn có một hệ thống tầm thường bao gồm bàn phím USB và servo phanh. Khả năng đáp ứng nào bạn có thể đạt được với hệ thống này? Bạn có thể phải xem xét:

  • tần suất bỏ phiếu đầu vào, và điều này mất bao lâu
  • độ trễ ngắt đầu vào
  • thời gian chuyển đổi bối cảnh hệ điều hành một khi bạn có một sự kiện đầu vào
  • ưu tiên hệ điều hành
  • tránh sử dụng phân bổ động hoặc bộ nhớ ảo trong chương trình, để tránh sự chậm trễ không thể đoán trước hoặc các sự kiện OOM
  • tránh sử dụng thu gom rác
  • tránh sử dụng thuật toán O (n) hoặc tệ hơn với N cao hoặc không dự đoán được (việc tải danh sách phát rất lớn vào hệ thống giải trí trên xe hơi của bạn có làm chậm phản ứng phanh của nó không?)
  • xem xét độ trễ của đĩa hoặc mạng (ví dụ: sử dụng bus CAN trên ô tô)
  • độ trễ kiểm soát đầu ra

Trong loại môi trường này cũng thường có sự xem xét đặc biệt về độ tin cậy, chẳng hạn như các tiêu chuẩn MISRA C.


Có phải cũng đúng là thời gian thực bao gồm việc xem xét liệu một hoạt động có tính xác định, có thể đệ quy hay thậm chí có thể tính toán được trong một số trường hợp không?

Vâng, tất cả những thứ đó sẽ là "không giới hạn". Các thuật toán đệ quy có thể được cho phép miễn là việc sử dụng ngăn xếp của chúng có giới hạn trên được áp đặt cho nó.
pjc50

5
avoiding use of garbage collection- Điều này nên được avoiding use of non-deterministic memory management. Việc thu gom rác có thể được thực hiện trong thời gian thực và quản lý bộ nhớ thủ công không nhất thiết phải xác định (xem phần malloctriển khai điển hình cho C).
8bittree
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.