Bagaimana cara memodifikasi perangkat lunak menjadi real-time? [Tutup]

9

Untuk yang pertama saya ingin menyebutkan bahwa saya pemula dalam pemrograman sistem real-time. Itu sebabnya saya tidak yakin apakah pertanyaan saya benar. Maaf untuk itu Tapi saya butuh bantuan

Pertanyaan singkatnya: Bagaimana menerapkan perangkat lunak waktu nyata yang keras untuk memastikannya memenuhi tenggat waktu yang sulit? Apakah perlu menggunakan beberapa fitur QNX? Atau hanya cukup untuk menulisnya untuk linux, port ke QNX dan itu akan secara real-time secara default?

Pertanyaan lengkap: Kami telah mengimplementasikan beberapa perangkat lunak multi-platform lintas platform yang kompleks dengan komunikasi antar-proses untuk Linux, Windows, Android dan QNX. Bahasa pemrogramannya adalah C ++, kami menggunakan Boost dan planty libs lainnya. Perangkat lunak kami melakukan pekerjaan dengan baik dan cepat tetapi masih berupa prototipe. Untuk keperluan produksi, kita perlu melakukannya dalam waktu nyata. Beberapa fitur kita harus dalam waktu nyata dan sangat kuat karena sangat penting dan keselamatan orang yang menggunakan perangkat lunak kita mungkin bergantung padanya. Mereka bekerja sangat cepat - hingga ratusan milidetik. Tetapi saya tidak yakin bahwa sistem kami benar-benar real-time karena fakta ini (apakah saya benar?).

Jadi ada pertanyaan utama: bagaimana cara memodifikasi perangkat lunak kita menjadi waktu nyata? Saya sudah banyak mencari di Google tetapi saya masih tidak tahu bagaimana melakukannya.

Beberapa informasi tambahan tentang platform kami: Linux dan Windows yang saat ini kami gunakan hanya untuk tujuan pengujian. Android - kami masih belum memutuskan apakah kami membutuhkannya. QNX - adalah OS target kami untuk produksi. Saya kira jawaban untuk pertanyaan saya berikutnya adalah "TIDAK" :) Tetapi apakah mungkin untuk menggunakan perangkat lunak real-time lintas platform (untuk OS real-time (RTOS) serta untuk keperluan umum OS (GPOS))?

Mungkin kita perlu melakukan upaya untuk mengimplementasikan semua fitur waktu-nyata hanya untuk QNX? Tetapi saya masih tidak mengerti bagaimana melakukannya. Bisakah seseorang menjelaskan pertanyaan ini?

pengguna172825
sumber
55
Jika proyek Anda kritis terhadap keselamatan, Anda benar-benar membutuhkan seseorang yang memahami sistem waktu nyata dalam daftar gaji Anda.
Blrfl
18
Sistem waktu nyata adalah seberapa akurat kode Anda dalam hal waktu eksekusi, bukan apakah itu cepat atau lambat.
Pagotti
22
Perasaan saya adalah bahwa Anda tidak mengubah perangkat lunak yang ada menjadi real-time, Anda merancang dan menulis dari awal perangkat lunak baru, dengan mempertimbangkan batasan waktu nyata eksplisit . Dan pertanyaan Anda terlalu luas: apa sebenarnya yang dilakukan perangkat lunak Anda? Pada sistem real-time yang tepat seperti apa, untuk jenis sistem tertanam apa (tujuan apa: infotainment dalam pesawat komersial tidak sama dengan kontrol reaktor nuklir)? Anda perlu mengedit pertanyaan Anda untuk menjadi lebih konkret, tepat dan memotivasi itu.
Basile Starynkevitch
24
Komentar Reread @ Blrfl. Dan kemudian baca lagi, dan lagi, dan lagi sampai Anda mempekerjakan seseorang dengan pengalaman yang tepat. Atau memastikan bahwa asuransi pertanggungan Anda telah disetor. Karena jika Anda membuat perangkat lunak keamanan-kritis dengan persyaratan waktu-nyata dan tidak memiliki pengalaman itu, berarti Anda lalai secara pidana.
kdgregory
4
Anda bertanya: " apakah mungkin sama sekali untuk mengimplementasikan perangkat lunak real-time lintas platform (untuk OS waktu nyata (RTOS) serta untuk OS tujuan umum (GPOS))? " Dugaan saya adalah Tidak, jika tidak, RTOS tidak akan ada. "Cross Platform" sangat mirip dengan "Holy Grail".

