Bilgisayar çökmeden önce bir şeyleri nasıl kaydeder?


52

Bir bilgisayar çöktüğünde, bir şeylerin ters gittiği ve daha fazla performans gösteremediği izlenimi altında kaldım.

Bilgisayar çökmeden önce nasıl bir şeyleri kurtarabildiğini merak ediyordum?

Bilgisayar ne zaman çökeceğini bilmek konusunda gerçekten yetenekli midir (ve böylece tüm işlemleri bildirir: " Kilitleneceğim için ASAP'ı kaydet ")?

Olmazsa, bilgisayar düştükten sonra programların "geri yükleme" hizmetlerini beğenmesi Chromeve Microsoft Wordsunması nasıl mümkün olabilir?


13
Sorunun cevabının soru başlığında ne kadar hoşuma gitti.
Chris

Güç kapalıyken acil durum ışıkları nasıl yanabilir?
JoelFan

@JoelFan pil / jeneratörünüz
bitmişse yapmazlar

Yanıtlar:


6

Bir bilgisayar "çökerse", örneğin, "ani" bir elektrik kesintisi nedeniyle olabilir (bu durumda hiçbir şey yapılamaz), bu bir tür kötü iç olaydan kaynaklanabilir (örn. Bozuk sayfa tabloları). benzer şekilde bir şeyi yapmayı da engeller veya bir şekilde "daha fazla işlemi" önleyen bir koşuldan kaynaklanıyor olabilir - belki de yeni işlemler başlatılamaz, belki ekran güncellenemez, belki de sistem basitçe tükenmiştir.

Bu son durumlarda, işletim sistemi hala sınırlar dahilinde çalışabilir ve en azından devam eden disk işlemlerini tamamlayabilir, dosyaları güzelce kapatabilir vb. Ek olarak, biraz daha fazla işlev mümkün olduğunda, işletim sistemi çeşitli uygulamaları anlatabilir kendilerini temiz bir şekilde kapatmak için işler.

Ancak sistem "zor" duruma geçse bile, sistemin bir bütün olarak ve bireysel uygulamalar, sistemin bir bütün olarak ve bireysel uygulamaların durumunun geri kazanılmasını sağlamak için "dergiler" ve / veya "kontrol noktaları" sistemini korumuş olabilir. her şeyin "dahili olarak tutarlı" olduğu ve minimum önemli verilerin kaybolduğu "atomik" bir noktaya.

Bunların hepsi tek bir mekanizma ile değil, sistem ve uygulama düzeyinde işlevsellik katmanları ile gerçekleştirilir.

Özel olarak elektrik kesintileri ile ilgili olarak, önceden bildirim olabilir veya olmayabilir ve "ilerleme" uyarısı bir saniyenin veya (UPS veya arızalı bir dizüstü bilgisayar bataryasıyla) birkaç dakikadan kısa bir süre olabilir. Yapılabilecekler, uyarı miktarına bağlıdır.

Çoğu durumda, UPS'siz bir masaüstü sistemiyle, disk işlemlerini "kesmek" için en iyi zaman vardır, böylece güç kaybolduğunda yazma işleminin ortasında disk olmaz. Bu, diskte bozuk kesimler oluşmasını önler. RAM çok daha küçük olduğunda, güç vermeden önce RAM diske yazmak için (güç kaynağında büyük kapasitörler varken, hatta disk sürücü rotorunda depolanan enerjiyi garip bir şekilde kullanarak) yeterli zaman olabilirdi. düştü, ancak bu olasılık RAM 100M'den daha fazla büyüdüğünde hemen hemen yok oldu.

