Saya mendapat kesan bahwa ketika komputer crash, ada yang tidak beres dan tidak dapat bekerja lagi.
Saya bertanya-tanya bagaimana komputer dapat menyimpan sesuatu sebelum crash?
Apakah komputer benar-benar mampu mengetahui kapan akan crash (dan dengan demikian menginformasikan semua proses: " Simpan ASAP karena saya akan crash ")?
Jika tidak, bagaimana mungkin program suka Chrome
dan Microsoft Word
dapat menawarkan layanan "memulihkan" setelah komputer macet?
windows
filesystems
crash
restore
Pacerier
sumber
sumber
Jawaban:
Ketika komputer "crash", itu mungkin, misalnya, disebabkan oleh kegagalan daya "tiba-tiba" (dalam hal tidak ada yang dapat dilakukan), itu mungkin karena semacam peristiwa internal yang buruk (misalnya, tabel halaman rusak) yang sama mencegah melakukan apa pun, atau mungkin karena beberapa kondisi yang hanya mencegah "operasi lebih lanjut" entah bagaimana - mungkin proses baru tidak dapat dimulai, mungkin tampilan tidak dapat diperbarui, mungkin sistem hanya kehabisan penyimpanan.
Dalam situasi terakhir ini OS masih dapat berfungsi, dalam batas, dan setidaknya dapat menyelesaikan operasi disk yang sedang berlangsung, menutup file dengan baik, dll. Selain itu, jika sedikit lebih banyak fungsi yang mungkin, OS mungkin dapat memberi tahu berbagai aplikasi proses untuk mematikan diri dengan bersih.
Tetapi bahkan jika sistem turun "keras", sistem secara keseluruhan dan aplikasi individu mungkin telah mempertahankan sistem "jurnal" dan / atau "pos pemeriksaan" untuk memungkinkan keadaan sistem secara keseluruhan dan aplikasi individual dapat dipulihkan ke titik "atom", di mana semuanya "konsisten secara internal", dan di mana minimum data penting telah hilang.
Ini semua tidak dilakukan dengan mekanisme tunggal, tetapi dengan lapisan fungsionalitas pada tingkat sistem dan aplikasi.
Berkenaan dengan kegagalan daya secara khusus, mungkin ada atau tidak ada pemberitahuan terlebih dahulu, dan peringatan "muka" mungkin sebagian kecil atau (dengan UPS atau baterai laptop gagal) beberapa menit. Apa yang bisa dilakukan tergantung pada jumlah peringatan.
Dalam kebanyakan kasus, dengan sistem desktop tanpa UPS, ada waktu terbaik untuk "menghentikan" operasi disk sehingga tidak ada disk di tengah penulisan ketika daya akhirnya menghilang. Ini mencegah menghasilkan bad sector pada disk. Dulu, ketika RAM jauh lebih kecil, bahwa mungkin ada cukup waktu (dengan kapasitor besar di catu daya, atau bahkan, anehnya menggunakan energi yang tersimpan dalam rotor disk drive untuk menghasilkan listrik) untuk menulis RAM ke disk sebelum daya turun, tetapi kemungkinan itu hampir hilang ketika RAM tumbuh lebih besar dari 100 juta.
[Dan perhatikan bahwa, di masa lalu, ketika memori dibuat dengan magnet "core", RAM secara inheren dipertahankan ketika daya hilang (meskipun kata tertentu sedang dibaca / ditulis ketika listrik gagal mungkin rusak). Ini membuatnya lebih mudah bagi sistem lama untuk pulih dari kegagalan daya.]
Namun, dengan sesuatu yang menyerupai UPS (yang dapat memberi daya mulai dari beberapa menit hingga beberapa jam) ada beberapa opsi lagi. Salah satunya adalah cukup mematikan sistem, seolah-olah Anda meminta "matikan". Ini menyebabkan setiap aplikasi berakhir dengan sendirinya, dan kemudian sistem secara keseluruhan menulis tabel permanen dan dimatikan. Ini bisa memakan waktu lama (karena saya yakin banyak dari Anda telah memperhatikan). Tetapi juga dimungkinkan untuk menggunakan strategi "hibernate", di mana RAM ditulis ke disk sebagai satu blok, dan kemudian sistem dimatikan. Dalam skenario "hibernate", pada memulihkan daya, RAM dibaca kembali ke tempat persisnya itu ditulis, beberapa bit di sana-sini meliuk-liuk, dan kemudian eksekusi dilanjutkan di mana ia tinggalkan.
Pada beberapa sistem "besi besar" yang lebih tua, strategi semi-hibernate digunakan untuk melakukan shutdown darurat: Memori akan dituliskan seperti di atas, tetapi ketika daya dipulihkan dan memori dibaca, maka shutdown standar akan terjadi. Ini dilakukan karena beberapa bit dari status sistem (khususnya di I / O controller) tidak dapat disimpan / dikembalikan dengan andal untuk memungkinkan operasi yang berkelanjutan.
sumber
Chrome dan Microsoft Word secara berkala menyimpan status Anda saat ini saat Anda sedang bekerja. Jika aplikasi atau komputer macet, ketika aplikasi diluncurkan kembali, mereka mencari status tersimpan di disk, dan mengembalikannya untuk Anda. Mereka tidak perlu memprediksi kecelakaan; mereka terus-menerus menyelamatkan negara Anda jika terjadi kesalahan.
sumber
EDIT: Ini hanya berfungsi ketika aplikasi mogok, bukan Windows.
Sejak Windows Vista ada API baru yang memungkinkan Windows untuk memanggil fungsi khusus dalam aplikasi ketika crash sehingga dapat mencoba memulihkan data apa pun sebelum ditutup. Ini berfungsi seperti ini:
RecoverData()
RecoverData()
di AppRecoverData()
mencoba mengambil data tentang dokumen yang saat ini dibuka, sementara itu ia terus melakukan ping Windows untuk memberi tahu masih sibuk memulihkan.RecoverData()
selesai / habis / berhenti ping, Windows mengakhiri Aplikasi dan me-restart-nya.Info lebih lanjut: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx
sumber
RecoverData()
?Yah, mereka hanya menyimpan kondisi saat ini sebelum crash. Seperti simpan otomatis setiap X detik.
Saya pikir kita harus membedakan:
sumber
Itu tergantung pada tingkat keparahan kecelakaan itu. Kecelakaan yang sangat parah (pada level terendah komputer) akan menyebabkan komputer berhenti begitu saja. Satu-satunya pekerjaan yang disimpan adalah dengan setiap aplikasi menyimpan data mereka secara berkala.
Untuk kerusakan yang tidak terlalu parah, komputer akan memperingatkan setiap program yang harus dimatikan. JIKA program mendengarkan pesan ini, ini adalah tempat program akan menyimpan data saat ini. Namun, tidak semua program memperhatikan pesan ini.
sumber
Program-program menyimpannya secara berkala dalam file pada disk. Komputer tidak mampu mengetahuinya. Bahkan, crash dump bahkan tidak dilakukan menggunakan driver disk - sistem hanya mengeluarkan semua memori.
sumber
Ya, ini sepenuhnya benar. Namun, dari perspektif logis, program Anda tidak berjalan tanpa batasan di komputer. Program berjalan di bawah sistem operasi!
Nah, dalam kasus BSOD atau kernel panik, sistem operasi menentukan bahwa hal yang benar-benar tidak aman akan terjadi (penunjuk memori tidak valid, menimpa beberapa memori yang dialokasikan untuk kernel OS, akses ke perangkat keras yang tidak ada, dll. .). Dalam hal ini, sistem operasi meminta semua proses untuk menghentikan eksekusi, menyimpan konten RAM ke disk (karena OS juga bertanggung jawab untuk mengelola alokasi memori), dan dengan aman mematikan atau me-restart komputer.
Aplikasi individual sendiri macet ketika ada pengecualian yang tidak tertangani yang dilemparkan oleh program, yang menyebar ke sistem operasi. Dalam hal ini, OS akan menghentikan eksekusi program, dan menutup semua penanganan memori / file yang terbuka.
Dalam kedua kasus di atas, pelaksanaan program biasanya tidak dihentikan dengan anggun. Dalam kasus ini, tergantung pada aplikasi individual untuk memulihkan data mereka sendiri, karena mereka tiba-tiba hanya "menghentikan" eksekusi.
IIRC, kedua aplikasi tersebut secara berkala menyimpan status aplikasi ke disk untuk mencegah kehilangan data jika kondisi tersebut terjadi. Misalnya, Word menyimpan salinan cadangan dari dokumen kerja Anda saat ini setiap beberapa menit sehingga jika terjadi hard-reboot tiba-tiba, Anda masih dapat memulihkan data Anda (memberi atau mengambil beberapa menit kerja) tanpa Anda harus telah melakukan apa saja.
Namun sekali lagi, sebagai pengembang, itu adalah tanggung jawab Anda sendiri untuk memastikan bahwa aplikasi Anda dapat menghadapi situasi ini.
sumber
kindall
menyatakan, mereka tidak dikembalikan (karena jika Anda melakukan mengembalikan RAM, Anda akan berada dalam keadaan eksekusi yang sama yang menyebabkan komputer crash di tempat pertama!). Anda dapat mengubah apa yang ditulis ke disk di Windows di bawah System Properties -> Advanced -> Startup & Recovery. Dan lagi seperti yangkindall
dinyatakan, informasi ini sebagian besar berguna bagi pengembang yang mencoba menentukan apa yang menyebabkan kesalahan.ya, proses pemulihan data tidak hanya untuk crash komputer, itu untuk pemadaman listrik, crash program, berhenti tanpa menyimpan, dan banyak lagi ..
Apa yang Anda katakan itu benar, komputer tidak bisa 'tahu' kapan akan crash, dalam kasus Word, secara otomatis menyimpan otomatis sehingga dapat mengembalikan data itu. Dalam kasus Chrome, itu mungkin menyimpan info untuk setiap tab di suatu tempat dan menghapusnya pada saat berhenti berhasil, atau ketika sesi baru dan berbeda dimulai .. atau mungkin cara lain juga .. bagaimanapun, dengan cara itu, jika tidak diakhiri dengan penghentian yang berhasil, data tersebut harus dikembalikan.
Saya (jelas) tidak bekerja untuk Microsoft atau Google, tetapi itu mungkin cara (atau dekat dengan cara) kerjanya.
sumber
Suatu program dapat menulis flag ke disk yang hanya mengatakan sesuatu seperti "Pada bootup, jika flag ini diset maka ada yang tidak beres". Pada bootup, flag itu dicentang untuk melihat apakah flag sudah disetel. Jika ya, program tahu ada yang salah.
Bendera selalu berfungsi, karena dapat diatur segera setelah program dimulai, dan dimatikan saat program keluar secara normal. Jika program keluar lakukan untuk kesalahan yang tidak terduga, seperti komputer dimatikan secara tiba-tiba, bendera masih akan ditetapkan karena tidak keluar secara normal. Kemudian program dapat mengatakan bahwa itu tidak keluar secara normal terakhir kali dijalankan.
sumber
Seperti yang dikatakan @bamboom , ada beberapa jenis komputer "macet" yang harus ditangani secara berbeda. Secara efektif pemadaman listrik sangat berbeda dari, katakanlah, pembagian bilangan bulat dengan kesalahan nol.
Dengan banyak bahasa pemrograman yang juga mendukung pengecualian (percabangan terkontrol ke penangan kesalahan ketika terjadi kesalahan), ada kemungkinan memiliki penangan kesalahan aplikasi-lebar tingkat atas yang dapat menyimpan keadaan aplikasi (termasuk dokumen terbuka, perubahan yang dibuat , dll.) ketika kesalahan aplikasi tidak ditangani terjadi. Idenya adalah untuk mencoba membaca semuanya kembali ketika aplikasi di-restart. Bergantung pada jenis kesalahan dan bagaimana tepatnya ini diterapkan, itu tidak selalu bekerja, dan tentu saja tergantung pada masing-masing aplikasi terpisah untuk melakukan sesuatu yang berarti dalam menghadapi kesalahan dan dengan data yang dihasilkan - tetapi dapat menjadi strategi mengejutkan yang efektif dalam membantu pengguna pulih dari kerusakan dengan jumlah minimal pekerjaan yang hilang.
sumber
Saya ingin titik tingkat rendah di sini, karena ada tag sistem file.
Anda bisa mengingat OS Windows yang menggunakan sistem file FAT / FAT16 / FAT32. Terkadang ada masalah ketika pengguna mengalami pemadaman listrik dan seluruh sistem mati. Setelah mencoba me-reboot itu akan mengatakan bahwa file hilang dan tidak mungkin untuk boot. Ini terjadi karena FAT32 tidak melacak operasi yang dilakukannya secara transaksional.
Sebaliknya, sistem file NTFS yang lebih baru menerima dukungan jurnal atas infrastrukturnya, yang berarti pada level OS yang rendah dan informasi lapisan akses perangkat keras akan disimpan dalam kondisi aman yang stabil dengan merekam setiap tindakan yang akan dilakukan.
sumber
Dalam beberapa aplikasi pada beberapa sistem operasi, dimungkinkan untuk menghubungkan ke sinyal seperti kesalahan segmentasi yang mengindikasikan pelanggaran akses memori. Dalam hal ini, rutinitas sederhana dapat menyimpan data sebanyak mungkin. Apakah data dapat digunakan atau tidak adalah pertanyaan lain - kerusakan mungkin telah merusaknya. Meskipun aplikasi dapat terus berjalan setelah mengganggu sinyal, aplikasi tidak disarankan, karena mungkin dalam keadaan tidak stabil dengan memori rusak yang dapat menyebabkan masalah lebih lanjut.
Aplikasi lain menggunakan penyimpanan otomatis, atau kombinasi keduanya - itu tergantung pada kebutuhan program dan dukungan platform untuk menangkap sinyal-sinyal ini.
sumber
Sistem crash hanyalah rutinitas lain yang dijalankan oleh OS. Alasan "Kecelakaan" terjadi adalah karena program atau pustaka gagal memuat atau tidak memuat dengan benar dan memiliki kemampuan untuk menyebabkan kerusakan permanen pada file sistem. Jadi sebagai tindakan pencegahan keamanan, windows memaksa shutdown / restart dan berhenti menulis semua file sistem sebelum file-file ini diizinkan untuk diedit oleh program / pustaka tunggakan.
Sebelum mematikan / memulai kembali, ini melakukan fungsi yang sama seperti shutdown / restart biasa: yaitu menyimpan file sistem dll.
Sejauh satu aplikasi (Word / Chrome) menyimpan "Kemajuan" Anda, itu adalah fungsi internal aplikasi, menyimpan kemajuan Anda pada interval tertentu (yang biasanya dapat Anda ubah dalam pengaturan program juga). Jika Anda mengalami crash aplikasi / sistem, setelah reboot, ia dapat melihat file itu dan menanyakan apakah Anda ingin memulihkan sesi.
sumber
Anda mungkin berbicara tentang OS yang dimatikan karena kehilangan daya. Ini bisa dibilang semacam crash.
Catu daya menginformasikan mainboard (melalui kabel sinyal, saya kira) tentang gangguan panjang inputnya, arus AC dinding yang tepat, jauh sebelum menghentikan outputnya, yang merupakan suplai arus DC yang tepat ke mainboard. Ini dapat dilakukan karena menyimpan listriknya dalam kapasitor besar. OS menerima sinyal ini dalam bentuk interupsi perangkat keras.
Selama interval yang panjang ini, ada cukup waktu bagi sistem file buffer-tulis untuk mentransfer semua buffer yang ditulis ke media penyimpanan fisik permanen, juga untuk melakukan beberapa rutinitas shutdown lainnya.
Satu keuntungan besar dari filesystem buffer-tulis adalah bahwa dengan menyortir menulis, itu dapat mengurangi gerakan lengan pada drive hard disk, membuatnya lebih sedikit dan lebih jauh.
Ini mirip dengan apa yang dikatakan @oleksii dalam jawabannya, kecuali bahwa dalam sistem file write-buffering, transaksi yang diselesaikan biasanya tidak segera ditransfer, tetapi hanya disangga. Pada kegagalan daya, transaksi yang diselesaikan harus ditransfer ke disk.
sumber
Aplikasi dapat menangkap sinyal dalam C dan menyimpan data tertentu. Satu sinyal yang mungkin Anda dapatkan secara tidak sengaja adalah SIGFPE Floating-Point arithmetic Exception (ANSI). Kesalahan termasuk pembagian dengan nol dan melimpah. Singal lain adalah SIGINT yang dimunculkan dengan menekan ctrl + C pada konsol atau terminal yang membunuh aplikasi
sumber