Yazılımı gerçek zamanlı olacak şekilde nasıl değiştirebilirim? [kapalı]


9

İlk olarak, gerçek zamanlı sistem programlamasında acemi olduğumu belirtmek isterim. Bu yüzden sorularımın doğru olup olmadığından emin değilim. Bunun için üzgünüm Ama biraz yardıma ihtiyacım var

Kısaca soru: Zor son tarihlere uyduğundan emin olmak için gerçek zamanlı zor yazılımlar nasıl uygulanır? Bazı QNX özelliklerini kullanmak mı gerekiyor? Veya linux, QNX'e bağlantı noktası için yazmak yeterlidir ve varsayılan olarak gerçek zamanlı mı olur?

Tam soru: Linux, Windows, Android ve QNX için süreçler arası iletişim ile bazı karmaşık platformlar arası çoklu işlem yazılımı uyguladık. Programlama dili C ++, diğer kütüphanelerin Boost ve planty kullanıyoruz. Yazılımımız bu işi iyi ve hızlı bir şekilde yapıyor ancak yine de prototip. Üretim amaçları için bunu gerçek zamanlı yapmalıyız. Bazı özelliklerimizin gerçek zamanlı ve çok sağlam olması gerekir, çünkü bunlar çok önemlidir ve yazılımımızı kullanan kişilerin güvenliği bunlara bağlı olabilir. Oldukça hızlı çalışırlar - yüzlerce milisaniyeye kadar. Ancak bu gerçeği nedeniyle sistemimizin gerçekten gerçek zamanlı olduğundan emin değilim (haklı mıyım?).

Yani ana bir soru var: yazılımımızı gerçek zamanlı olarak nasıl değiştirebiliriz? Çok googledim ama nasıl yapacağımı hala bilmiyorum.

Platformlarımız hakkında bazı ek bilgiler: Şu anda yalnızca test amacıyla kullandığımız Linux ve Windows. Android - hala ihtiyacımız olup olmadığına karar vermedik. QNX - üretim için hedef işletim sistemimizdir. Bir sonraki sorumun cevabının "HAYIR" olduğunu tahmin ediyorum :) Ama platformlar arası gerçek zamanlı yazılım (gerçek zamanlı işletim sistemleri (RTOS) ve genel amaçlı işletim sistemleri (GPOS)) uygulamak mümkün müdür?

Muhtemelen tüm gerçek zamanlı özellikleri sadece QNX için uygulamak için çaba göstermeliyiz? Ama hala nasıl yapılacağını anlamıyorum. Birisi bu soruya ışık tutabilir mi?


55
Projeniz güvenlik açısından kritikse, bordronuzda gerçek zamanlı sistemleri anlayan birine gerçekten ihtiyacınız var.
Blrfl

18
Gerçek zamanlı sistem, kodunuzun hızlı ya da yavaş olmasa da, yürütme süresi açısından ne kadar hassas olduğudur.
Pagotti

22
Benim duygu kalmamasıdır değiştirmek , gerçek zamanlı olmaya varolan yazılım size tasarım ve yazma hesabı dikkate alarak, yeni bir yazılım sıfırdan açık gerçek zamanlı kısıtları. Ve sorunuz çok geniş: yazılımınız tam olarak ne yapıyor? Hangi tür gerçek zamanlı sistemde, hangi somut gömülü sistem için (hangi amaç: ticari uçaklarda uçak içi bilgi-eğlence nükleer reaktör kontrolü ile aynı değildir)? Sen gerek sorunuzu düzenlemek kesin çok daha somut, ve onu motive etmek.
Basile Starynkevitch

24
@ Blrfl adlı kullanıcının yorumu. Ve sonra uygun deneyimi olan bir kişiyi kiralayana kadar tekrar tekrar ve tekrar tekrar okuyun. Veya sorumluluk sigortanızın ödenmesini sağlayın. Çünkü gerçek zamanlı gereksinimleri olan güvenlik açısından kritik bir yazılım oluşturuyorsanız ve bu deneyime sahip değilseniz, cezai olarak ihmal edersiniz.
kdgregory

