Bagaimana komputer dapat menyimpan sesuatu sebelum crash?

52

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 Chromedan Microsoft Worddapat menawarkan layanan "memulihkan" setelah komputer macet?

Pacerier
sumber
13
Saya suka bagaimana jawaban untuk pertanyaan tersebut ada di judul pertanyaan.
Chris
Bagaimana lampu darurat bisa menyala ketika daya dimatikan?
JoelFan
@ JoelFan mereka tidak melakukannya jika baterai / generator Anda mati = P
Mechaflash

Jawaban:

6

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.

Daniel R Hicks
sumber
82

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.

Stephen Jennings
sumber
10
Ini hanya sebagian benar. OS sekarang menyediakan kerangka kerja untuk membantu aplikasi pulih dari pengecualian.
surfasb
3
@surfasb: Bisakah Anda lebih spesifik? Kami selalu dapat menangkap sinyal di sistem mirip Unix, tetapi tergantung pada pemrogram aplikasi untuk melakukan apa pun.
Dietrich Epp
5
Jawaban ini benar. Sebagian besar aplikasi dengan pemulihan kesalahan menyimpan data mereka secara berkala. OS tidak bisa tahu kapan akan crash. Dan ketika tahu, sudah terlambat.
Bogdacutu
1
@surfasb, pertanyaan yang diajukan tentang komputer (Kernel mungkin) macet, bukan aplikasi yang mendapatkan pengecualian, yang umumnya ditangani dan semuanya baik-baik saja, atau paling tidak, inti proses dump, tidak menyimpan dokumen Anda.
psusi
62

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:

  • Aplikasi dimulai
  • Aplikasi memanggil fungsi Windows: ketika saya crash tolong jalankan RecoverData()
  • ...
  • Apl macet
  • Windows dijalankan RecoverData()di App
  • RecoverData() mencoba mengambil data tentang dokumen yang saat ini dibuka, sementara itu ia terus melakukan ping Windows untuk memberi tahu masih sibuk memulihkan.
  • Setelah 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

ZippyV
sumber
8
+1: Ini adalah salah satu alat yang paling jarang digunakan di luar sana. Dan sayangnya, ini bukan jawaban yang paling banyak dipilih ??
surfasb
2
@ZippyV, bukankah benar bahwa jika bukan aplikasi yang crash tapi windows itu sendiri yang crash, komputer tidak memiliki kemampuan untuk memanggil RecoverData()?
Pacerier
12
OP bertanya tentang crash komputer (OS), bukan crash aplikasi, oleh karena itu jawaban ini tidak relevan.
vitaut
Benar, dalam kasus BSOD, ini tidak akan berfungsi.
ZippyV
API yang konyol untuk ditambahkan MS. Setelah sampai pada titik itu Anda tidak bisa mempercayai aplikasi untuk menyimpan data apa pun, itulah sebabnya aplikasi telah dirancang selama puluhan tahun untuk menyimpan data sebelum terjadi kesalahan.
psusi
16

Yah, mereka hanya menyimpan kondisi saat ini sebelum crash. Seperti simpan otomatis setiap X detik.

Saya pikir kita harus membedakan:

  • Kecelakaan perangkat keras: Hanya dapat memulihkan dengan pos pemeriksaan sebelumnya
  • OS Crash: tidak ada cara bagi aplikasi untuk menyimpan data, OS dapat menjatuhkan sesuatu seperti dump inti
  • Kecelakaan aplikasi: Fitur OS untuk kerusakan aplikasi dapat menyimpan informasi
inf
sumber
Ya saya berbicara tentang crash yang lebih serius seperti crash OS / hardware
Pacerier
10

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.

beeudoublez
sumber
1
Saya tidak berpikir bagian terakhir sebenarnya mungkin. Windows hanya memberi Anda BSoD jika mendeteksi pengecualian dalam mode kernel atau kesalahan fatal lainnya yang berarti beberapa data dalam ruang alamat kernel rusak. Karena program mode kernel (driver, dll) memiliki akses memori tidak terbatas, kesalahan tidak dapat dengan mudah diisolasi ke komponen sehingga seluruh sistem harus dimatikan dalam mode kernel. Memberi sinyal pada program ruang pengguna untuk menyimpan data pada dasarnya berarti melanjutkan kembali sebagian besar fungsi kernel yang sangat berbahaya.
billc.cn
2
Bagian terakhir tampaknya merujuk ke crash userspace, bukan BSoDs.
3Doubloons
8

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.

kinokijuf
sumber
Paging dilakukan dengan driver disk - tanpanya kernel tidak akan tahu bagaimana menulis ke disk.
psusi
@psusi Ketika sistem macet, pagefile adalah satu-satunya tempat yang diketahui oleh kernel untuk menulis.
kinokijuf
Ya, dan itu benar-benar menulis melalui driver disk.
psusi
1
Tidak. Ini dilakukan melalui driver khusus "dump_atapi.sys" (pengganti atapi untuk pengontrol SCSI Anda), BUKAN driver disk standar. Saya pikir itu bahkan menggunakan Int 13h.
kinokijuf
6

Saya mendapat kesan bahwa ketika komputer crash, ada yang tidak beres dan tidak dapat bekerja lagi.

Ya, ini sepenuhnya benar. Namun, dari perspektif logis, program Anda tidak berjalan tanpa batasan di komputer. Program berjalan di bawah sistem operasi!

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")?

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.

Jika tidak, bagaimana mungkin program seperti Chrome dan Microsoft Word dapat menawarkan layanan "memulihkan" setelah komputer macet?

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.

Penerobosan
sumber
"Dalam hal ini, sistem operasi meminta semua proses untuk menghentikan eksekusi, menyimpan isi RAM ke disk, dan dengan aman mematikan atau me-restart komputer." - konten RAM yang disimpan ke disk, kapan mereka "dikembalikan"?
Pacerier
1
Mereka tidak dalam kegiatan normal. Namun, jika komputer Anda sering macet, programmer yang terampil mungkin dapat menggunakan file ini untuk mencari tahu penyebabnya.
Kindall
@Pacerier sebagai kindallmenyatakan, 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 yang kindalldinyatakan, informasi ini sebagian besar berguna bagi pengembang yang mencoba menentukan apa yang menyebabkan kesalahan.
Terobosan
3

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.

JATUH
sumber
2

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.

Paul
sumber
2

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.

sebuah CVn
sumber
2

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.

oleksii
sumber
1

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.

Thomas O
sumber
Petunjuk: Windows tidak memilikinya.
kinokijuf
1

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.

Mechaflash
sumber
1

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.

MarkDBlackwell
sumber
0

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