Kernel panic

Bir **kernel panic** (bazen **KP**  olarak kısaltılır), bir işletim sisteminin çekirdeği tarafından, güvenli bir şekilde kurtarılamadığı veya sistemi çalıştırmaya devam etmenin büyük veri kaybı yaşanabilmesinin yüksek bir riske sahip olacağı dahili bir kritik hata tespit edildiğinde alınan bir güvenlik önlemidir. Terim büyük ölçüde Unix ve Unix benzeri sistemlere özgüdür. Microsoft Windows işletim sistemlerindeki eşdeğeri, genellikle "mavi ekran" olarak adlandırılan bir durdurma hatasıdır.

AT&amp;amp;T'den türetilmiş ve BSD Unix kaynak kodunda `panic()` olarak bilinen panikleri işleyen çekirdek rutinleri genellikle konsola bir hata mesajı göndermek, ölüm sonrası hata ayıklama için diske çekirdek belleğinin bir görüntüsünü atmak ve ardından ya sistemin manuel olarak yeniden başlatılmasını bekleyin ya da otomatik yeniden başlatmayı başlatın. Sağlanan bilgiler oldukça teknik niteliktedir ve bir sistem yöneticisine veya yazılım geliştiricisine sorunu teşhis etmede yardımcı olmayı amaçlar. Kernel panic, çekirdek alanı dışından kaynaklanan hatalardan da kaynaklanabilir. Örneğin, birçok Unix işletim sistemi, kullanıcı alanında çalışan init işlemi sona ererse kernel panic yaşanır.

## Tarih
Unix çekirdeği, hata algılama mekanizması olarak iddialarla dahili tutarlılığı ve çalışma zamanı doğruluğunu korur. Temel varsayım, donanım ve yazılımın doğru bir şekilde çalışması gerektiği ve bir iddianın başarısızlığının bir *panic* ile, yani tüm sistem etkinliğinin gönüllü olarak durdurulmasıyla sonuçlanmasıdır. Kernel panic, Unix'in erken bir sürümünde tanıtıldı ve Unix'in tasarım felsefeleri ile öncülü Multics arasında büyük bir fark olduğunu gösterdi. Multics geliştiricisi Tom van Vleck, Unix geliştiricisi Dennis Ritchie ile bu değişiklikle ilgili bir tartışmayı hatırlıyor:Dennis'e Multics'te yazdığım kodun yarısının hata düzeltme kodu olduğunu söyledim. Bütün bunları dışarıda bıraktık dedi. Bir hata varsa, panic denen bir rutinimiz var ve çağrıldığında makine çöküyor ve koridorda 'Hey, yeniden başlat' diye bağırıyorsunuz." Asıl `panic()` fonksiyonu, Fifth Edition UNIX'ten VAX tabanlı UNIX 32V'ye temelde değişmedi ve başka hiçbir bilgi içermeyen yalnızca bir hata mesajı verdi, ardından sistemi sonsuz bir boş döngüye bıraktı.

V6 UNIX'te `panic()` işlevinin kaynak kodu:
```c
/*
 * In case console is off,
 * panicstr contains argument to last
 * call to panic.
 */
char    *panicstr;

/*
 * Panic is called on unresolvable
 * fatal errors.
 * It syncs, prints "panic: mesg" and
 * then loops.
 */
panic(s)
char *s;
{
        panicstr = s;
        update();
        printf("panic: %s\n", s);
        for(;;)
                idle();
}
```
Unix kod tabanı geliştirilirken, `panic()` fonksiyonu da çeşitli hata ayıklama bilgilerini konsola atmak için geliştirildi.

## Nedenler
İşletim sistemindeki bir donanım arızası veya yazılım hatası sonucu kernel panic meydana gelebilir. Çoğu durumda, işletim sistemi bir hata oluştuktan sonra çalışmaya devam edebilir. Bununla birlikte, sistem kararsız bir durumdadır ve güvenlik ihlalleri ve veri bozulması riskine girmek yerine, işletim sistemi daha fazla hasarı önlemek ve hatanın teşhisini kolaylaştırmak için durur ve olağan durumlarda yeniden başlatılır.

Kaynak kodundan bir çekirdek ikili görüntüsünü yeniden derledikten sonra, çekirdek doğru şekilde yapılandırılmamış, derlenmemiş veya kurulmamışsa, ortaya çıkan çekirdeği başlatırken bir çekirdek paniği yaygın bir sorundur. Ek donanım veya hatalı çalışan RAM, işletim sistemiyle uyumsuzluk veya eksik bir aygıt sürücüsü nedeniyle başlatma sırasında önemli çekirdek hatalarına da neden olabilir. Bir çekirdek, bir kök dosya sistemini bulamıyorsa, `panic()` de girebilir. Çekirdek kullanıcı alanı başlatmasının son aşamalarında, init'in oluşturulması başarısız olursa, tipik olarak bir panik tetiklenir. Başlatma işlemi sona ererse sistem kullanılamaz hale geleceği için bir panik de tetiklenebilir.

