İçeriğe atla

Kernel panic

Vikipedi, özgür ansiklopedi
Linux sisteminden bir kernel panic mesajı
A OpenSolaris kernel panic.
Bir OpenSolaris kernel panic ekranı
Oracle VM VirtualBox'ta Ubuntu 13.04'te (Linux 3.8) kernel panic

Bir kernel panic (bazen KP [1] 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&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.[2] 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.[3][4]

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.[5] 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." [6]

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:[7]

/*
 * 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.

İş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.[8]

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.[9] 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.[10] Bir çekirdek, bir kök dosya sistemini bulamıyorsa, panic() de girebilir.[11] Ç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.[12]

Aşağıdaki, kernel_init() içindeki Linux çekirdeği son başlatmasının bir uygulamasıdır:[13]

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

[değiştir | kaynağı değiştir]
Bir iKVM konsolunda görüldüğü üzere kernel panic

Ç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.[14] 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.[15]

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.[16] 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:[17]

  • 10.0 – 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 – 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 – 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.

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. ^ "KP - Kernel Panic (Linux) | AcronymFinder". www.acronymfinder.com. 26 Ekim 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ocak 2016. 
  2. ^ "FreeBSD 11.0 - man page for panic (freebsd section 9) - Unix & Linux Commands". www.unix.com. 1 Nisan 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ekim 2022. 
  3. ^ "boot failure-init died - Unix Linux Forums - HP-UX". www.unix.com. 1 Nisan 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ekim 2022. 
  4. ^ "PANIC: init died". groups.google.com. 23 Nisan 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2023. 
  5. ^ Siewiorek, Daniel P.; Swarz, Robert S. (15 Aralık 1998). Reliable Computer Systems: Design and Evaluation, Third Edition (İngilizce). Taylor & Francis. ISBN 978-1-56881-092-8. 
  6. ^ "Unix and Multics". www.multicians.org. 5 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ekim 2022. 
  7. ^ "Source code: V6/usr/sys/ken/prf.c". minnie.tuhs.org. 2 Ağustos 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2023. 
  8. ^ Steven M. Hancock (22 Kasım 2002). Tru64 UNIX troubleshooting: diagnosing and correcting system problemsHP Technologies SeriesITPro collection. Digital Press. ss. 119-126. ISBN 978-1-55558-274-6. Erişim tarihi: 3 Mayıs 2011. 
  9. ^ Michael Jang (2006). Linux annoyances for geeks. O'Reilly Media, Inc. ss. 267-274. ISBN 978-0-596-00801-7. Erişim tarihi: 29 Nisan 2011. 
  10. ^ David Pogue (17 Aralık 2009). Switching to the Mac: The Missing Manual, Snow Leopard Edition. O'Reilly Media, Inc. s. 589. ISBN 978-0-596-80425-1. Erişim tarihi: 4 Mayıs 2011. 
  11. ^ Greg Kroah-Hartman (2007). Linux kernel in a nutshell. O'Reilly Media, Inc. s. 59. ISBN 978-0-596-10079-7. Erişim tarihi: 3 Mayıs 2011. 
  12. ^ Wolfgang Mauerer (26 Eylül 2008). Professional Linux Kernel Architecture. John Wiley and Sons. ss. 1238-1239. ISBN 978-0-470-34343-2. 1 Nisan 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Mayıs 2011. 
  13. ^ "LXR linux/init/main.c". lxr.linux.no. 6 Ekim 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2023. 
  14. ^ "Linux Device Drivers, Chapter 4" (PDF). 14 Kasım 2014 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 6 Ekim 2022. 
  15. ^ Kirkland, James; Carmichael, David; Tinker, Christopher L.; Tinker, Gregory L. (27 Nisan 2006). Linux Troubleshooting for System Administrators and Power Users: Linu Trou Syst Admi Powe U (İngilizce). Prentice Hall Professional. ISBN 978-0-13-279739-9. 23 Nisan 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2023. 
  16. ^ "OS X: About kernel panics - Apple Support". support.apple.com. 13 Nisan 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ekim 2022. 
  17. ^ "A New Screen of Death for Mac OS X". OSXBook.com. 1 Mayıs 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ekim 2022.