실시간으로 소프트웨어를 수정하는 방법? [닫은]


9

처음으로 나는 실시간 시스템 프로그래밍에 익숙하지 않다고 말하고 싶습니다. 이것이 내 질문이 올바른지 확실하지 않은 이유입니다. 미안하지만 도움이 필요해

한마디로 질문 : 하드 실시간 소프트웨어를 구현하여 어려운 기한을 맞추는 방법 일부 QNX 기능을 사용해야합니까? 아니면 리눅스, QNX 포트로 작성하기에 충분하며 기본적으로 실시간입니까?

전체 질문 : Linux, Windows, Android 및 QNX에 대한 프로세스 간 통신을 통해 복잡한 크로스 플랫폼 멀티 프로세스 소프트웨어를 구현했습니다. 프로그래밍 언어는 C ++이며 다른 라이브러리의 Boost와 planty를 사용합니다. 우리의 소프트웨어는 신속하고 잘 작동하지만 여전히 프로토 타입입니다. 프로덕션 목적을 위해서는 실시간으로해야합니다. 일부 기능은 매우 중요하고 소프트웨어를 사용하는 사람들의 안전에 의존 할 수 있기 때문에 실시간으로 강력해야합니다. 그들은 수백 밀리 초까지 매우 빠르게 작동합니다. 그러나이 사실 때문에 우리 시스템이 실제로 실시간인지 확실하지 않습니다 (맞습니까?).

소프트웨어를 실시간으로 수정하는 방법은 무엇입니까? 나는 많은 구글 검색을했지만 여전히 어떻게 해야할지 모르겠다.

당사 플랫폼에 대한 추가 정보 : 현재 Linux 및 Windows는 테스트 목적으로 만 사용합니다. 안드로이드-우리는 여전히 필요한지 결정하지 않았습니다. QNX-프로덕션을위한 대상 OS입니다. 다음 질문에 대한 답은 "아니오"라고 생각합니다.) 크로스 플랫폼 실시간 소프트웨어 (실시간 OS (RTOS) 및 범용 OS (GPOS))를 구현할 수 있습니까?

QNX에 대해서만 모든 실시간 기능을 구현하기 위해 노력해야합니까? 그러나 나는 아직도 그것을하는 방법을 이해하지 못합니다. 누군가이 질문에 빛을 비출 수 있습니까?


55
프로젝트가 안전에 중요한 경우 실제로 급여 시스템의 실시간 시스템을 이해하는 사람이 필요합니다.
Blrfl

18
실시간 시스템은 코드가 빠르 든 느리 든 실행 시간과 관련하여 코드가 얼마나 정확한지입니다.
Pagotti

22
내 생각은 기존 소프트웨어를 실시간으로 수정 하지 않고 명시적인 실시간 제약 조건 을 고려하여 새로운 소프트웨어를 처음부터 새로 디자인 하고 작성 한다는 것 입니다. 귀하의 질문이 너무 광범위합니다. 소프트웨어가 정확히 무엇을하고 있습니까? 어떤 종류의 실시간 시스템, 어떤 구체적인 종류의 임베디드 시스템 (어떤 목적 : 상업용 항공기의 기내 인포테인먼트는 원자로 제어와 동일하지 않음)? 보다 구체적이고 정확하며 동기를 부여 하려면 질문편집해야 합니다.
Basile Starynkevitch

24
@Blrfl 님의 댓글을 다시 읽어보세요. 그런 다음 적절한 경험을 가진 사람을 고용 할 때까지 계속해서 다시 읽어보십시오. 또는 귀하의 책임 보험이 지불되었는지 확인하십시오. 실시간 요구 사항으로 안전에 중요한 소프트웨어를 작성하고 있으며 그러한 경험이없는 경우 범죄 적으로 소홀히하기 때문입니다.
kdgregory

4
" 여러 플랫폼 간 실시간 소프트웨어를 구현할 수 있습니까 (실시간 OS (RTOS) 및 범용 OS (GPOS) 용)? "내 추측은 아니오입니다. 그렇지 않으면 RTOS는 있다. "크로스 플랫폼"은 "성배"와 매우 유사합니다.

답변:


38

빠른 것은 실시간을 의미하지 않으며 실시간은 빠른 것을 의미하지 않습니다.

실시간은 결과가 제공되는 날짜가 그 가치만큼 중요하다는 것을 의미합니다. 즉, 결과의 값은 정확하지만 너무 일찍 또는 너무 늦게 전달되면 전체 결과가 잘못됩니다.

예를 들어 비디오 플레이어를 생각해보십시오. 비디오 프레임이 올바른 비율로 표시되지 않으면 사용자는 만족하지 않습니다. 이미지와 사운드가 동기화되어 있지 않으면 더 나쁩니다.

이 예는 일부 실시간 애플리케이션이 현재 범용 OS에서 구현 될 수 있음을 보여줍니다.

그러나 마감 시간 미스의 결과와 관련하여 하드 실시간과 소프트 실시간 사이에는 차이가 있습니다. 원자력 발전소와 같은 실시간 시스템에서는 (잠재적으로 치명적인) 고장입니다.


Mr. mouviciel, 내 질문에 답변 해 주셔서 감사합니다. 실시간으로 어려운 일부 기능이 필요합니다. 이 질문에 빛을 비출 수 있습니까?
user172825

7
@ user172825-이 질문에 대한 답변은 도서관의 선반을 포함합니다. 시작점은 "실시간 프로그래밍", 관련 Wikipedia 기사 또는 QNX 또는 RTEMS와 같은 RTOS의 자습서를 인터넷 검색 할 수 있습니다.
mouviciel