[Ve eski günlerde, manyetik "çekirdekli" hatıralar çekildiğinde RAM'in, güç kaybolduğunda doğal olarak korunduğunu unutmayın (yine de, güç kesintisi olduğunda okunan / yazılmış bir sözcük olsa da). Bu, eski sistemlerin elektrik kesintisinden kurtarılmasını kolaylaştırdı.]

Bununla birlikte, bir UPS'e benzeyen bir şeyle (birkaç dakikadan birkaç saate kadar ek güç verebilecek), birkaç seçenek daha vardır. Bunlardan birincisi, sistemi kapatmanız isteniyormuş gibi kapatmanız. Bu, her uygulamanın kendisini sonlandırmasına neden olur ve ardından sistem bir bütün olarak kalıcı masaları yazar ve kapanır. Bu uzun zaman alabilir (birçoğunuzun fark etmiş olduğundan emin olduğum için). Ancak RAM'in diske tek bir blok olarak yazıldığı ve ardından sistemin kapatıldığı "hazırda bekletme" stratejisini kullanmak da mümkündür. "Hazırda bekletme" senaryosunda, gücü geri kazanırken RAM, tam olarak nereden yazıldığını, burada birkaç bit olduğunu tekrar okur ve şişti, sonra yürütme kaldığı yerden devam eder.

Bazı eski "büyük demir" sistemlerinde, acil durum kapatması için yarı-hazırda bekletme stratejisi kullanıldı: Bellek yukarıdaki gibi yazılır, ancak güç yenilendiğinde ve bellek okunduğunda standart bir kapatma gerçekleşir. Bu, bazı işlem durumlarının (özellikle G / Ç denetleyicilerinde) bitmeyen işlemlere izin vermek için güvenilir bir şekilde kaydedilemediği / geri yüklenemediği için yapıldı.


82

Chrome ve Microsoft Word, çalışırken durumunuzu düzenli olarak kaydeder. Uygulama veya bilgisayar çökerse, uygulamalar yeniden başlatıldığında, diskte kaydedilmiş bir durumu ararlar ve sizin için geri yüklerler. Kazayı tahmin etmelerine gerek yok; Bir şeyler ters gittiğinde sürekli devletinizi kurtarıyorlar.


10
Bu sadece kısmen doğrudur. İşletim sistemleri artık uygulamaların istisnalardan kurtarılmasına yardımcı olacak çerçeveler sunmaktadır.
surfasb

3
@surfasb: Daha spesifik olabilir misiniz? Unix benzeri sistemlerde her zaman sinyalleri yakaladık, ancak bu konuda bir şeyler yapmak uygulama programcısına bağlı.
Dietrich Epp

5
Bu cevap doğru. Hata kurtarma özelliği olan çoğu uygulama verilerini düzenli aralıklarla kaydeder. İşletim sistemi ne zaman çökeceğini bilmiyor. Ve öğrendiğinde, çok geç oldu.
Bogdacutu

1
@surfasb sorusu, bilgisayar (muhtemelen Çekirdek) çökmesine neden oldu, genel olarak ele alınan ve istisnasız olan bir istisna almayan bir uygulama çöktü, her şey yolunda ya da en iyisi, işlem çekirdeği dökülüyor, belgelerinizi kaydetmiyor.
psusi,

62

EDIT: Bu, yalnızca bir uygulama çöktüğünde çalışır, Windows'u değil.

Windows Vista'dan beri, Windows'un çöküşte uygulamada özel bir işlevi çağırmasını sağlayan yeni bir API vardır, böylece kapatılmadan önce tüm verileri kurtarmayı deneyebilir. Bu gibi çalışır:

  • App başlar
  • App Windows işlevini çağırır: çarptığımda lütfen yürüt RecoverData()
  • ...
  • Uygulama çöküyor
  • RecoverData()App içinde Windows çalıştırır
  • RecoverData() Şu anda açık olan belge hakkında veri almaya çalışır, bu sırada hala kurtarma işleminin hala meşgul olduğunu söylemek için Windows'a ping göndermeye devam eder.
  • Ne zaman RecoverData()bittikten / zaman aşımına / Windows App sonlandırır tekrar başlatırsa, ping durdurur.

Daha fazla bilgi: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx


8
+1: Bu ne yazık ki orada en az kullanılan araçlardan biridir. Ve ne yazık ki, bu en çok oy alan cevap değil mi ??
surfasb

2
@ZippyV, ancak çökmesine neden olan bir uygulama değil, çökmekte olan pencerelerin kendisi ise, bilgisayarın arama kabiliyetine sahip olmadığı doğru değil RecoverData()mi?
Pacerier

12
OP, uygulama çökmesi hakkında değil bilgisayar (OS) çökmesi hakkında soru soruyor, bu nedenle bu cevap önemli değil.
Ocak'ta

Doğru, bir BSOD durumunda, bu işe yaramayacak.
ZippyV

MS için ne aptalca bir API eklemek için. Bu noktaya geldiğinde, herhangi bir veriyi kaydetmek için uygulamaya güvenemezsiniz; bu nedenle uygulamalar bir şey ters gitmeden önce yıllarca veri kaydetmek üzere tasarlanmıştır .
psusi,

16

Kazadan önce şu anki durumu koruyorlar. Her X saniyede bir otomatik kaydetme gibi.

Sanırım biri gerçekten ayırt etmek zorunda:

  • Donanım çökmesi: Yalnızca önceki kontrol noktaları ile kurtarılabilir
  • İşletim Sistemi Kazası: Uygulamanın veri kaydetmesi mümkün değil, işletim sistemi çekirdek dökümü gibi bir şeyi bırakabilir
  • Uygulama çökmesi: Uygulama çökmesi için işletim sistemi özellikleri bilgileri kaydedebilir

Evet, işletim sistemi / donanım kazaları gibi daha ciddi kazalardan bahsediyordum
Pacerier

10

Kazanın ciddiyetine bağlıdır. Çok şiddetli bir çarpışma (bilgisayarın en alt seviyesinde) bilgisayarın durmasına neden olur. Kaydedilen tek iş her uygulama tarafından verilerini periyodik olarak otomatik kaydetmedir.

Daha az ciddi çökmeler için, bilgisayar kapatması gereken her programı uyarır. EĞER program bu mesaja dinler programı güncel verileri kaydeder yer burası. Ancak, tüm programlar bu mesaja dikkat etmez.


1
İkinci kısmın gerçekte mümkün olduğunu sanmıyorum. Windows, yalnızca çekirdek modunda bir istisna veya çekirdek adres alanındaki bazı verilerin bozuk olduğu anlamına gelen diğer ölümcül hatalar algılarsa BSoD verir. Çekirdek modu programları (sürücüler vb.) Sınırsız bellek erişimine sahip olduklarından, hata bileşenlere kolayca izole edilemez, bu nedenle tüm sistemin çekirdek modunda kapatılması gerekir. Veri tasarrufu için kullanıcı alanı programlarını işaret etmek, esasen, çekirdeğin işlevselliğinin çoğunu tehlikeye atmak olan, çok tehlikeli olan anlamına gelir.
billc.cn

2
İkinci bölüm BSoD'lere değil, kullanıcı alanı çöküşlerine atıfta bulunuyor gibi görünüyor.
3Doubloons

8

Programlar, diskteki bir dosyada düzenli aralıklarla durumlarını kaydeder. Bilgisayar bunu bilemez. Aslında, çökme dökümü disk sürücüsü kullanılarak bile gerçekleştirilemiyor - sistem tüm belleği hafızada tutuyor.


Disk belleği ile disk belleği çağrısı yapılır - onsuz çekirdek diske nasıl yazılacağını bilemez.
psusi,

@ psusi Sistem çöktüğünde, sayfa dosyası, çekirdeğin güvenle yazabileceğini bildiği tek yerdir.
kinokijuf

Evet, aslında yazıyı disk sürücüsü aracılığıyla yapıyor.
psusi

1
Hayır. Standart bir disk sürücüsü değil, özel bir "dump_atapi.sys" (SCSI denetleyiciniz için atapi yerine) sürücüsü kullanır. Int 13h kullandığını bile düşünüyorum.
kinokijuf

6

Bir bilgisayar çöktüğünde, bir şeylerin ters gittiği ve daha fazla performans gösteremediği izlenimi altında kaldım.

Evet, bu tamamen doğru. Ancak, mantıksal bir bakış açısıyla, programınız bilgisayarda sınırsız olarak çalışmıyor. Program işletim sistemi altında çalışıyor!

Bilgisayar çökmeden önce nasıl bir şeyleri kurtarabildiğini merak ediyordum? Bilgisayar ne zaman çökeceğini bilmek konusunda gerçekten yetenekli midir?

Eh, bir BSOD veya çekirdek panik durumunda, işletim sistemi gerçekten güvenli olmayan bir şeyin olacağını belirledi (geçersiz bellek işaretçisi, işletim sistemi çekirdeğine ayrılan bazı belleğin üzerine yazma, var olmayan donanıma erişim vb.). .). Bu durumda, işletim sistemi yürütmeyi durdurmak için tüm işlemleri çağırır, RAM'in içeriğini diske kaydeder (işletim sistemi aynı zamanda bellek ayırma yönetiminden de sorumludur) ve bilgisayarı güvenli bir şekilde kapatır veya yeniden başlatır.