Jawaban:

38

Puasa tidak berarti waktu-nyata dan waktu-nyata tidak berarti puasa.

Real-time berarti bahwa tanggal ketika hasil dikirimkan sama pentingnya dengan nilainya. Dengan kata lain, jika hasilnya memiliki nilai yang benar tetapi disampaikan terlalu dini atau terlalu terlambat, maka keseluruhan hasilnya salah.

Misalnya, pikirkan pemutar video. Jika bingkai video tidak ditampilkan pada kecepatan yang tepat, pengguna tidak akan puas. Lebih buruk lagi jika gambar dan suara tidak sinkron.

Contoh ini menunjukkan bahwa beberapa aplikasi waktu nyata dapat diimplementasikan pada OS tujuan umum saat ini.

Tetapi ada perbedaan antara waktu nyata keras dan waktu nyata lunak sehubungan dengan konsekuensi dari tenggat waktu yang terlewatkan: dalam sistem waktu nyata yang lunak, ini hanya gangguan atau layanan yang rusak (pikirkan gambar yang dibekukan selama beberapa detik dalam contoh pemutar video), sedangkan itu adalah (berpotensi bencana) kegagalan dalam sistem waktu nyata, seperti di pembangkit listrik tenaga nuklir.

mouviciel
sumber
Tn. Mouviciel, Terima kasih telah menjawab pertanyaan saya. Kami memerlukan beberapa fitur menjadi real-time yang sulit. Yang lain dapat menjadi real-time yang lembut. Saya tidak mengerti bagaimana menulis perangkat lunak untuk menjamin tenggat waktu? Bisakah Anda menjelaskan pertanyaan ini?
user172825
7
@ user172825 - Jawaban atas pertanyaan ini mencakup rak perpustakaan. Titik awal mungkin googling "pemrograman waktu nyata", artikel wikipedia terkait atau tutorial RTOS seperti QNX atau RTEMS.
mouviciel
Itu pertanyaan paling rumit bagi saya. Saya menemukan banyak buku besar mengenai topik ini. Tapi saya berharap bisa menjelaskannya dalam beberapa kalimat. :)
user172825
5
" Hanya ada dua hal yang sulit dalam Ilmu Komputer: pembatalan cache dan penamaan hal-hal. " - Phil Karlton OK, dan real-time. Di sana, satu kalimat menjelaskan mengapa itu tidak bisa dijelaskan dalam dua kalimat. Kami sekarang mengembalikan Anda ke pemrograman yang dijadwalkan secara rutin.
1
Saya menemukan panggilan "waktu nyata yang sulit" "waktu deterministik" biasanya membantu menyampaikan maksud kepada orang-orang.
whatsisname
15

Seperti yang sudah dikatakan @mouviciel , real-time dan cepat adalah dua properti independen, walaupun banyak tenggat waktu real-time menyiratkan bahwa diperlukan respons yang relatif cepat.

Saat menulis perangkat lunak waktu nyata, properti paling penting di sebelah respons yang benar adalah bahwa Anda dapat memprediksi secara akurat seberapa cepat respons akan diberikan. Untuk fitur waktu nyata yang keras, Anda bahkan harus dapat memastikan bahwa tenggat waktu akan dipenuhi dalam semua kondisi yang mungkin terjadi, kecuali terjadi kegagalan daya total.

Sumber khas ketidakpastian dapat ditemukan di

  • Alokasi memori dinamis dan pengumpulan sampah
  • (Prioritas lebih tinggi) menyela
  • Penjadwal dalam OS
  • Penciptaan dan penghancuran objek secara dinamis
  • Sejumlah besar kode dieksekusi secara kondisional

