Saya sangat ingin mempelajari praktik-praktik terbaik dalam hal pengerasan ruang. Sebagai contoh, saya telah membaca (walaupun saya tidak dapat menemukan artikel lagi) bahwa beberapa bagian inti dari penemu Mars tidak menggunakan alokasi memori dinamis, bahkan itu dilarang. Saya juga membaca bahwa memori inti kuno mungkin lebih disukai di ruang angkasa.
Saya sedang melihat beberapa proyek yang terkait dengan Google Lunar Challenge dan bertanya-tanya bagaimana rasanya mendapatkan kode di bulan, atau bahkan hanya ke luar angkasa. Saya tahu bahwa papan yang dikeraskan ruang menawarkan kewarasan dalam lingkungan yang keras, namun saya bertanya-tanya (sebagai seorang programmer C) bagaimana saya perlu menyesuaikan pemikiran dan kode saya jika saya sedang menulis sesuatu yang akan berjalan di ruang angkasa?
Saya pikir beberapa tahun ke depan mungkin menunjukkan lebih banyak pertumbuhan di perusahaan ruang angkasa swasta, saya benar-benar ingin setidaknya memiliki pengetahuan tentang praktik terbaik.
Apa yang terjadi pada suatu program jika radiasi, dingin atau panas membombardir papan yang mengalami kerusakan pada isolasi? Saya pikir tujuannya adalah menjaga manusia di dalam pesawat ruang angkasa (sejauh memperbaiki atau menukar barang) dan menghindari misi untuk memperbaiki keadaan.
Lebih jauh, jika dewan memiliki beberapa sistem kritis, peringatan dini tampaknya sangat penting.
Bagaimana seseorang mendapatkan pengalaman dalam hal ini melalui pengujian dan coba-coba (kecuali peluncuran satelit pribadi Anda?)
Jawaban:
Perangkat lunak luar angkasa bukanlah sihir misterius. Anda masih menggunakan 0 dan 1, bukan 1 dan 3. Jadi mungkin tidak ada faktor wow yang terlibat dalam menggambarkan apa yang terjadi dalam pengembangan perangkat lunak.
Beberapa perbedaan kecil yang muncul di pikiran saat ini adalah:
sumber
Saya baru saja menemukan pertanyaan menarik Anda.
Saya berada di Lab Instrumentasi selama Apollo, dan lagi kemudian ketika itu disebut Lab Draper selama "perang dingin".
Untuk komputer panduan Apollo, core digunakan untuk RAM, dan core braided khusus digunakan untuk ROM. Mesin itu sendiri dibuat seluruhnya dari gerbang NOR dan clock cukup lambat, untuk keandalan.
Saya tidak bekerja secara langsung pada rudal Minuteman, tetapi saya menyadari beberapa masalah. Jika hulu ledak nuklir meledak di sekitar beberapa elektronik, itu pada dasarnya lebih pendek. Komputer pemandu memiliki sensor radiasi yang akan langsung mematikan Vc sehingga tidak ada yang terbakar. Kemudian komputer akan restart, setelah registernya dihapus.
Untuk mengatasinya, komputer akan secara berkala memotret registernya ke dalam inti, dan ketika dinyalakan kembali akan dimulai dari pos pemeriksaan itu. Untuk membuat ini berfungsi, perangkat lunak (semua dalam ASM) harus dianalisis untuk melihat bahwa itu dapat mengambil sejumlah hit seperti itu, pada frekuensi berapa pun, tanpa mendapatkan jawaban yang salah. Itu disebut "restart protected". Masalah yang sangat menarik, mengingat (syukurlah) itu tidak pernah harus digunakan.
sumber
Untuk mendapatkan keandalan lingkungan yang tangguh khususnya dalam C, berikut adalah beberapa hal nyata yang pernah saya lakukan.
MISRA-C: Subset Otomotif C. Agak seperti Ravenscar ADA / Java.
watchdogs: memastikan program tidak terkunci
memori ecc (kadang-kadang)
checksum: mencari flipping bits. Saya telah melihat ketiganya dalam satu sistem:
1) checksum program terus menerus (itu di EPROM tetapi masih mendapat bit terbalik).
2) checksum struktur data tertentu secara berkala.
3) Pemeriksaan kewarasan CPU secara berkala.
4) periksa register IO memiliki apa yang seharusnya ada di dalamnya.
4b) baca kembali output ke input independen dan verifikasi.
sumber
Jauh lebih penting daripada bahasa pemrograman adalah persyaratan pada sistem yang mendasarinya (OS dan Perangkat Keras). Pada dasarnya, Anda perlu memastikan (dan membuktikan) perilaku deterministik dan dapat diprediksi dari keseluruhan sistem. Banyak penelitian terkait telah dilakukan di komunitas real-time. Saya sangat merekomendasikan membaca dua buku jika Anda benar-benar ingin mempelajari subjek ini: Sistem Real-Time oleh Jane Liu dan sebuah buku dengan nama yang sama oleh Hermann Kopetz . Yang pertama mencakup penjadwalan dengan cara yang sangat teoretis sementara yang kedua membuat kaki Anda kembali ke tanah dan cukup banyak mencakup semua aspek terkait dari desain sistem (waktu nyata), misalnya toleransi kesalahan.
Selain itu, dua insiden berikut dengan baik menggambarkan kualitas masalah yang harus dihadapi insinyur perangkat lunak saat mengirim sesuatu ke ruang angkasa:
sumber
Saya menemukan dokumen ini (sekitar 2009) untuk Standar Pengodean Kelembagaan JPL untuk Bahasa Pemrograman C di Laboratorium untuk Perangkat Lunak yang Andal (LaRS) di situs Jet Propulsion Laboratory .
Berikut ringkasan aturan yang didokumentasikan:
Kepatuhan Bahasa
Eksekusi yang Dapat Diprediksi
Pengodean Defensif
Kode Kejelasan
*) Semua aturan harus aturan, kecuali yang ditandai dengan tanda bintang.
sumber
Sistem komputasi ruang-bukti adalah soal ketergantungan. Pengantar yang mendalam untuk bidang ini dapat ditemukan dalam konsep-konsep fundamental tentang ketergantungan oleh Algirdas Avižienis, Jean-Claude Laprie & Brian Randell.
Real-time juga merupakan konsep kunci untuk komputasi ruang. Sebagai Pankrat, saya akan merekomendasikan Sistem Real-Time oleh Hermann Kopetz.
Untuk memberikan pemahaman pragmatis tentang tantangan komputasi ruang, pikirkan:
kondisi ekstrim di ruang angkasa: sangat panas ketika berorientasi ke matahari, sangat dingin di sisi lain, banyak sinar kosmik yang dapat membalikkan bit dalam memori, percepatan besar dan getaran ketika digeber, ... Perangkat keras untuk ruang harus jauh lebih kuat daripada perangkat keras untuk militer.
Ketika kegagalan terjadi, kecuali di Stasiun Luar Angkasa Internasional atau untuk Teleskop Luar Angkasa Hubble, tidak ada yang datang dan mengganti sistem yang gagal. Semuanya harus diperbaiki dari tanah melalui kemampuan observasi dan perintah yang maksimal dan melalui sistem cadangan untuk beralih. Ini mudah untuk satelit Bumi. Ini lebih sulit dengan probe ruang yang keterlambatan komunikasi mungkin satu jam. Memang, semuanya harus seandal mungkin pada awalnya.
sumber
Apa yang saya pelajari dari satu proyek yang saya ikuti sebagai pekerja magang:
Spesifikasi perangkat keras Anda akan berubah, biasanya menjadi lebih buruk!
Sebagai contoh, ruang hardened CPU yang digunakan dalam desain dijanjikan, dijanjikan , ingat, bahwa itu akan berjalan pada 20 MHz.
Hasil akhir berjalan pada 12 MHz. Programmer senior pada proyek menghabiskan banyak waktu mendesain ulang algoritma untuk memenuhi persyaratan real time yang sulit dari sistem kontrol dan banyak perangkat lunak telemetri akhirnya diturunkan ke sistem kedua alih-alih berjalan pada CPU primer.
Jadi, cobalah untuk meninggalkan beberapa sumber daya tambahan yang tersedia dalam desain aslinya dan cobalah untuk tidak menggunakan semua CPU dan memori yang tersedia.
sumber
Untuk perspektif perangkat lunak, tuliskan tugas istimewa yang sesekali, secara acak, membalik bit dalam kode Anda, dan lihat bagaimana cara mengatasinya. Itu simulator Anda.
Dari segi perangkat keras, bagian-bagiannya akan menjadi tua, karena butuh waktu lama untuk mendapatkan nilai ruang. Juga, bagian-bagian baru terus menyusut dalam ukuran, dan semakin kecil fitur (pikirkan sel memori pada IC) semakin rentan terhadap korupsi dari peristiwa radiasi.
sumber
Saya bekerja pada perangkat yang kritis terhadap keselamatan dan kami harus melalui beberapa lingkaran yang serupa.
Kami memiliki variabel kritis keselamatan. Ada salinan invers dari variabel. Setelah setiap loop, variabel diperiksa terhadap kebalikannya.
Kami memiliki tes berjalan dan nol dari SEMUA register. Itu termasuk Penghitung Program!
Kami memiliki tes semua opcode dari set instruksi mikro. Kami harus memastikan bahwa jika Anda menambahkan 2 register, register ditambahkan.
Beberapa di antaranya mungkin tidak terkait dengan program di luar angkasa, tetapi ini memberi Anda rasa besarnya pemeriksaan yang dimungkinkan.
sumber
Saya percaya semakin buruk suatu lingkungan, semakin banyak Kode Koreksi Kesalahan digunakan, dan ada memori ECC yang dapat digunakan sampai batas tertentu.
Jika seseorang dapat memperkirakan tingkat kesalahan seseorang dapat membangun kode koreksi kesalahan yang dapat menangani kesalahan yang diperkenalkan.
sumber
Saya akan menebak bahwa ECC perangkat lunak data dan menggunakan teori informasi dan penginapan kustom untuk menyebarkan data di sekitar sistem untuk mengelola kegagalan memori akan menjadi awal. Tapi, saya tidak belajar perangkat lunak rad-keras jadi saya tidak terbiasa dengan itu, itu hanya dugaan.
sumber