Bireysel uygulamaların kendileri, işletim sistemine yayılan programın attığı işlenmeyen bir istisna olduğunda çöküyor. Bu durumda, işletim sistemi programın yürütülmesini durduracak ve açık bellek / dosya tutamaçlarını kapatacaktır.

Yukarıdaki her iki durumda da, program yürütme genellikle incelikle sonlandırılmaz. Bu gibi durumlarda, kendi uygulamalarını kurtarmak tek tek uygulamalara kalmıştır, çünkü birdenbire çalıştırmayı "durdurur".

Olmazsa, Chrome ve Microsoft Word gibi programların bilgisayar düştükten sonra "geri yükleme" hizmetleri sunması nasıl mümkün olabilir?

IIRC, bu uygulamaların her ikisi de, yukarıda belirtilen durum meydana gelirse veri kaybını önlemek için uygulama durumlarını düzenli aralıklarla diske kaydeder. Örneğin, Word, mevcut çalışma belgenizin yedek bir kopyasını birkaç dakikada bir otomatik olarak kaydeder; bir şey yaptım.

Yine de, bir geliştirici olarak, başvurunuzun bu durumlarla başa çıkabilmesini sağlamak sizin sorumluluğunuzdadır.


"Bu durumda, işletim sistemi yürütmeyi durdurmak için tüm işlemleri çağırır, RAM içeriğini diske kaydeder ve bilgisayarı güvenli bir şekilde kapatır veya yeniden başlatır." - Diske kaydedilen RAM içeriği ne zaman "geri yüklenir"?
Pacerier