Saya tidak mengatakan bahwa Anda harus menghindari area tersebut (karena kemungkinan besar Anda tidak bisa), tetapi Anda harus menyadari bagaimana mereka dapat mempengaruhi kemudahan yang Anda dapat memprediksi bahwa Anda akan memenuhi tenggat waktu real-time untuk fitur yang relevan.

Bart van Ingen Schenau
sumber
4
Dalam kode yang dijalankan secara kondisional, berhati-hatilah terhadap algoritma yang diamortisasi, di mana sebagian besar waktu operasi itu murah tetapi kadang-kadang dapat berubah menjadi operasi yang jauh lebih mahal, misalnya ketika vektor menambahkan ketika perlu realokasi.
ratchet freak
2
Dalam beberapa kasus, Anda mungkin perlu melakukan analisis WCET , memprediksi waktu eksekusi hingga milidetik
Basile Starynkevitch
3
@ user172825: Membuat profil dapat membantu, tetapi sebagian besar dari pengalaman tersebut muncul untuk mengalami dan mengetahui bahasa dan perpustakaan dengan sangat baik.
Bart van Ingen Schenau
3
Profil mungkin tidak cukup baik jika Anda memiliki persyaratan waktu nyata yang sulit. Jika run time tidak sepenuhnya deterministik, maka pembuatan profil mungkin memberi Anda kesan bahwa itu akan selalu selesai pada batas waktu, padahal sebenarnya hanya memenuhi batas waktu 99 kali dari 100. Jika Anda memiliki persyaratan waktu nyata yang sulit, itu harus memenuhi 100 kali dari 100.
James_pic
2
@ user172825 Real-time untuk perangkat lunak apa operasi otak untuk obat - Anda perlu banyak pengalaman dan keterampilan untuk melakukannya dengan benar dan Anda harus benar-benar yakin dengan apa yang Anda lakukan. Proyek-proyek itu lebih baik dibuat di bawah pengawasan seorang profesional yang terampil di daerah tersebut. Mereka bukan sesuatu yang bisa Anda lemparkan ke pengembang reguler dan katakan "jadikan ini berfungsi sebagai sistem waktu nyata".
T. Sar
8

Saya kira penjelasan dua kalimat dari realtime adalah bahwa sistem realtime dirancang untuk memahami dan mengendalikan yang terburuk waktu respon dari input berubah untuk output berubah.

Itu membutuhkan analisis yang mencakup keseluruhan sistem. Katakanlah Anda memiliki sistem sepele yang terdiri dari keyboard USB dan servo rem. Responsif apa yang dapat Anda capai dengan sistem ini? Anda mungkin harus mempertimbangkan:

  • masukan frekuensi polling, dan berapa lama ini berlangsung
  • masukan latensi interupsi
  • konteks waktu sistem operasi beralih setelah Anda memiliki acara input
  • prioritas sistem operasi tugas
  • menghindari penggunaan alokasi dinamis atau memori virtual dalam program, untuk menghindari penundaan respons yang tidak terduga atau peristiwa OOM
  • menghindari penggunaan pengumpulan sampah
  • menghindari penggunaan O (n) atau algoritma yang lebih buruk dengan N tinggi atau tidak dapat diprediksi (apakah memasukkan daftar putar yang sangat besar ke sistem hiburan mobil Anda memperlambat respons pengeremannya?)
  • pertimbangkan latensi disk atau jaringan (mis. penggunaan bus CAN di mobil)
  • latensi kendali keluaran

Dalam lingkungan semacam ini biasanya juga ada pertimbangan khusus untuk keandalan, seperti standar MISRA C.

pjc50
sumber
Apakah benar juga bahwa realtime mencakup pertimbangan apakah suatu operasi bersifat deterministik, mungkin rekursif, atau bahkan dapat dihitung sama sekali dalam beberapa kasus?
Ya, semua itu akan "tidak terikat". Algoritma rekursif dapat diizinkan asalkan penggunaan stack mereka memiliki batas atas yang dikenakan padanya.
pjc50
5
avoiding use of garbage collection- Ini seharusnya avoiding use of non-deterministic memory management. Pengumpulan sampah dapat dilakukan secara real-time dan manajemen memori manual belum tentu deterministik (lihat mallocimplementasi khas untuk C).
8bittree