Trap ve Interrupt arasındaki fark nedir?


Yanıtlar:


203

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) .


5
İlginçtir lxr.free-electrons.com/source/arch/x86/kernel/… sıfıra bölme bir donanım kesintisi olarak başlatıldı, neden böyle?
Alex Kreimer

8
Çünkü ALU bu sorunu bulduğunda CPU'nun gönderdiği bir kesinti. Tıpkı bir segmentasyon hatası gibi. Yine de, tüm matematik hataları kesintilere neden olmaz (taşma olmaz).
Aaron Digulla

4
Mantıklı. Ancak, biraz kafa karıştırıcı olan şey, daha önceki Linux çekirdeklerinde neden bir yazılım tuzağı olarak başlatılmış olmasıdır: set_trap_gate (0, & divide_error);
Alex Kreimer

11
Ne demek " biraz kafa karıştırıcı"? Bu çok kafa karıştırıcı :-) Buradaki sorun, sıfıra bölmenin bir donanım kesintisi (IRQ / vektör 0) olduğu, ancak çekirdek geliştiricilerinin bununla nasıl başa çıkacakları konusunda birkaç seçeneği var. Yani bir kullanıcı işleminden, bu bir tuzak ama CPU tarafından bir kesinti. Kim haklı? Yok? Her ikisi de?
Aaron Digulla

3
Tabii ki, bu sadece x86 işlemciler için geçerlidir. Diğer CPU'lar farklı çalışır.
Aaron Digulla

110

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

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.

Kesmeler

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.

İstisnalar

İş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.

İstisna Sınıflamaları

İ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.'

Tuzak

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.

Hata

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.

İptal

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.

Kenar Kılıfları

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.


6
Bu iyi bir cevap "dikkat yeni bir kullanıcı geç cevap" inceleme kuyruğu dikkat dikkat emin olmak için bana bir test veriyordu olumlu oldu.
Noumenon

1
Teşekkürler! Bu benim için çok şey ifade ediyor :)
ruthafjord

Bu x86 için harika bir cevap. Soru aslında oldukça geneldi ve x86'dan bahsetmedi. Bir denge kurmaya çalışmak için bir düzenleme yaptım. Belki de bu cevabın üstüne x86 dünyasının dışındaki terminoloji sorununu ele almak için başka bir paragraf ekleyebilirsiniz? Ve / veya daha da kötüleştirdiğimi düşünüyorsanız soruda başka bir düzenleme bırakın: PI sadece x86'yı gerçekten tanıyorum, ancak umarım diğer sistemlerin çok benzer terminoloji kullandıkları doğrudur ve bunu söyleyebilirsiniz :)
Peter Cordes

1
Yağsız PPC aarchitecture kitabı ve bunların tanımları ölçüde örtüşen gözükmektesiniz. Kenar vakaları için yeni isimleri var ve farklı bir kategorinin parçası olmak yerine, kesintilerin bir alt türü gibi istisnaları ele alıyorlar.
ruthafjord

1
Bence bu cevap bunu en iyi anlatıyor. İkisi arasında var olabilecek bulanık çizgiyi tartışır. Ve sayfa hatalarının CPU'nun bir komutu yeniden denemeye neden olduğunu ve bir tuzağın talimatın üzerinden atlayıp devam ettiğini belirtir.
in70x

9

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ı)


İyi tanımlar. Kaynak?
alexlomba87

6

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 ).


4
Bazı yazarların (Tanenbaum) "donanım tuzaklarına" atıfta bulunduğu konuları daha da karıştırır. Donanım tuzaklarına ve yazılım kesintilerine sahip olabilirsek, tanımlar oldukça çamurludur ve her iki şekilde de gidebilir, her zaman donanım veya yazılım kelimesini gerektirir.
The111

3

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.


2

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.


2

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.


2

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.


1

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.


1
Sistem çağrısının nasıl bir tuzak olduğunu açıklayabilir misiniz?
Radha Gogia
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.