1
Olayların normal seyrinde yoklar. Ancak, bilgisayarınız düzenli olarak çöküyorsa, yetenekli bir programcı nedeni bulmak için bu dosyayı kullanabilir.
tür

Olarak @Pacerier kindallbelirtilen (eğer varsa beri, onlar geri alamadım did RAM geri, ilk etapta çökmesine bilgisayar neden aynı yürütme durumda olurdu!). Windows'ta diske yazılanları Sistem Özellikleri -> Gelişmiş -> Başlangıç ​​ve Kurtarma altından değiştirebilirsiniz. Ve yine kindallbelirtildiği gibi, bu bilgi çoğunlukla hataya neyin neden olduğunu belirlemeye çalışan geliştiriciler için yararlıdır.
Atılım

3

evet, veri geri yükleme işlemi sadece bilgisayar çökmeleri için değil, elektrik kesintileri, program çökmeleri, kaydetmeden çıkma ve çok daha fazlası içindir.

Söylediğiniz doğruysa, bilgisayar ne zaman çökeceğini 'bilemez', Word söz konusu olduğunda, bu verileri geri yükleyebilmesi için düzenli aralıklarla otomatik olarak kaydeder. Chrome söz konusu olduğunda, muhtemelen her sekmedeki bilgileri bir yerde saklar ve başarılı bir bırakma işleminde siler, ya da yeni ve farklı bir oturum başladığında .. ya da muhtemelen başka yollarla da siler. başarılı bir şekilde çıkma bittiğinde, geri yüklemek için bu verilere sahiptir.

