Java / Linux yığınının "gerçek zamanlı" olmamasının nedenleri nelerdir?


20

Sık sık geliştiriciler Java "olamayacağını söz duymuş do Gerçek Zamanlı böyle bir şey vb RIOT-OS üzerinde çalışan bir deterministik gerçek zamanlı sistem gereksinimlerini karşılamak olamaz Linux üzerinde çalışan bir Java uygulaması anlamına gelen"

Nedenini anlamaya çalışıyorum . Benim SWAG bu muhtemelen herhangi bir zamanda çalışacak ve tamamen sistem duraklatabileceğinizi Java'nın Çöp Toplayıcı, büyük ölçüde kaynaklanmaktadır söylüyor. Ve orada "pauseless GC'ler" olmasına rağmen, reklamlarına mutlaka inanmıyorum ve aynı zamanda bir hobi projesi için çatallanacak JVM örneği başına 80.000 $ 'ım yok!

Ayrıca drone yazılımını Linux'ta çalıştırmakla ilgili bu makaleyi okuyordum . Bu makalede yazar, Linux'un neredeyse drone'unun arabasına çarpmasına neden olduğu bir senaryoyu açıklıyor:

Pi'de düşük seviye kontrol döngüsünü (PID'ler) seçtikten sonra zor bir ders öğrendim - akıllı olmaya çalışıyorum, hata ayıklamak için döngünün ortasına bir günlük yazmaya karar verdim - dört başlangıçta iyi uçtu ama Linux karar verdi bir günlük girişi yazmak için 2 saniye almak ve dört neredeyse arabama çarptı!

Şimdi bu yazar drone yazılımını C ++ 'da yazmasına rağmen, Linux üzerinde çalışan bir Java uygulamasının aynı kaderi çok iyi etkileyebileceğini hayal ediyorum.

Wikipedia'ya göre:

Bir işlemin toplam doğruluğunun sadece mantıksal doğruluğuna değil, aynı zamanda gerçekleştirildiği zamana da bağlı olması durumunda, sistemin gerçek zamanlı olduğu söylenir.

Yani bana, bu araçlar " toplam doğruluğu mantıksal doğruluğunu ve güncelliğini gerektiriyorsa gerçek zamanlı yok. "

