Dalam bare metal atau sistem tertanam jenis RTOS minimal dengan beberapa prosesor, mungkinkah menjalankan program yang identik pada setiap prosesor yang menggunakan Message Passing Interface (MPI) untuk memberikan keseimbangan beban dan juga redundansi jika terjadi kegagalan prosesor? Seperti mesin negara yang mengubah tindakan apa yang dilakukan CPU lain berdasarkan pesan yang dikirimkan, misalnya meminta prosesor lain untuk mengambil alih beberapa bagian dari loop sistem untuk menyeimbangkan beban atau mengirim pesan hidup berkala dan mengingat apa yang bertanggung jawab masing-masing CPU sejauh Redundansi CPU.
Dalam diagram contoh ini, bagian sebenarnya dari perulangan sistem penuh yang "terbuka" dapat berupa sistem yang berbeda. Tidak mungkin ada kerja sama hanya kemampuan untuk membuka dan atau menutup bagian-bagian dari loop sistem penuh yang berjalan pada setiap CPU dalam jenis multiprosesor asimetris yang sangat primitif. "Proses migrasi" ke CPU lain akan dipicu oleh permintaan CPU lain untuk membuka bagian dari loop sistem setelah CPU yang meminta menutup bagiannya, atau kurangnya respons dari CPU lain ketika ditanya apakah masih hidup untuk beberapa waktu .
Telah diusulkan sebagai solusi untuk kegagalan prosesor potensial dan solusi untuk load balancing karena kita tidak dapat port OS tertanam untuk benar-benar melakukan multiprocessing simetris atau asimetris pada papan kustom, dan sepertinya itu secara teori mungkin, tetapi desain yang sangat buruk ide. Juga, saya belum dapat menemukan pola desain atau algoritma untuk menggunakan pesan yang lewat dengan cara ini.
Beberapa latar belakang penting untuk keputusan rekayasa perangkat lunak: Sebuah proyek CubeSat siswa (tidak dinilai atau untuk kelas), kami memiliki tim pengembangan perangkat lunak kecil dengan sebagian besar siswa junior dengan sedikit atau tanpa pengetahuan tentang desain sistem operasi. Karena berbagai alasan kita tidak dapat melakukan salah satu dari banyak solusi dunia nyata yang telah saya baca. Ini kedengarannya seperti itu mungkin terdengar seperti itu akan memperkenalkan terlalu banyak kompleksitas untuk tim untuk berurusan dengan, dan bahkan jika itu dapat dilakukan akan menyebabkan desain yang mengerikan yang akan menyebabkan beberapa masalah yang mengubah CubeSat menjadi batu yang mengorbit.
Saya bahkan tidak yakin kita dapat mengimplementasikan pesan yang lewat dengan cara yang cukup andal untuk spacefairing, saya bahkan belum dapat menemukan protokol komunikasi siap produksi yang dapat digunakan untuk mengirim pesan di bus dengan OS kecil atau telanjang. logam seperti yang kita butuhkan. Tetapi saya juga ingin tahu apakah solusi yang diusulkan untuk migrasi proses, redundansi CPU, dan load balancing ini bahkan layak untuk sistem yang kritis terhadap keselamatan. Sepertinya itu bisa mengarah ke keadaan di mana dua CPU menjalankan "Proses" yang sama atau bagian dari loop program jika salah satu bangun itu akan sulit dideteksi.
sumber
Jawaban:
Pertanyaan-pertanyaan luar biasa karena saya benar-benar mengerjakannya di pertengahan tahun 90-an. Pesawat luar angkasa itu mahal dan sulit untuk memodifikasi perangkat lunak sekali di orbit. Saya memikirkan varian masalah ini ketika memikirkan bagaimana sumber daya perangkat lunak pesawat ruang angkasa dapat mengalokasikan kembali berdasarkan perubahan persyaratan misi. Sejauh yang kami bawa di lab (VxWorks):
Di Stasiun Program pembaruan di bawah RTOS. Pada dasarnya pasang satu set tugas baru, hubungkan jaringan antrian dan mulai aliran data lagi.
Jadi, dalam implementasi sederhana ini kami menangguhkan atau menghapus beberapa tugas dan mengizinkan orang lain untuk menjalankan. Kami mengambil sedikit lebih jauh dalam apa yang kami sebut teknik "Transplantasi Jantung". Ini untuk pembaruan perangkat lunak stasiun. Kami dapat memutuskan dan merutekan ulang jaringan antrian dalam model penugasan. Pada dasarnya lepaskan tugas dan hilangkan jika diinginkan, matikan antrian dan hubungkan kembali tugas baru (jantung) dan arteri (jaringan antrian). Kami melakukan sedikit waktu bermain ini pada 1995/96. Saya tidak hanya ingin kemampuan untuk menambahkan fungsionalitas tetapi untuk menghapus yang tidak diperlukan karena memori adalah sumber daya yang sangat terbatas. Tidak tahu banyak tentang MPI, saya tidak pernah menggunakannya. Apakah itu deterministik? Menggunakan teori informasi, Anda tidak perlu banyak mengirim sinyal agar tetap hidup. Gunakan bit minimal. Info paling umum seperti "tetap hidup" hanya membutuhkan satu bit, benar atau salah. Peristiwa yang terjadi dengan probabilitas jauh lebih rendah membutuhkan lebih banyak bit untuk diwakili. Hilangkan semua overhead perangkat lunak yang Anda bisa. Ikuti prinsip KISS (Keep It Simple..Stupid!).
Sekarang semacam proteksi radiasi. Proyek siswa berarti kemungkinan terbang CMOS. Paling tidak saya akan menempatkan pemeriksaan CRC pada memori dan menjalankan pengawas untuk menangkap kesalahan seperti radiasi hangup melakukan hal-hal aneh pada elektronik. Efek gangguan peristiwa tunggal dapat dikurangi dengan menggunakan CRC pada memori. Penguncian membutuhkan reset daya.
Saya menyarankan mencoba sesuatu seperti FreeRTOS dan melihat fitur apa yang dapat Anda tekuk. Ruang adalah lingkungan yang sangat menantang. Selamat bersenang-senang.
sumber