Ben (açıkçası) Microsoft ya da Google için çalışmıyorum, ancak muhtemelen bu şekilde çalışıyor (ya da buna yakın).


2

Bir program, diske yalnızca "Açılışta, bu bayrak ayarlanmışsa bir şeyler ters gitti" yazan bir bayrak yazabilir. Açılışta bu bayrak ayarlanmış olup olmadığını görmek için kontrol edilir. Eğer öyleyse, program bir şeylerin ters gittiğini bilir.

Bayrak her zaman çalışır, çünkü program başlar başlamaz ayarlanabilir ve program normal bir şekilde çıktığında kapatılabilir. Program çıkarsa beklenmedik bir şekilde kapatılırsa, bir bilgisayar beklenmedik şekilde kapatılıyorsa, bayrak normal şekilde çıkmadığından yine de ayarlanacaktır. Ardından, program son çalıştırıldığında normal şekilde çıkmadığını söyleyebilir.


2

Gibi @bamboom diyor, farklı ele alınması gereken bilgisayar "çöker" birkaç farklı türleri vardır. Etkili bir elektrik kesintisi, örneğin, sıfır hatayla bir tamsayı bölmesinden çok farklıdır.

İstisnaları da destekleyen birçok programlama dili ile (bir şey tamamen yanlış gittiğinde bir hata işleyicisine kontrollü dallanma), uygulamanın durumunu kaydedebilecek en üst düzey uygulama genelinde hata işleyicisine sahip olma olasılığı vardır (açık belgeler, yapılan değişiklikler dahil) , vb.) işlenmeyen bir uygulama hatası oluştuğunda. Bu durumda fikir, uygulama yeniden başlatıldığında hepsini okumaya çalışmaktır. Hata türüne ve bunun tam olarak nasıl uygulandığına bağlı olarak, her zaman işe yaramaz ve elbette her bir ayrı uygulama, bir hata karşısında anlamlı bir şey yapmak ve elde edilen verilerle yapılır - ancak bu bir Kullanıcının asgari miktarda kayıp işi olan bir kazadan kurtulmasına yardımcı olan şaşırtıcı derecede etkili bir strateji.


2

Burada bir dosya sistemi etiketi olduğu için düşük seviyeli bir noktaya gelmek istiyorum.

FAT / FAT16 / FAT32 dosya sistemini kullanan Windows işletim sistemini hatırlamış olabilirsiniz. Bir kullanıcı elektrik kesintisi yaşadığında ve tüm sistem çöktüğünde bazen sorunlar yaşanıyordu. Yeniden başlatmayı denedikten sonra bir dosyanın eksik olduğunu ve önyüklemenin mümkün olmadığını söyler. Bu, FAT32'nin işlemsel olarak gerçekleştirdiği işlemleri takip etmediği için oldu.

Bunun aksine, daha yeni NTFS dosya sistemi altyapısı hakkında dergi desteği aldı ; bu, düşük işletim sistemi seviyesi ve donanım erişim katmanı bilgilerinin, taahhüt edilecek tüm işlemlerin kaydedilmesiyle istikrarlı ve güvenli bir durumda tutulması anlamına geliyor.


1