Aşağıdaki, `kernel_init()` içindeki Linux çekirdeği son başlatmasının bir uygulamasıdır:
```c
static int __ref kernel_init(void *unused)
{

         ...

        /*
         * We try each of these until one succeeds.
         *
         * The Bourne shell can be used instead of init if we are
         * trying to recover a really broken machine.
         */
        if (execute_command) {
                if (!run_init_process(execute_command))
                        return 0;
                pr_err("Failed to execute %s.  Attempting defaults...\n",
                        execute_command);
        }
        if (!run_init_process("/sbin/init") ||
            !run_init_process("/etc/init") ||
            !run_init_process("/bin/init") ||
            !run_init_process("/bin/sh"))
                return 0;

        panic("No init found.  Try passing init= option to kernel. "
              "See Linux Documentation/init.txt for guidance.");
}
```


## İşletim sistemine göre durumlar

### Linux

Çekirdek panikleri, diğer Unix benzeri sistemlerde olduğu gibi Linux'ta da görülür, ancak aynı zamanda kernel oops olarak bilinen başka bir tür hata koşulu da oluşturabilirler. Bu durumda, çekirdek normalde rahatsız edici işlemi öldürdükten sonra çalışmaya devam eder. Hata, bazı alt sistemlerin veya kaynakların kullanılamaz hale gelmesine neden olabileceğinden, daha sonra tam bir çekirdek paniğine yol açabilir.

Linux'ta bir kernel panic, kritik bir durumun görsel bir göstergesi olarak klavye LED'lerinin yanıp sönmesine neden olur.

### macOS
Mac OS X 10.2 ila 10.7'de bir çekirdek paniği meydana geldiğinde, bilgisayar kullanıcıya sistemi yeniden başlatmaları gerektiğini bildiren çok dilli bir mesaj görüntüler. 10.2'den önce, daha geleneksel bir Unix tarzı panik mesajı gösteriliyordu; 10.8 ve sonraki sürümlerde, bilgisayar otomatik olarak yeniden başlar ve yeniden başlatmanın ardından bir mesaj görüntüler. Mesajın formatı sürümden sürüme değişir:

* 10.0 &ndash; 10.1: Sistem, ekranda hatayla ilgili ayrıntıları veren metni görüntüler ve yanıt vermez hale gelir.
* 10.2: Siyah şeffaf bir perdeyi aşağı indirir ve ardından beyaz bir arka plan üzerinde kullanıcıya bilgisayarı yeniden başlatması gerektiğini bildiren bir mesaj görüntüler. Mesaj İngilizce, Fransızca, Almanca ve Japonca gösterilir.
* 10.3 &ndash; 10.5: Çekirdek paniği, 10.2 sürümüyle hemen hemen aynıdır ancak hata ekranının arka planı siyahtır.
* 10.6 &ndash; 10.7: Metin revize edildi ve şimdi bir İspanyolca çeviri içeriyor.
* 10.8 ve üstü: Bilgisayar hemen yeniden başlatılmadan önce yanıt vermiyor. Bilgisayar yeniden başlatıldığında, bir çekirdek paniği nedeniyle bilgisayarın yeniden başlatılmasıyla ilgili birkaç saniyeliğine bir uyarı mesajı görüntüler ve ardından bilgisayar yeniden başlatılır. Mesaj şimdi bir Çince çeviri içeriyor.

Bazen ilkinden sonraki üç dakika içinde beş veya daha fazla çekirdek paniği olduğunda, Mac 30 saniye boyunca yasak işareti görüntüler ve ardından kapanır; bu, "tekrarlayan kernel panic" olarak bilinir.

10.2'nin üzerindeki tüm sürümlerde, metin bir bekleme sembolü üzerine bindirilir ve tam ekran değildir. Hata ayıklama bilgileri NVRAM'e kaydedilir ve yeniden başlatıldığında bir günlük dosyasına yazılır. 10.7'de, bir çekirdek paniğinden sonra otomatik olarak yeniden başlatma özelliği vardır. Bazı durumlarda, 10.2 ve sonraki sürümlerde, bekleme sembolüne ek olarak hatayı ayrıntılandıran beyaz metin görünebilir.
Dosya:Mac OS X 10.0 10.1 Kernel Panic.jpg|Mac OS X 10.0 &ndash; 10.1 kernel panic
Dosya:Mac OS X 10.2 Kernel Panic.jpg|Mac OS X 10.2 kernel panic
Dosya:MacOSX kernel panic.png|Mac OS X 10.3 &ndash; 10.5 kernel panic
Dosya:Panic10.6.png|Mac OS X 10.6 ve 10.7 kernel panic
Dosya:OS X Mountain Lion kernel panic.jpg|OS X 10.8 ve sonraki sürümlerde kernel panic nedeniyle bilgisayar yeniden başlatıldıktan sonra gösterilen mesaj


## Ayrıca bakınız

* Core dump
* Mavi ekranı
* Ölüm ekranı

## Kaynakça