Yanıtlar:
Bir tuzak , bir kullanıcı sürecinde bir istisnadır. Bunun nedeni sıfır veya geçersiz bellek erişimine bölünmesidir. Ayrıca çekirdek yordamını ( sistem çağrısı ) çağırmanın olağan yolu, çünkü bunlar kullanıcı kodundan daha yüksek önceliğe sahiptir. İşleme eşzamanlıdır (bu nedenle kullanıcı kodu askıya alınır ve daha sonra devam eder). Bir anlamda "aktif" dirler - çoğu zaman kod tuzağın gerçekleşmesini bekler ve bu gerçeğe dayanır.
Bir kesme donanımı (sabit disk gibi cihazlar, grafik kartı, I / O portları, vs) tarafından oluşturulan bir şeydir. Bunlar, eşzamansızdır (yani kullanıcı kodundaki öngörülebilir yerlerde olmazlar) veya kesme işleyicisinin sonunda gerçekleşmesini beklemesi gerektiğinden "pasif" tir.
Ayrıca bir tuzağı, tuzak işleyici işleyicisi bir kesme işleyicisi gibi göründüğü için bir tür CPU iç kesmesi olarak görebilirsiniz (kayıtlar ve yığın işaretçileri kaydedilir, bir bağlam anahtarı vardır, bazı durumlarda yürütme kaldığı yerden devam edebilir) .
Tuzaklar ve kesintiler yakından ilişkilidir. Tuzaklar bir tür istisnadır ve istisnalar kesintilere benzer.
Intel x86, çakışan iki kategori, vektörlü olaylar ( istisnalara karşı kesintiler ) ve istisna sınıflarını ( hatalara karşı tuzaklara karşı kürtaj ) tanımlar .
Bu yayındaki tüm alıntılar Intel Yazılım Geliştirici Kılavuzu'nun Nisan 2016 sürümündedir . (Kesin ve karmaşık) x86 perspektifi için, SDM'nin Kesinti ve İstisna işleme bölümünü okuyun.
Vektörlü Olaylar ( kesmeler ve istisnalar ), işlemcinin durumunun çoğunu kaydettikten sonra işlemcinin bir kesme işleyicisine atlamasına neden olur (yürütme bu noktadan sonra devam edebilecek kadar yeterlidir).
İstisnalar ve kesmeler işlemcinin atladığı kesme işleyicisini belirleyen, vektör adı verilen bir kimliğe sahiptir. Kesme işleyicileri Kesme Tanımlayıcı Tablosunda açıklanmıştır.
Kesintiler , bir programın yürütülmesi sırasında, donanımdan gelen sinyallere yanıt olarak rastgele zamanlarda gerçekleşir. Sistem donanımı, çevrebirim aygıtlarına servis talepleri gibi işlemcinin dışındaki olayları işlemek için kesmeler kullanır. Yazılım ayrıca INT n komutunu yürüterek kesintiler de oluşturabilir.
İşlemci, bir komutu yürütürken sıfıra bölme gibi bir hata koşulu saptadığında istisnalar oluşur. İşlemci, koruma ihlalleri, sayfa hataları ve dahili makine hataları da dahil olmak üzere çeşitli hata durumlarını algılar.
İstisnalar , raporlanma şekline ve istisnayı oluşturan talimatın program veya görev sürekliliği kaybı olmadan yeniden başlatılıp başlatılamayacağına bağlı olarak hata , tuzak veya iptal olarak sınıflandırılır .
Özet: trans kullanıcı işaretçi artırmak, arızalar yoktur ve sonlanması 'patlayabilir.'
Bir tuzak yakalama talimatı yürütülmesi hemen sonra bildirilen bir istisnadır. Tuzaklar, program sürekliliği kaybı olmadan bir programın veya görevin yürütülmesine devam edilmesini sağlar. Bindirme işleyicisinin dönüş adresi bindirme komutundan sonra yürütülecek talimata işaret eder.
Bir hata genellikle düzeltilebilir bir istisnadır ve düzeltilmiş bir kez program süreklilik kaybı ile yeniden sağlar. Bir hata rapor edildiğinde, işlemci, arıza talimatının yürütülmesinden önce makine durumunu durumuna geri yükler. Arıza gidericinin dönüş adresi (CS ve EIP kayıtlarının kayıtlı içerikleri), arıza talimatını izleyen talimat yerine hata talimatını gösterir.
Örnek: Bir sayfa hatası genellikle kurtarılabilir. Bir uygulamanın adres alanının bir parçası RAM'den diske değiştirilmiş olabilir. Uygulama, değiştirilen belleğe erişmeye çalıştığında bir sayfa hatasını tetikler. Çekirdek bu belleği diskten koça çekebilir ve kontrolü uygulamaya geri verebilir. Uygulama kaldığı yerden devam edecektir (değiştirilen belleğe erişen hata talimatında), ancak bu sefer bellek erişimi başarısız olmadan başarılı olmalıdır.
Bir iptal daima durum neden talimat tam yerini bildirmez ve duruma neden program veya görevin yeniden başlatmaya izin vermez bir istisnadır. Durdurmalar, donanım hataları ve sistem tablolarındaki tutarsız veya yasa dışı değerler gibi ciddi hataları bildirmek için kullanılır.
Yazılım tarafından başlatılan kesmeler (INT komutu tarafından tetiklenir) tuzak benzeri bir şekilde davranır. İşlemci, durumunu kaydetmeden ve kesme işleyicisine atlamadan önce talimat tamamlanır.
Genel olarak, istisnalar, hatalar, iptaller, Tuzaklar ve Kesintiler gibi terimlerin hepsi aynı anlama gelir ve buna "Kesmeler" denir.
Tuzak ve Kesinti arasındaki farka gelince:
Tuzak: Bir programcı başlatıldı ve kontrolün özel bir işleyici rutinine aktarılması bekleniyor. ( Örn : 80x86 INT talimatı iyi bir örnektir)
Buna karşılık
Kesme (Donanım): CPU dışındaki harici bir donanım olayını temel alan bir program kontrol kesintisidir (Örneğin: Klavyede bir tuşa basmak veya bir zamanlayıcı yongasında zaman aşımı)
Bir tuzak özel bir tür olan kesme yaygın bir olarak adlandırılır yazılım kesme . Bir kesme kapsar daha genel bir terim olan donanım kesmeleri (donanım cihazları ile kesme) ve yazılım kesme (örneğin, yazılım kesme, trans ).
Bir tuzak kod benzeri programlar tarafından çağrılır ve örneğin işletim sistemi rutinlerini çağırmak için kullanılır (normalde senkron). Bir kesinti olaylarla çağrılır (ağ kartı veri veya CPU zamanlayıcı gibi birçok kez donanım) ve - adından da anlaşılacağı gibi, CPU işlemek için sürücü rutinine geçmek zorunda olduğu için normal kontrol akışını keser olay.
Bir kesinti, sistem içinde donanım tarafından üretilen bir akış değişikliğidir. Bir kesme işleyicisi, kesintinin nedeni ile başa çıkmak için çağrılır; kontrol daha sonra kesilen bağlama ve talimata döndürülür. Bir tuzak, yazılım tarafından oluşturulan bir kesmedir. Bir kesme, cihaz yoklama ihtiyacını ortadan kaldırmak için bir G / Ç'nin tamamlandığını bildirmek için kullanılabilir. Bir tuzak, işletim sistemi rutinlerini çağırmak veya aritmetik hataları yakalamak için kullanılabilir.
Tuzakların mevcut talimatın yürütülmesinden kaynaklandığını ve bu nedenle senkron olaylar olarak adlandırıldığını düşünüyorum. burada kesintiler, işlemcide harici olaylarla ilgili olan ve dolayısıyla eşzamansız olanlar olarak bilinen bağımsız bir komuttan kaynaklanır.
Kesmeler donanım kesintileridir, tuzaklar ise yazılım tarafından başlatılan kesmelerdir. Donanım kesintilerinin sıklığı genellikle diğer donanım kesintilerini devre dışı bırakır, ancak bu tuzaklar için geçerli değildir. Bir tuzak servis edilene kadar donanım kesintilerine izin vermemeniz gerekiyorsa, kesme bayrağını açıkça temizlemeniz gerekir. Ve genellikle bilgisayardaki kesme bayrağı, tuzakların aksine (donanım) kesintilerini etkiler. Bu, bu bayrağı temizlemenin tuzakları engellemeyeceği anlamına gelir. Tuzakların aksine, kesintiler CPU'nun önceki durumunu korumalıdır.
Bir tuzak bir yazılım kesmesidir. İçinde sıfır değerine bölünen bir değişkeni bildirdiğiniz bir program yazarsanız, o zaman bir tuzak olarak kabul edilir. bir programın os'dan gerekli hizmeti almasını isteyen tuzağın özel versiyonu. Bir i / o hatası gibi kesme (donanım kesmeleri için genel bir kelime) durumunda, işlemci rastgele zamanda kesilir ve elbette programcılarımızın hatası değildir. Onları getiren donanımdır.