Bazı işletim sistemlerindeki bazı uygulamalarda, bellek erişim ihlallerini gösteren bölümleme hataları gibi sinyallere bağlanmak mümkündür. Bu durumda, basit bir rutin mümkün olduğu kadar fazla veri kaydedebilir. Bu verilerin kullanılabilir olup olmadığı başka bir sorudur - kaza onu bozmuş olabilir. Bir uygulamanın bir sinyali kestikten sonra çalışmaya devam etmesi mümkün olsa da, daha fazla soruna neden olabilecek bozuk hafızaya sahip dengesiz bir durumda olabileceğinden önerilmez.

Diğer uygulamalar otomatik tasarruf veya her ikisinin bir kombinasyonunu kullanır - bu, programın ihtiyaçlarına ve bu sinyalleri yakalamak için platform desteğine bağlıdır.


İpucu: Windows onlara sahip değil.
kinokijuf

1

Bir sistem çökmesi, işletim sistemi tarafından yürütülen başka bir rutindir. Bir "Kilitlenme" olmasının nedeni, bir program veya kütüphanenin yüklenememesi veya düzgün yüklenmemesi ve sistem dosyalarına kalıcı zarar verebilmesidir. Bu nedenle, bir güvenlik önlemi olarak, pencereler kapanmaya / yeniden başlatmaya zorlar ve bu dosyaların suçlanan program / kütüphane tarafından düzenlenmesine izin verilmeden önce tüm sistem dosyalarına yazmayı durdurur.

Kapatmadan / yeniden başlatmadan önce, normal kapatma / yeniden başlatma ile aynı işlevleri yerine getirir: örn. Sistem dosyalarını kaydetme vb.

Tekli uygulamalar (Word / Chrome), "İlerleme" durumunuzu kaydettiği sürece, uygulamanın dahili bir işlevidir, ilerlemenizi belirli aralıklarla (genellikle program ayarlarında da değiştirebileceğiniz) kaydeder. Bir uygulama / sistem çökmesi varsa, yeniden başlattıktan sonra, bu dosyaya bakabilir ve oturumu geri yüklemek isteyip istemediğinizi sorabilir.


1

Güç kaybı nedeniyle işletim sisteminin kapanmasından bahsediyor olabilirsiniz. Bu tartışmalı bir tür çarpışmadır.

Güç kaynağı, ana kartın (bir sinyal teli aracılığıyla, sanırım) girişinin herhangi bir uzun kesilmesi, uygun duvar AC akımı hakkında, çıkışını durdurarak, DC akımının ana panele doğru bir şekilde beslenmesini sağlar. Bunu yapabilir çünkü elektriğini büyük kapasitörlerde depolar. İşletim sistemi bu sinyali bir donanım kesintisi şeklinde alır.

Bu uzun süre zarfında, yazma tamponlama dosya sisteminin tüm tamponlanmış yazmaları kalıcı fiziksel depolama ortamına aktarması ve ayrıca bazı diğer kapatma rutinlerini gerçekleştirmesi için yeterli zaman vardır.

Yazma arabelleğe alma dosya sisteminin büyük bir avantajı, yazma işlemlerini sıralayarak, sabit disk sürücülerindeki kol hareketlerini azaltarak daha az ve daha uzak olmasını sağlamasıdır.

Bu, @oleksii'nin cevabında söylediklerine benzer, ancak yazma tamponlama dosya sisteminde, tamamlanmış işlemler normalde hemen transfer edilmez, sadece tamponlanır. Elektrik kesintisinde, tamamlanmış işlemler diske aktarılmalıdır.


0

Uygulamalar, C'deki sinyalleri yakalayabilir ve belirli verileri kaydedebilir. Yanlışlıkla alabileceğiniz bir sinyal SIGFPE Kayan Nokta aritmetik İstisnasıdır (ANSI). Hatalar sıfıra bölme ve taşma içerir. Başka bir şarkı da, konsolu veya terminaldeki ctrl + C tuşlarına basarak uygulamayı kaldıran SIGINT.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.