Donanım ve yazılım kesintileri kavramını anladığımdan emin değilim.
Doğru anlarsam, bir donanım kesintisinin amacı, CPU çoklu görevinin uygulanmasının bir parçası olan CPU'ya biraz dikkat etmektir.
Öte yandan, bir yazılım kesintisinin amacı şu anda bir CPU üzerinde çalışan bir işlem için bazı kaynaklar istemektir.
Bir donanım kesintisi gerçekten CPU çoklu görevinin bir parçası değildir, ancak sürücüyü çalıştırabilir.
Donanım kesintileri disk, ağ kartları, klavyeler, saatler vb. Donanım aygıtları tarafından verilir. Her aygıtın veya aygıt grubunun kendi IRQ (Kesme ReQuest) hattı olacaktır. IRQ tabanlı CPU, isteği uygun donanım sürücüsüne gönderir. (Donanım sürücüleri genellikle ayrı bir işlem yerine çekirdek içindeki alt yordamlardır.)
Kesmeyi işleyen sürücü CPU üzerinde çalıştırılır. CPU, kesintiyi işlemek için yaptığı şeyden kesilir, bu nedenle CPU'nun dikkatini çekmek için ek bir şey gerekmez. Çok işlemcili sistemlerde, bir kesme genellikle CPU'lardan sadece birini keser. (Özel durumlar için ana çerçevelerde, ana CPU'nun desteği olmadan çoklu kesintilerle başa çıkabilen donanım kanalları bulunur.)
Donanım kesmesi CPU'yu doğrudan keser. Bu, çekirdek işlemindeki ilgili kodun tetiklenmesine neden olur. İşlenmesi biraz zaman alan işlemler için, kesme kodu diğer donanım kesintileri tarafından kesilmesine izin verebilir.
Zamanlayıcı kesilmesi durumunda, çekirdek zamanlayıcı kodu çalışmakta olan işlemi askıya alabilir ve başka bir işlemin çalışmasına izin verebilir. Çoklu görevi mümkün kılan zamanlayıcı kodunun varlığıdır.
Yazılım kesintileri, donanım kesintileri gibi işlenir. Ancak, yalnızca şu anda çalışan işlemler tarafından oluşturulabilir.
Genellikle yazılım kesintileri, G/Ç (Giriş veya Çıkış) talepleridir. Bunlar, G/Ç'nin gerçekleşmesini zamanlayan çekirdek rutinlerini çağıracaktır. Bazı aygıtlar için G/Ç hemen yapılacaktır, ancak disk G/Ç genellikle kuyruğa alınır ve daha sonra yapılır. Yapılan G/Ç'ye bağlı olarak, işlem G/Ç tamamlanıncaya kadar askıya alınabilir ve bu da çekirdek zamanlayıcısının çalışacak başka bir işlem seçmesine neden olabilir. İşlemler arasında G/Ç meydana gelebilir ve işleme genellikle disk G/Ç ile aynı şekilde zamanlanır.
Yazılım kesintisi sadece çekirdeği konuşuyor. Çalıştırılması gereken diğer işlemleri zamanlamak çekirdeğin sorumluluğundadır. Bu, bir borunun sonundaki başka bir işlem olabilir. Bazı çekirdekler, aygıt sürücüsünün bazı bölümlerinin kullanıcı alanında bulunmasına izin verir ve çekirdek, bu işlemi gerektiğinde çalışacak şekilde zamanlar.
Yazılım kesintisinin CPU'yu doğrudan kesmemesi doğrudur. Yalnızca şu anda kod çalıştıran kod bir yazılım kesintisi oluşturabilir. Kesme işlemi, çekirdeğin işlemi yürütmek için bir şeyler (genellikle G/Ç) yapması için bir istektir. Özel bir yazılım kesmesi, çekirdek zamanlayıcısının başka bir işlemin çalışıp çalışmadığını kontrol etmesini isteyen bir Getiri çağrısıdır.
Yoruma verilen yanıt:
G/Ç istekleri için, çekirdek işi uygun çekirdek sürücüsüne devreder. Rutin, G/Ç'yi sonraki işlemler için sıralayabilir (disk G/Ç için ortaktır) veya mümkünse hemen yürütebilir. Sıra, genellikle donanım kesintilerine yanıt verirken sürücü tarafından işlenir. Bir G/Ç tamamlandığında, kuyruktaki bir sonraki öğe cihaza gönderilir.
Evet, yazılım kesintileri donanım sinyalizasyon adımından kaçınır. Yazılım isteğini üreten işlemin şu anda çalışan bir işlem olması gerekir, böylece CPU'yu kesmezler. Ancak, arama kodunun akışını keserler.
Donanımın CPU'yu bir şey yapması gerekiyorsa, CPU'nun dikkatini çalıştığı koda kesmesine neden olur. CPU, mevcut durumunu bir yığının üzerine iter, böylece daha sonra yaptığı şeye geri dönebilir. Kesme durdurulabilir: çalışan bir program; başka bir kesmeyi işleyen çekirdek kodu; veya boşta işlem.