Saya telah membaca sedikit tentang pembangunan komputer digital di Shocken / Nisan's: The Elements of Computing Systems . Tetapi buku ini tidak mengatakan apa-apa tentang aspek kelistrikan tertentu di komputer, misalnya: Sering dikatakan bahwa 0 dan 1 diwakili oleh tegangan, jika tegangan berada dalam interval [0, 0,9), maka itu adalah 0. dalam interval [0,9, 1,5), maka itu adalah 1 (tegangan dapat bervariasi, saya hanya memberikan contoh).
Tapi saya tidak pernah membaca apa yang membuat voltase listrik "berperilaku baik" dengan cara yang 0 tidak pernah bisa secara tidak sengaja menjadi 1 karena volatilitas listrik [1] di dalam komputer. Mungkin tegangan sangat dekat 0,9, lalu apa yang dilakukan untuk menghindarinya melewati ambang batas?
[1]: Seandainya itu ada.
sumber
Jawaban:
Untuk tingkat tertentu, Anda sebagian besar telah menciptakan masalah ini dengan menggunakan contoh yang tidak realistis. Ada kesenjangan yang jauh lebih besar antara sirkuit logika rendah dan tinggi.
Misalnya, logika 5V CMOS akan menghasilkan 0-0.2V untuk logika rendah dan 4.7-5V untuk logika tinggi, dan secara konsisten akan menerima apa pun di bawah 1.3V sebagai rendah atau apa pun di atas 3.7V sebagai tinggi. Artinya, ada banyak margin yang lebih ketat pada output daripada input, dan ada celah besar yang tersisa antara voltase yang mungkin digunakan untuk sinyal logis rendah (<1,3V) dan yang mungkin digunakan untuk logis tinggi (> 3,7V) . Ini semua ditata secara khusus untuk memungkinkan kebisingan, dan untuk mencegah jenis pergantian tidak disengaja yang Anda gambarkan.
Berikut adalah representasi visual dari ambang batas untuk berbagai standar logika, yang saya pinjam dari interfacebus.com :
Setiap kolom mewakili satu standar logika, dan sumbu vertikal adalah tegangan. Inilah yang masing-masing warna wakili:
sumber
Kita tidak bisa. Kami hanya mengurangi kemungkinan kesalahan dengan menambahkan cek ke data. Bergantung pada tipe data apa yang akan diperiksa, dapat dilakukan melalui perangkat keras atau perangkat lunak, dan dapat mengambil bentuk apa pun dari bit checksum sederhana dalam aliran serial ke mesin keadaan siklik yang memungkinkan hanya transisi khusus yang dibuat pada waktu tertentu.
Tapi itu lingkaran setan, bukan? Bagaimana kita memastikan bahwa sirkuit yang bertugas memeriksa data tidak terpengaruh oleh gangguan yang sama seperti data dan memberikan hasil positif palsu? Menambahkan yang lain? Anda dapat melihat bagaimana ini bisa menjadi sangat mahal untuk mendapatkan sangat sedikit pada akhirnya.
Pertanyaannya adalah: seberapa andal yang Anda inginkan dari sistem Anda? Satelit, yang menanamkan beberapa sistem komputer yang paling andal yang tersedia, misalnya kadang-kadang beralih ke sistem redundansi yang tidak identik serta suara: tiga komputer yang berbeda menjalankan algoritma yang sama yang dikodekan oleh tiga orang yang berbeda dalam tiga cara yang berbeda, dan jika satu komputer memberikan hasil yang berbeda dari dua lainnya, itu di-restart (dan jika itu terjadi lagi, terisolasi). Tetapi sekali lagi, jika dua komputer rusak pada saat yang sama, maka komputer yang salah akan dihidupkan ulang / diisolasi. Biasanya, "redundansi dingin" sudah cukup: sirkuit primer dan sekunder diimplementasikan, primer berjalan hingga kesalahan terdeteksi oleh beberapa jenis sirkuit pemantauan (tidak dilindungi) dan sirkuit sekunder diganti. Jika itu hanya kesalahan dalam RAM, kode dapat dijalankan kembali untuk menyegarkan data. Anda baru saja harus memutuskan dengan bijak di mana harus menarik garis, tidak mungkin untuk membuat sirkuit deteksi kesalahan yang dapat diandalkan 100%.
Satelit (terutama di dataran tinggi atau di sabuk Van Allen) dan komputer di pabrik nuklir atau lingkungan radioaktif lainnya secara khusus tunduk pada (kata kunci :) Single Event Upsets atau latchup karena partikel energi tinggi bertabrakan dengan atau diserap oleh kisi-kisi kristal semikonduktor. . Buku-buku yang membahas bidang-bidang ini tentu akan menjadi pilihan terbaik Anda. Cat terdegradasi oleh kerusakan perpindahan dari radiasi, sehingga dapat dipahami bahwa semikonduktor dapat rusak atau terganggu oleh radiasi yang masuk.
sumber
Satu gangguan acara bukan lagi masalah ruang atau pesawat terbang; kami telah melihat mereka terjadi di permukaan selama lebih dari satu dekade, mungkin dua sekarang.
Seperti yang disebutkan, setidaknya dalam aplikasi luar angkasa kita berurusan dengan gangguan menggunakan triple voting (masing-masing bit benar-benar tiga, dan dua pertiga suara menang, jadi jika ada satu yang berubah, dua lainnya akan menutupinya.). Dan kemudian ECC atau EDAC , dengan scrubber yang melalui RAM pada tingkat yang lebih tinggi dari tingkat pembaruan acara tunggal yang diprediksi untuk membersihkan gangguan peristiwa tunggal (yang benar-benar mendorong dua pertiga suara salah).
Lalu ada dosis total; lama-kelamaan material tersebut menjadi terlalu radioaktif untuk bekerja, jadi Anda menggunakan material yang cukup untuk melampaui umur kendaraan. Bukan sesuatu yang kita khawatirkan di permukaan secara normal. (Dan latchup) Menggunakan tiga / beberapa set logika secara paralel adalah / adalah cara untuk mencoba tidak harus menggunakan teknologi rad-hard tradisional, dan yah, Anda dapat menemukan seberapa baik yang bekerja.
Orang-orang yang dulu tahu cara membuat barang untuk ruang sebagian besar sudah pensiun atau pindah, jadi kami memiliki sejumlah program yang membuat sampah ruang sekarang. Atau memperlakukan ruang seperti produk yang dibumikan, alih-alih mencoba membuat semua orang bekerja dan memiliki pemasukan dan pembakaran kembali yang terkontrol, kami sekarang mengharapkan sejumlah ruang sampah keluar dari setiap rasi bintang.
Kami memang melihat kesal di permukaan. Memory stick ( DRAM ) yang Anda beli memiliki FIT, Failures In Time, dan setiap chip dengan RAM di dalamnya (semua prosesor, banyak lainnya), akan memiliki spesifikasi FIT juga (untuk blok RAM (SRAM)). RAM lebih padat dan menggunakan transistor yang lebih kecil, sehingga lebih rentan terhadap gangguan, dibuat secara internal atau eksternal. Sebagian besar waktu kita tidak melihat atau peduli karena memori yang kita gunakan untuk data, menonton video, dll ditulis, dibaca kembali dan tidak digunakan lagi sebelum itu duduk cukup lama untuk memiliki gangguan. Sebagian memori, seperti yang memegang program atau kernel, lebih berisiko. Tapi kami sudah lama terbiasa dengan ide hanya me-reboot komputer kami atau me-reset / me-reboot ponsel kami (beberapa ponsel / merek Anda harus secara teratur melepas baterai secara berkala). Apakah ini gangguan atau perangkat lunak yang buruk atau kombinasi?
Angka-angka FIT untuk produk individual Anda mungkin melebihi umur produk itu, tetapi gunakan server server yang besar, Anda memperhitungkan semua RAM atau chip atau apa pun dan MTBF berubah dari tahun atau pesanan yang melewati itu, menjadi berhari-hari atau berjam-jam, di suatu tempat di ladang. Dan Anda memiliki ECC untuk mencakup apa yang Anda bisa dari itu. Dan kemudian Anda mendistribusikan beban pemrosesan dengan failover untuk menutupi mesin atau perangkat lunak yang gagal menyelesaikan tugas.
Keinginan untuk penyimpanan solid state, dan perpindahan dari media pemintalan telah menciptakan masalah terkait hal ini. Penyimpanan yang digunakan untuk SSD (dan penyimpanan non-volatil lainnya) untuk menjadi lebih cepat dan lebih murah, jauh lebih tidak stabil daripada yang kita inginkan dan bergantung pada EDAC, karena kita akan kehilangan data tanpa itu. Mereka membuang banyak bit tambahan dan menyelaraskan semuanya, melakukan perhitungan untuk menyeimbangkan kecepatan, biaya, dan umur penyimpanan yang panjang. Saya tidak melihat kita berbalik; Orang-orang menginginkan lebih banyak penyimpanan yang tidak mudah menguap di mana-mana yang cocok dengan paket kecil dan tidak mendominasi harga produk.
Sejauh sirkuit normal pergi, dari hari-hari awal menggunakan transistor untuk sirkuit digital hingga saat ini, kami melewati bagian linear dari transistor dan menggunakannya sebagai saklar, kami menggedornya antara rel dengan beberapa kelebihan untuk memastikannya tetap. . Seperti saklar lampu di dinding Anda, Anda membalikkannya lebih dari setengah pegas membantu sisanya dan menahannya di sana. Inilah sebabnya kami menggunakan digital dan tidak mencoba hidup di wilayah linier; mereka mencoba sejak awal, tetapi gagal. Mereka tidak bisa tetap dikalibrasi.
Jadi kita hanya membanting transistor ke relnya dan kedua sisi sinyal akan menyelesaikan siklus clock berikutnya. Kesulitan besar diambil, dan alat saat ini secara signifikan lebih baik daripada sebelumnya, dalam melakukan analisis desain chip, untuk melihat bahwa dengan desain ada margin pada timing. Kemudian menguji setiap die pada setiap wafer (itu dan / atau setelah kemasan), untuk melihat bahwa setiap chip baik.
Teknologi chip sangat bergantung pada statistik berdasarkan eksperimen. Ketika Anda meng-overclock CPU Anda, nah Anda mendorong margin itu, tetap berada dalam laju clock yang diiklankan, suhu, dll. Dan kemungkinan Anda jauh lebih rendah dari masalah. Prosesor 3 GHz xyz hanyalah sebuah chip 4 GHz yang gagal pada 4 GHz tetapi melewati pada 3 GHz. Bagian-bagian pada dasarnya dinilai cepat dari jalur produksi.
Lalu ada koneksi antara chip atau papan, dan mereka juga mengalami masalah, dan banyak waktu dan usaha untuk membuat standar dan desain papan, dll, untuk mengurangi kesalahan pada antarmuka tersebut. USB , keyboard, mouse, HDMI , SATA , dan sebagainya. Serta semua jejak di papan tulis. Di dalam dan di luar papan Anda memiliki masalah crosstalk; lagi, banyak alat yang tersedia jika Anda menggunakannya serta pengalaman dalam menghindari masalah di tempat pertama, tetapi cara lain di mana kita mungkin tidak melihat satu dan nol terlibat penuh.
Tak satu pun dari teknologi, bahkan ruang, yang sempurna. Itu hanya harus cukup baik, cukup persentase dari produk harus cukup untuk memenuhi rentang hidup yang diharapkan dari produk. Beberapa persen dari ponsel pintar harus membuatnya setidaknya dua tahun, dan hanya itu. Pengecoran atau teknologi yang lebih tua memiliki lebih banyak data eksperimental dan dapat menghasilkan produk yang lebih andal, tetapi lebih lambat, dan mungkin bukan desain baru, jadi begitulah. Ujung tombak hanya itu, pertaruhan untuk semua orang.
Untuk pertanyaan spesifik Anda, transistor pada setiap ujung sinyal didorong dengan cepat melalui wilayah liniernya dan condong ke salah satu rel. Analisis dilakukan pada setiap jalur kombinasional untuk menentukan bahwa ia akan mengendap sebelum jam di ujung jalan mengaitkannya, sehingga benar-benar dibuat nol atau satu. Analisis ini didasarkan pada eksperimen. Chip pertama dari lini produk didorong melampaui batas desain, plot schmoo dibuat untuk menentukan ada margin dalam desain. Variasi pada proses dibuat dan / atau kandidat individu ditemukan yang mewakili chip lambat dan cepat. Ini adalah proses yang rumit dan beberapa memiliki lebih banyak bahan, beberapa memiliki lebih sedikit, berjalan lebih cepat tetapi menggunakan lebih banyak energi atau berjalan lebih lambat, dll.
Anda mendorong mereka ke margin juga. Dan pada dasarnya mendapatkan perasaan kabur hangat bahwa desainnya boleh masuk ke produksi. JTAG / pemindaian batas digunakan untuk menjalankan pola acak melalui chip antara masing-masing keadaan terkunci untuk melihat jalur kombinasional semuanya solid untuk desain. Dan di mana ada kekhawatiran, beberapa tes fungsional terarah dapat terjadi juga. Pengujian lebih lanjut dari silikon pertama dan mungkin pengujian acak untuk memastikan produk tersebut baik. Jika / ketika kegagalan terjadi, itu mungkin mendorong Anda kembali ke tes yang lebih fungsional di jalur produksi. Ini sangat tergantung pada statistik / persentase. 1/1000000 yang buruk keluar mungkin baik-baik saja atau 1/1000 atau apa pun; itu tergantung pada berapa banyak Anda pikir Anda akan menghasilkan chip itu.
Kerentanan seperti disebutkan di sini dan dengan orang lain. Pertama, chip itu sendiri, seberapa baik desain dan prosesnya, seberapa dekat dengan margin adalah jalur terlemah dari chip tertentu dalam produk yang Anda beli. Jika terlalu dekat dengan tepi maka perubahan suhu atau lainnya dapat menyebabkan masalah waktu dan bit akan mengunci data yang belum menetap menjadi satu atau nol. Lalu ada satu gangguan acara. Lalu ada kebisingan. lagi hal-hal yang telah disebutkan ...
sumber
Jika Anda mencari jawaban sederhana:
Setiap komponen digital dalam komputer lebih terbatas dalam output yang dihasilkannya, daripada input yang diterimanya. Misalnya, nilai "input" dari 0V ke 2V akan diterima sebagai 0, tetapi "output" 0 akan selalu berada dalam kisaran 0 hingga 0,5V. (Lihat jawaban duskwuff untuk beberapa nilai aktual.)
Ini berarti bahwa setiap komponen membantu untuk "memperbaiki" beberapa penyimpangan atau kebisingan yang terjadi di sepanjang jalur. Tentu saja, jika kebisingannya cukup besar, sistem tidak dapat mengimbanginya. Komputer dalam lingkungan radiasi tinggi sering dapat dipengaruhi oleh perubahan 1s menjadi 0s dan sebaliknya.
Pada dasarnya, komputer dirancang untuk mentoleransi tingkat kebisingan / interferensi tertentu , yang cukup baik untuk tujuan praktis.
sumber
Secara teori dimungkinkan untuk sinyal berubah antara 0 dan 1 karena noise termal (dan lainnya), namun sangat tidak mungkin.
Sirkuit digital dirancang dengan atribut yang disebut 'margin kebisingan'. Ini adalah jumlah input yang harus diubah sebelum status membalik. Umumnya di sirkuit CMOS ini sekitar 50% dari tegangan suplai. Kebisingan termal yang tidak terhindarkan (berasal dari elektron yang bergerak pada suhu di atas 0 kelvin) di sirkuit ini menghasilkan << 1 mV kebisingan, dan probabilitas bahwa lonjakan ini dapat melebihi (katakanlah) 500 mV, sangat kecil.
Gerbang digital (misalnya CMOS) memiliki karakteristik penguatan dan saturasi. Artinya adalah bahwa ketika sinyal input dekat dengan tengah kisaran, output berubah dengan cepat (gain tinggi), tetapi ketika dekat dengan ekstrem rentang, ia berubah perlahan. Hasil dari ini adalah bahwa ketika sinyal input 'dekat' dengan rel, output lebih dekat - ini berarti bahwa noise tidak mendapatkan penguatan.
Fitur lain yang disebutkan di atas (koreksi kesalahan dll.) Berarti bahwa kesalahan bahkan jika mereka terjadi, jangan menyebar.
sumber
Dalam sistem yang rentan terhadap kesalahan seperti saluran komunikasi dan penyimpanan magnetik (dan kadang-kadang bahkan RAM), sebuah checksum, CRC, atau ECC disimpan untuk menolak data yang buruk atau memperbaiki kesalahan kecil.
Umumnya sistem biner dirancang sedemikian rupa sehingga tidak mungkin, tetapi sekali dalam beberapa juta atau miliar * kali sinar kosmik atau blip kebisingan akan mendorong hal-hal di telepon, deteksi kesalahan / koreksi diperlukan untuk menjaga korupsi dari mempengaruhi komputer secara serius.
* Saluran komunikasi dapat memiliki tingkat kesalahan yang jauh lebih tinggi!
sumber
Perangkat keras komputer telah menjadi lebih kuat dan dapat diandalkan. Tetapi perangkat keras terlalu luas untuk jawaban yang sederhana. Namun mungkin menarik untuk mengetahui ada perbedaan ketergantungan antara komputer desktop umum dan komputer server perusahaan. Saya menemukan ini pertanyaan / jawaban thread tentang hardware server. Server akan dikenakan biaya berkali-kali lipat dari bagian atas meja yang sebanding. Biaya adalah hasil dari perangkat keras yang lebih baik yang mungkin beberapa kali lebih kecil kemungkinannya untuk "beralih 1 dan 0" secara tak terduga.
Tetapi perangkat keras hanya setengah dari cerita. Komputer juga dapat melindungi data dari kesalahan tak terduga menggunakan perangkat lunak. Kode Hamming adalah contoh di mana, dengan menambahkan sejumlah kecil data tambahan, sejumlah kecil kesalahan tidak hanya dapat dideteksi tetapi juga diperbaiki.
sumber
Ada dua cara yang biasanya digunakan untuk meminimalkan probabilitas bahwa bit logika akan secara tidak sengaja diaktifkan (0 ke 1, atau 1 ke 0).
Yang pertama adalah dengan memberikan celah sebesar mungkin , antara level tegangan yang ditentukan untuk 0 dan 1, sebanyak mungkin . Seperti yang Anda sebutkan, 0 didefinisikan sebagai level tegangan <.9v, sedangkan 1 didefinisikan sebagai level tegangan> 2.9v (bukan seperti yang Anda katakan .9 hingga 1.5). Ini menyisakan celah tegangan 2v. Ini berarti bahwa tegangan sinyal harus bervariasi hingga 200% , sebelum "tidak sengaja" mengubah keadaan bit (sangat tidak mungkin).
Yang kedua adalah dengan "clocking"sinyal logika. Karena tegangan / kebisingan "tidak disengaja" bersifat acak dan berumur pendek, dengan membiarkan perubahan keadaan hanya pada interval tertentu (dan pendek), kemungkinan "variasi" yang mengenai pada jam itu diminimalkan.
Tentu saja ada cara dan metode lain yang digunakan, tergantung pada tingkat keandalan yang diperlukan (ECD, ECC, dll.).
sumber
Rekayasa yang bagus.
Banyak upaya dimasukkan ke dalam desain untuk mencegah korupsi data , atau untuk memperbaikinya ketika itu tidak dapat dicegah secara memadai (misalnya memori ECC ).
Hal-hal yang dapat menyebabkan korupsi data meliputi:
Singkatnya, banyak rekayasa telah masuk ke desain digital sehingga insinyur perangkat lunak dapat membuat asumsi sederhana bahwa '0' berarti '0' dan '1' berarti '1'.
sumber
Dua aspek mendasar dari komputer elektronik praktis adalah:
Catu daya yang sangat stabil
Waktu (biasanya didefinisikan sebagai frekuensi atau penundaan jam)
Catu daya untuk sistem komputasi ditentukan dan diatur dengan sangat ketat. Bahkan, untuk sistem komputasi apa pun catu daya biasanya diatur beberapa kali: pada catu daya (atau pengisi daya baterai), pada input utama ke motherboard, pada input ke kartu anak dan akhirnya pada chip itu sendiri.
Ini menghilangkan banyak kebisingan (volatilitas listrik). Apa yang dilihat CPU adalah sumber tegangan yang sangat stabil dan tidak mudah menguap yang dapat digunakan untuk memproses logika.
Sumber utama berikutnya dari nilai-nilai perantara (tegangan antara apa yang dianggap 0 atau 1) datang ketika nilai-nilai transisi. Baik 1 berubah menjadi 0 (waktu jatuh) atau 0 berubah menjadi 1 (waktu naik). Anda benar-benar tidak bisa berbuat banyak tentang hal itu kecuali menunggu transisi selesai sebelum menerima output dari rangkaian. Sebelum transisi selesai, keluaran sirkuit dianggap sebagai sampah.
Dalam rekayasa solusi untuk masalah ini adalah dengan menulis berapa lama Anda harus menunggu hasilnya benar di atas kertas. Ini adalah asal dari frekuensi jam CPU. Berapa GHz Anda dapat menjalankan CPU tergantung pada berapa lama waktu yang diperlukan untuk perubahan status pada CPU untuk stabil.
Sebenarnya ada sumber volatilitas ketiga: input ke sirkuit. Solusi untuk masalah itu mirip dengan masalah umum di atas: pastikan sinyal (tegangan atau arus) yang masuk ke sistem stabil dan pastikan sinyal punya cukup waktu untuk stabil.
Bagian kedua dari masalah adalah mengapa kami mencicipi input ke kait atau register sebelum diproses. Sinyal mungkin sampah. Tetapi mereka akan menjadi 0 atau 1 sampah di bagian dalam register ketika mereka diproses. Bagian pertama dari masalah adalah untuk apa jaminan.
sumber
Umpan balik adalah apa yang mencegahnya mendekati tegangan ambang, dan memaksanya berperilaku baik.
Ini biasanya dalam bentuk semacam rangkaian pengunci, seringkali berupa sirkuit pengunci yang di-clock.
Sebagai contoh sederhana, pertimbangkan flip-flop . Ini dirancang sehingga output diumpankan kembali ke sirkuit logika sebagai input tambahan. Logika di dalam elemen, oleh karena itu, tahu apa itu keluaran dan itu akan terus menghasilkan nilai yang sama sampai input lain memaksanya ke keadaan yang berlawanan.
Karena rangkaian dirancang sedemikian rupa sehingga transistor benar-benar hidup atau mati sepenuhnya, maka ia akan selalu keluar di dekat catu daya dan batas tanah - ia tidak akan mendekati level 0,9v, dan ketika melakukan transisi, ia akan dengan cepat dan sepenuhnya bergerak ke negara bagian lain. Sirkuit dirancang khusus untuk menghindari operasi di wilayah analog antara kedua negara.
sumber
Di bawah kondisi operasi normal, 0 dan 1 jarang kesalahan, tetapi dalam kondisi operasi yang buruk (yaitu baterai rendah atau waktu yang singkat setelah daya AC terputus dan tegangan kapasitor jatuh), hal-hal aneh terjadi dan 0 dan 1 menjadi kacau sepanjang waktu.
Untuk alasan ini, jika Anda menulis kode defensif (perangkat lunak atau HDL) yang tidak ingin Anda kunci, Anda harus selalu mempertimbangkan kasus di mana angka mungkin salah . Sebagai contoh,
lebih baik untuk mengubah
==
untuk>=
berjaga-jaga jika nilaii
melompat dari 9 ke 11 atau angka lebih besar dari 10, yang akan menyebabkan Anda tidak pernah keluar dari loop sampaii
membungkus ke 0 (katakanlah setelah 4 miliar iterasi).Itu terjadi, percayalah ...
sumber
i
melompat ke beberapa angka negatif besar?