4
Siz istediniz: " platformlar arası gerçek zamanlı yazılım (gerçek zamanlı işletim sistemleri (RTOS) ve genel amaçlı işletim sistemleri (GPOS)) uygulamak mümkün mü? " Tahminim Hayır, aksi takdirde RTOS'lar olmaz var olmak. "Çapraz Platform" "Kutsal Kase" ye oldukça benzer.

Yanıtlar:


38

Hızlı, gerçek zamanlı anlamına gelmez ve gerçek zamanlı hızlı anlamına gelmez.

Gerçek zamanlı, sonucun verildiği tarihin değeri kadar önemli olduğu anlamına gelir. Başka bir deyişle, sonucun doğru bir değeri varsa ancak çok erken veya çok geç verilirse, genel sonuç yanlıştır.

Örneğin, bir video oynatıcı düşünün. Video kareleri doğru oranda görüntülenmezse, kullanıcılar tatmin olmaz. Görüntü ve ses senkronize değilse daha da kötüsü.

Bu örnek, bazı gerçek zamanlı uygulamaların mevcut genel amaçlı işletim sistemlerinde uygulanabileceğini göstermektedir.

Ancak, son teslim süresinin kaçırılmasının sonuçlarına göre zor gerçek zamanlı ve yumuşak gerçek zamanlı arasında bir ayrım vardır: yumuşak gerçek zamanlı sistemlerde, bu sadece bir sıkıntı veya bozulmuş bir hizmettir (birkaç saniye boyunca donmuş görüntüleri düşünün video oynatıcı örneği), bununla birlikte, nükleer enerji santrali gibi zorlu gerçek zamanlı sistemlerde (potansiyel olarak felaket) bir arızadır.


Bay mouviciel, Soruma cevap verdiğin için teşekkürler Gerçek zamanlı olmak için bazı özelliklere ihtiyacımız var. Başka bir zaman yumuşak olabilir gerçek zamanlı olabilir Son tarihleri ​​garanti etmek için nasıl yazılım yazacağımı anlamıyorum? Lütfen bu soruya ışık tutabilir misiniz?
user172825

7
@ user172825 - Bu sorunun yanıtları kütüphanelerin raflarını kapsar. Başlangıç ​​noktaları, "gerçek zamanlı programlama", ilgili wikipedia makalesi veya QNX veya RTEMS gibi RTOS öğreticileri olabilir.
mouviciel

Bu benim için en karmaşık soruydu. Bu konuyla ilgili birçok büyük kitap buldum. Ama bunu birkaç cümle ile açıklamanın mümkün olduğunu umdum. :)
user172825

5
" Bilgisayar Biliminde sadece iki zor şey vardır: önbellek geçersiz kılma ve bir şeyleri adlandırmak. " - Phil Karlton Tamam ve gerçek zamanlı. Burada bir cümle neden iki cümle ile açıklanamayacağını açıklar. Şimdi sizi düzenli olarak programlanan programınıza geri getiriyoruz.

1
Ben "zor gerçek zamanlı" "deterministik zaman" demek genellikle insanlar arasında noktaya yardımcı olur buluyorum.
Ocak'ta

15

As @mouviciel zaten söyledi, hızlı gerçek zamanlı ve çok sayıda gerçek zamanlı tarihleri nispeten hızlı yanıt gerekli olduğunu ima bile, gerçekten iki bağımsız özellikleridir.

Gerçek zamanlı yazılım yazarken, doğru bir yanıtın yanındaki en önemli özellik, yanıtın ne kadar hızlı verileceğini doğru bir şekilde tahmin edebilmenizdir. Zor gerçek zamanlı özellikler için, son bir güç kesintisi olmadan tüm olası koşullar altında son teslim tarihinin karşılanacağını garanti edebilmeniz gerekir.

Tahmin edilemeyen tipik kaynaklar şu adreste bulunabilir:

  • Dinamik bellek ayırma ve çöp toplama
  • (Yüksek öncelik) kesintileri
  • İşletim sistemindeki zamanlayıcı
  • Nesnelerin dinamik oluşturulması ve imhası
  • Büyük miktarlarda koşullu yürütülen kod

Bu alanlardan kaçınmanız gerektiğini söylemiyorum (büyük olasılıkla yapamayacağınız gibi), ancak ilgili özellikler için gerçek zamanlı son teslim tarihlerini karşılayacağınızı tahmin etme kolaylığını nasıl etkileyebileceklerinin farkında olmalısınız.