Süper bir performans için bir Java uygulaması yazdım ve konuşabilmek için "limonu sıktım" gibi davranalım ve daha hızlı olması için makul bir şekilde (Java'da) yazılamazdı.

Sonuçta, sorum şu: Birini bana açıklayacak birini arıyorum / n Linux çalıştıran bir Java uygulamasının bir "gerçek zamanlı uygulama" olmasının nedenlerinin çoğunu. Yani, bir Java / Linux yığınında "zamanında" olmasını ve dolayısıyla " tamamen doğru " olmasını engelleyen tüm kategoriler nelerdir? Belirtildiği gibi, GC ve Linux log-flushing yürütmeyi duraklatabilir, ancak Java uygulamasının dışında kötü zamanlama / performansa neden olacak ve zor son tarih kısıtlamalarına uymasına neden olacak daha fazla şey olduğundan eminim. Onlar neler?


3
Bkz JSR001
coredump

1
FWIW, Linux, zor gerçek zamanlı sistemler için uygun şekillerde davranmak için yapılabilir, ancak tipik hobi gömülü geliştiriciler tarafından gözden kaçabilecek birkaç teknik içerir. Linux gerçek zamanlı gelişim için iyi kitaplar vardır; Bir tane almanızı öneririm.
Jules

@coredump ne yazık ki, jsr-1 uygulamaları listesinde görebildiğim kadarıyla, şu anda ikisi mevcut olmayan dört uygulama daha vardı ve diğer ikisi muhtemelen oldukça pahalı ticari teklifler gibi görünüyor sorucunun fiyat aralığının
Jules

Yanıtlar:


28

Bir yazılım, mümkün olduğu kadar hızlı olduğunda değil, belirli bir zaman diliminde bir işlemin tamamlandığı garanti edildiğinde gerçek zamandır. Yumuşak bir gerçek zamanlı sistemde, bunun garanti edilmesi iyidir ancak kesinlikle gerekli değildir. Örneğin bir oyunda, bir kare için gerekli hesaplamalar bir kare süresi içinde tamamlanmalıdır, yoksa kare hızı düşecektir. Bu, oyunun kalitesini düşürür, ancak yanlış yapmaz. Örneğin, oyun ara sıra kekelemesine rağmen Minecraft eğlencelidir.

Zor gerçek zamanlı bir sistemde, böyle özgürlüklere sahip değiliz. Uçuş kontrol yazılımının bir süre içinde tepki vermesi gerekir, aksi takdirde araç kilitlenebilir. Ve donanım, işletim sistemi ve yazılım gerçek zamanlı olarak desteklenmelidir.

Örneğin, işletim sisteminin hangi iş parçacığının ne zaman çalıştırılacağına karar verecek bir zamanlayıcısı vardır. Gerçek zamanlı bir program için, programlayıcı yeterince büyük, sık sık zaman aralığı garanti etmelidir. Böyle bir alanda yürütmek isteyen diğer tüm süreçler, gerçek zamanlı süreç lehine kesilmelidir. Bu, açık gerçek zamanlı desteğe sahip bir zamanlayıcı gerektirir.

Ayrıca, bir kullanıcı-alanı programı çekirdeğe sistem çağrıları yapacaktır. Gerçek zamanlı bir işletim sisteminde, bunlar da gerçek zamanlı olmalıdır. Örneğin, bir dosya tanıtıcısına yazmanın , günlük sorununu çözecek olan x zaman biriminden fazlasını alması garanti edilmemelidir . Bu, böyle bir sistem çağrısının nasıl uygulanabileceğini, örneğin tamponların nasıl kullanılabileceğini etkiler. Ayrıca, bir çağrının gereken süre içinde tamamlanamaması ve kullanıcı-uzay programının bu durumlarla başa çıkmaya hazır olması gerektiği anlamına gelir. Java durumunda, JVM ve standart kütüphane de çekirdek gibidir ve açık gerçek zamanlı desteğe ihtiyaç duyarlar.

Gerçek zamanlı olan herhangi bir şey için programlama stiliniz değişecektir. Sonsuz zamanınız yoksa, kendinizi küçük problemlerle sınırlamanız gerekir. Tüm döngüleriniz bir sabitle sınırlanmış olmalıdır. Boyut üzerinde bir üst sınırınız olduğundan tüm bellek statik olarak ayrılabilir. Sınırsız özyineleme yasaktır. Bu birçok iyi uygulamaya aykırıdır, ancak gerçek zamanlı sistemler için geçerli değildir. Örneğin bir kayıt sistemi, günlük mesajlarını yazarken depolamak için statik olarak tahsis edilmiş bir halka tamponu kullanabilir. Başlangıç ​​durumuna ulaşıldığında, eski günlükler atılır veya bu koşul bir hata olabilir.


4

Gönderen wikipedia :

Bir RTOS'un temel özelliği, bir uygulamanın görevini kabul etmek ve tamamlamak için geçen süre ile ilgili tutarlılık düzeyidir; değişkenlik değişkendir.

Önemli olan, sistemin gerçek zamanlı olarak değerlendirilmesi için titreşimin nicelendirilmesidir . Makale, jitter genellikle sınırlıysa, sistemin gerçek zamanlı yumuşak olduğunu söyler . Titreşim her zaman sınırlıysa, sistem gerçek zamanlı olarak zordur .

Kullandığınız Java ve Linux sürümleri titreşim açısından ölçülmedikçe, gerçek zamanlı değildirler . Çöp toplama ve günlük yazma kesinlikle titreşim kaynaklarıdır, ancak (örneğin) ağ paketlerinin otonom işlenmesi bile , süreçlerinize titreşim kazandırırsa sayılır .


1

Başlangıç ​​olarak, vanilya Linux'un kendisi gerçek zamanlı yapamaz. Bu yüzden RTLinux geliştirildi.

RTLinux üzerinde birkaç java işlemi çalıştırdığınızı söyleyelim, tüm bu işlemler çekirdek tarafından zamanlandığı için gerçek zamanlı olarak değerlendirileceklerini, yani bir işlem geç kalırsa, diğer işlemlerin hala cpu zaman dilimine sahip olabileceğini garanti ediyoruz.

Java süreçleri Yeşil iş parçacıkları çalıştırıyorsa , JVM gerçek zamanlı zamanlama yapmadığı için bu iş parçacıklarının yürütülmesi artık gerçek zamanlı olmayacaktır.

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.