Yanıtlar:
Çekirdek Modu
Bu modda çalışan bir program, temel donanıma tam erişime sahiptir. Herhangi bir CPU talimatını yürütebilir, herhangi bir bellek adresine erişebilir ve aslında istediği her şeyi yapabilir.
Bu modda yürütülen Kullanıcı Modu Kodu, işletim sisteminin API'sı aracılığıyla donanım değişikliği ile sınırlıdır. O olamaz donanıma doğrudan erişmez hiç .
Burada ilginç olan şey, ortak mimarilerde, bunun sadece işletim sistemi değil, donanım yoluyla uygulanmasıdır. Özellikle, x86 mimarisi vardır koruma halkaları .
Bu tür bir ayrılmanın en büyük avantajı, bir program kullanıcı modunda çalışırken çöktüğünde, her zaman ölümcül olmamasıdır. Aslında, modern sistemlerde, genellikle değildir.
Check out Jeff'in writeup. Bu onun olağan iyi şeyleri.
Kısa cevap: programların zamanlarını nerede geçirdiğini size söyler.
Daha uzun bir cevap için, bunu iki adımda açıklayacağım. İlk:
1. Çekirdek moduna girme
Yazdığınız her normal kod "kullanıcı modunda" çalışır.
Programlar, kütüphaneleri ortak görevler yapmak için kullanabilirler. Bu aynı zamanda kullanıcı modu kodudur.
Bir noktada, program sistemden bir çekirdek fonksiyon gerektirebilir. Örneğin:
Bu temel - donanıma yakın - işlevsellik çekirdeğin bir parçasıdır. Bilgisayarınızdaki her şeyin arkasındaki merkezi program budur. Programların çalışması için ihtiyaç duyduğu her şeyi yönetir.
Çekirdekte bir işlev kullanmak için, program yürütme yolu kelimenin tam anlamıyla Kullanıcı modundan Çekirdek koduna atlar. Çekirdek işini yapar ve yürütme yolunu kullanıcı moduna geri katlar.
Bir program çekirdek modunda çok fazla zaman harcadığında, genellikle donanımla ilgili çok fazla etkinlik yaptığı anlamına gelir. Örneğin, disk veya video akışı arar. Donanım da arızalı olabilir; işlemeyi yavaşlatmak ve programın çekirdek alanında olağandışı bir zaman geçirmesine neden olmak.
2 Fark
Çekirdek uzayındaki kod yüksek performans gösterir. Çekirdeğin diğer bölümleri doğrudan arayabilir ve kodun herhangi bir sınır denetimi olmaksızın sistemin her kaynağına doğrudan erişimi vardır. Çekirdek / kullanıcı modu arasında geçiş yapmak da pahalı bir işlemdir ve çekirdek kodunda her şeyi çalıştırarak tamamen önlenir.
Ancak çekirdeğin içinde, güvenlik denetimi, çökmelere karşı koruma veya belleğin yanlış kısımlarına yazma için fazla yer yoktur. Bunlar, çekirdeğin diğer programlara sağlayabileceği hizmetlerdir. Programların dünyanın farklı göründüğüne inanması için hileler (programlar sanal, korumalı / kısıtlı bir ortamda yaşıyor) ve bu nedenle programlara giren / çıkan her şey çevrilebilir ve korunabilir.
Çekirdeğin fazla bir koruması olamaz çünkü onu koruyacak hiçbir şey yoktur. Sistemin kalbidir ve durduğunda her şey biter. Bir çekirdek paniği veya Windows'da ünlü BSOD alırsınız.
Bu aynı zamanda çekirdek tabanlı kod riskidir ve düşük performans gereksinimleri olan daha fazla alt sistemin kullanıcı alanına taşınmasının nedeni budur. Bununla birlikte, temel donanımla ilgili parçalar, tipik olarak yakında değişmeyecek olan çekirdek kodudur.
Şu anda yürütülen kodun çeşitli donanım parçalarıyla doğrudan etkileşime girmesine izin verilip verilmediğinin ayrımı. Çekirdek modu kodu aygıt veri yollarına yazabilir, bellek eşlemelerini değiştirebilir, çalışan işlemleri değiştirebilir vb. Kullanıcı modu hesaplama yapabilir ve dünyanın geri kalanıyla etkileşim kurmak için çekirdeğe sistem çağrıları yapabilir.