4
Koşullu olarak yürütülen kodda, çoğu zaman işlemin ucuz olduğu, ancak bazen çok daha pahalı bir işleme dönüşebildiği, örneğin bir vektörün yeniden tahsis edilmesi gerektiğinde eklendiğinde, amortize algoritmalara dikkat edin.
cırcır ucube

2
Bazı durumlarda, milisaniyeye kadar yürütme süresini tahmin ederek WCET analizi yapmanız gerekebilir
Basile Starynkevitch

3
@ user172825: Profil oluşturma yardımcı olabilir, ancak çoğu dil ve kütüphaneleri gerçekten iyi deneyimlemek ve bilmek için gelir.
Bart van Ingen Schenau

3
Gerçek zamanlı zor gereksinimleriniz varsa profil oluşturma yeterince iyi olmayabilir. Eğer çalışma süresi tam olarak deterministik değilse, profilleme size son teslim tarihine kadar her zaman tamamlanacağı izlenimini verebilir, aslında 100'den sadece 99 kez son teslim tarihini karşıladığında. Zor bir gerçek zamanlı gereksiniminiz varsa, - 100 üzerinden 100 kez buluşması gerekiyor.
James_pic

2
@ user172825 Gerçek zamanlı yazılım, beyin ameliyatının tıp için ne olduğunu - doğru bir şekilde çıkarmak için çok fazla deneyim ve beceriye ihtiyacınız var ve ne yaptığınızdan gerçekten, gerçekten emin olmalısınız. Bu projeler, bölgenin uzman bir profesyonelinin gözetiminde daha iyi yapılır. Bunlar, düzenli bir geliştiriciye atabileceğiniz ve "bu şeyi gerçek zamanlı bir sistem olarak çalıştır" diyebileceğiniz bir şey değildir.
T. Sar

8

Gerçek zamanlı iki cümle açıklamasının, gerçek zamanlı bir sistemin, değişen girdilerden değişen çıktılara en kötü yanıt süresini anlamak ve kontrol etmek için tasarlandığını düşünüyorum .

Bu, tüm sistemi kapsayan bir analiz gerektirir. Diyelim ki bir USB klavye ve bir fren servosundan oluşan önemsiz bir sisteminiz var. Bu sistemle ne gibi bir tepki verebilirsiniz? Dikkate almanız gerekebilir:

  • yoklama sıklığı ve bunun ne kadar sürdüğü
  • giriş kesme gecikmesi
  • girdi olayınız olduğunda işletim sistemi bağlam değiştirme zamanı
  • işletim sistemi görev öncelikleri
  • öngörülemeyen yanıt gecikmesini veya OOM olaylarını önlemek için programda dinamik ayırma veya sanal bellek kullanmaktan kaçınmak
  • çöp toplama kullanımından kaçınma
  • O (n) veya yüksek veya öngörülemeyen N'ye sahip daha kötü algoritmalar kullanmaktan kaçınmak (aracınızın eğlence sistemine çok büyük bir çalma listesi yüklemek fren yanıtını yavaşlatır mı?)
  • disk veya ağ gecikmesini dikkate alın (örn. araçlarda CAN veri yolu kullanımı)
  • çıkış kontrol gecikmesi

Bu tür ortamlarda, genellikle MISRA C standartları gibi güvenilirlik için özel bir husus vardır.


Gerçek zamanlı olmanın, bazı durumlarda bir operasyonun deterministik, muhtemelen özyinelemeli veya hatta hesaplanabilir olup olmadığının değerlendirilmesini de içerdiği doğru mudur?

Evet, bunların hepsi "sınırsız" olurdu. Yinelenen algoritmalara, yığın kullanımlarının üst sınırı dayatılmış olması koşuluyla izin verilebilir.
pjc50

5
avoiding use of garbage collection- Olmalı avoiding use of non-deterministic memory management. Çöp toplama gerçek zamanlı olarak yapılabilir ve manuel bellek yönetimi mutlaka deterministik değildir ( mallocC için tipik uygulamaya bakınız ).
8bittree
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.