가장 복잡한 질문이었습니다. 이 주제에 관한 많은 책을 발견했습니다. 그러나 나는 그것을 두 문장으로 설명하는 것이 가능하기를 희망했다. :)
user172825

5
" 컴퓨터 과학에는 캐시 무효화 및 이름 지정 작업이라는 두 가지 어려운 작업 만 있습니다. "-Phil Karlton OK 및 실시간. 한 문장으로 왜 두 문장으로 설명 할 수 없는지 설명합니다. 이제 정기적으로 예약 된 프로그래밍으로 돌아갑니다.

1
나는 "하드 실시간"을 "결정 론적 시간"이라고 부르는 것이 사람들에게 도움을주는 데 도움이된다.
whatsisname

15

으로 @mouviciel은 이미 말했다 빠른 실시간으로 많은 실시간 마감이 상대적으로 빠른 응답이 필요한 것을 의미에도 불구하고, 정말 두 개의 독립적 인 속성입니다.

실시간 소프트웨어를 작성할 때 올바른 응답 옆에있는 가장 중요한 속성은 응답 속도를 정확하게 예측할 수 있다는 것입니다. 어려운 실시간 기능의 경우 완전한 정전이되지 않는 모든 가능한 조건에서 마감 시간이 충족되도록 보장 할 수 있어야합니다.

예측할 수없는 일반적인 원인은 다음에서 찾을 수 있습니다.

  • 동적 메모리 할당 및 가비지 수집
  • (높은 우선 순위) 인터럽트
  • OS의 스케줄러
  • 객체의 동적 생성 및 파괴
  • 조건부로 실행되는 대량의 코드

나는 당신이 그 영역을 피해야한다고 말하지는 않지만 (당신이 할 수없는 것처럼), 당신이 그것들이 관련 기능에 대한 실시간 마감 기한을 충족시킬 것으로 예측하기 쉬워지는 데 어떻게 영향을 줄 수 있는지 알아야합니다.


4
조건부로 실행되는 코드에서는 대부분의 경우 연산이 저렴하지만 때로는 벡터가 재 할당 될 때 벡터가 추가되는 경우와 같이 더 비싼 연산으로 바뀔 수있는 상각 알고리즘에주의해야합니다.
ratchet freak

2
경우에 따라 실행 시간을 밀리 초로 예측 하여 WCET 분석 을 수행해야 할 수도 있습니다.
Basile Starynkevitch

3
@ user172825 : 프로파일 링이 도움이 될 수 있지만 대부분 언어와 라이브러리를 경험하고 잘 알고 있습니다.
Bart van Ingen Schenau

3
실시간 요구 사항이 까다로운 경우 프로파일 링이 충분하지 않을 수 있습니다. 런타임이 완전히 결정적이지 않은 경우 프로파일 링을 수행하면 마감 시간이 실제로 100 일 중 99 회만 충족하는 경우 항상 마감일까지 완료 될 것이라는 인상을 줄 수 있습니다. 실시간 요구 사항이 까다로울 경우 100에서 100 번 그것을 충족해야합니다.
James_pic

2
@ user172825 실시간은 뇌 수술이 의학에 사용되는 소프트웨어를위한 것입니다.이를 제대로 풀려면 많은 경험과 기술이 필요하며 실제로하고있는 일을 정말로 확신해야합니다. 해당 프로젝트는 해당 지역의 숙련 된 전문가의 감독하에 더 잘 이루어집니다. 그것들은 일반 개발자에게 던질 수있는 것이 아니며 "이것이 실시간 시스템처럼 작동하게한다"고 말합니다.
T. Sar

8

나는 실시간의 두 문장의 설명은 실시간 시스템이 설계되어 있다는 것입니다 가정 을 이해하고 제어 최악의 경우 변경 출력으로 변경 입력으로부터 응답 시간을.

이를 위해서는 전체 시스템을 포괄하는 분석이 필요합니다. USB 키보드와 브레이크 서보로 구성된 사소한 시스템이 있다고 가정 해 봅시다. 이 시스템으로 어떤 반응을 얻을 수 있습니까? 다음을 고려해야 할 수도 있습니다.

  • 입력 폴링 빈도 및 소요 시간
  • 입력 인터럽트 대기 시간
  • 입력 이벤트가 있으면 운영 체제 컨텍스트 전환 시간
  • 작업의 운영 체제 우선 순위
  • 예상치 못한 응답 지연 또는 OOM 이벤트를 피하기 위해 프로그램에서 동적 할당 또는 가상 메모리 사용 방지
  • 가비지 콜렉션 사용 방지
  • 높거나 예측할 수없는 N으로 O (n) 또는 더 나쁜 알고리즘의 사용을 피하십시오 (차량의 엔터테인먼트 시스템에 매우 큰 재생 목록을로드하면 제동 반응이 느려 집니까?)
  • 디스크 또는 네트워크 대기 시간 고려 (예 : 자동차에서 CAN 버스 사용)
  • 출력 제어 대기 시간

이러한 종류의 환경에서는 일반적으로 MISRA C 표준과 같은 신뢰성에 대한 특별한 고려 사항도 있습니다.


또한 실시간으로 작업이 결정적이거나 재귀 적이거나 심지어 계산 가능한지 여부를 고려하는 것도 포함되는 것이 사실입니까?

그렇습니다. 모든 것은 "무한"입니다. 재귀 알고리즘은 스택 사용량에 상한이있는 경우 허용됩니다.
pjc50

5
avoiding use of garbage collection-이어야합니다 avoiding use of non-deterministic memory management. 가비지 콜렉션은 실시간 으로 수행 할 수 있으며 수동 메모리 관리는 반드시 결정적인 것은 아닙니다 ( mallocC 의 일반적인 구현 참조 ).
8bittree
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.