Sistem çağrıları, mesaj iletme ve kesmeler arasındaki ilişki nedir?


14

Süreç yönetimi için Wikipedia makalesini okuyorum . Odak noktam Linux. Sistem çağrısı, mesaj iletme ve kesinti arasındaki ilişki ve farklılıkları kavram ve amaçlarında anlayamıyorum. Hepsi kaynaklar ve hizmetler için çekirdek isteme süreçleri için mi?

Makaleden bazı alıntılar ve bazıları:

  1. Bir işletim sisteminin, bir programın yürütülmesi sırasında işletim sisteminin ayırma veya ayırma gerçekleştirmesi için işlemcinin denetimini yeniden ele geçirmesinin iki olası yolu vardır:

    1. İşlem bir sistem çağrısı düzenler (bazen yazılım kesintisi olarak da adlandırılır); örneğin, sabit diskteki bir dosyaya erişmek için bir G / Ç isteği oluşur.
    2. Bir donanım kesintisi meydana gelir; örneğin, klavyede bir tuşa basıldı veya bir zamanlayıcı bitti (önleyici çoklu görevlerde kullanılır).
  2. Kullanıcı modunda yürütülen bir programın çekirdek hizmetlerini talep edebileceği iki teknik vardır:

    * System call
    * Message passing
    
  3. bir kesinti, yazılımda dikkat gerektiğini veya eşzamanlı bir olay olduğunu belirten eşzamansız bir sinyaldir ve yürütmede bir değişiklik yapılması gerektiğini gösterir.

    Donanım kesmesi işlemcinin yürütme durumunu kaydetmesine ve bir kesme işleyicisinin yürütülmesine başlamasına neden olur. Yazılım kesintileri genellikle, bir donanım kesintisine benzer bir kesme işleyicisine bağlam anahtarına neden olan talimat setinde talimatlar olarak uygulanır.


2
Çok güzel bir soru!
Stéphane Gimenez

Yanıtlar:


12
  1. Tüm modern işletim sistemleri çoklu görevi destekler. Bu, sistemin aynı anda birden çok işlemi yürütebileceği anlamına gelir; yalancı paralelde (yalnızca bir CPU mevcut olduğunda) veya günümüzde çok çekirdekli CPU'ların paralel olarak ortak olduğu (bir görev / çekirdek).

    Sadece bir CPU'nun mevcut olduğu basit durumu ele alalım. Bu, aynı anda iki farklı işlem yürütürseniz (diyelim ki bir web tarayıcısı ve bir müzik çalar) sistemin bunları aynı anda gerçekten gerçekleştiremeyeceği anlamına gelir. Olan şey CPU'nun her zaman bir süreçten diğerine geçmesidir; ama bu son derece hızlı oluyor, bu yüzden asla fark etmiyorsunuz.

    Şimdi bu iki işlem yapılırken sıfırlama düğmesine (kötü çocuk) bastığınızı varsayalım. CPU ne yaparsa yapsın derhal duracak ve sistemi yeniden başlatacaktır. Tebrikler: bir kesinti oluşturdunuz.

    Programlama yaparken ve CPU'dan bir servis istemek durumunda durum benzerdir. Fark, bu durumda yazılım kodunu yürütmenizdir - genellikle sistem çağrılarını yürüten kütüphane prosedürleri (örneğin fopenbir dosyayı açmak için).

    Böylece, 1 CPU'dan dikkat çekmenin iki farklı yolunu açıklar.

  2. Modern işletim sistemlerinin çoğu iki yürütme modunu destekler: kullanıcı modu ve çekirdek modu. Varsayılan olarak bir işletim sistemi kullanıcı modunda çalışır. Kullanıcı modu çok sınırlıdır. Örneğin, tüm G / Ç yasaktır; bu nedenle, sabit diskinizden bir dosya açmanıza izin verilmez. Tabii ki bu gerçekte asla gerçekleşmez, çünkü bir dosyayı açtığınızda işletim sistemi şeffaf bir şekilde kullanıcıdan çekirdek moduna geçer. Çekirdek modunda, donanım üzerinde tam denetime sahip olursunuz.

    Bu iki modun neden var olduğunu merak ediyorsanız, en basit cevap koruma içindir. Mikro çekirdek tabanlı işletim sistemleri (örneğin MINIX 3), hizmetlerinin çoğunu kullanıcı modunda çalıştırır ve bu da onları daha az zararlı hale getirir. Monolitik çekirdekler (Linux gibi) neredeyse tüm hizmetleri çekirdek modunda çalışır. Bu nedenle, MINIX 3'te çöken bir sürücünün tüm sistemi indirmesi olası değildir, ancak bu Linux'ta olağandışı değildir.

    Sistem çağrıları, kullanıcıdan çekirdek moduna geçmek için monolitik çekirdeklerde (paylaşılan veri modeli) kullanılan ilkeldir. İleti geçirme, mikro çekirdeklerde (istemci / sunucu modeli) kullanılan ilkeldir. Daha kesin olmak gerekirse, mesaj ileten sistem programcıları da CPU'dan dikkat çekmek için sistem çağrılarını kullanırlar. İleti iletimi yalnızca işletim sistemi geliştiricileri tarafından görülebilir. Sistem çağrılarını kullanan monolitik çekirdekler daha hızlıdır ancak daha az güvenilirdir, mesaj iletimi kullanan mikro çekirdekler daha yavaştır ancak daha iyi hata izolasyonuna sahiptir.

    Böylece 2, kullanıcıdan çekirdek moduna geçmenin iki farklı yolundan bahseder.

  3. Revize etmek için, bir yazılım kesintisi yaratmanın en yaygın yolu, yani tuzak, bir sistem çağrısı yapmaktır. Kesintiler ise sadece donanım tarafından oluşturulur.

    CPU'yu (yazılım veya donanım ile) kesintiye uğrattığımızda, mevcut durumunu bir yere kaydetmesi gerekir - yürüttüğü işlem ve hangi noktada durduğu - aksi takdirde geri döndüğünde işleme devam edemez . Buna bağlam anahtarı denir ve mantıklıdır: Bilgisayarınızı başka bir şey yapmak için kapatmadan önce, tüm programlarınızı / belgelerinizi vb. Kaydettiğinizden emin olmanız gerekir, böylece durduğunuz noktadan devam edebilirsiniz. bir dahaki sefer açtığınızda :)

    Böylece, 3 bir tuzak veya bir kesinti gerçekleştirildikten sonra ne yapılması gerektiğini ve iki vakanın ne kadar benzer olduğunu açıklar.


1
Teşekkürler! (1) 1'de, CPU'lardan dikkat almanın iki yolu yazılım kesintisi (sistem çağrısı örneğiyle program) ve donanım kesintisidir (sıfırlama anahtarı örneği)? (2) 2'de, sistem çağrısı ve mesaj geçişinin yazılım kesintisinin iki yolu olduğunu mu kastediyorsunuz? (3) Yazılım kesintisinin amacının çekirdek hizmetleri ve kaynakları istemek için süreç olması doğru mu ve donanım kesintisinin amacı doğru değil mi? Evet ise, donanım kesintisinin amacı nedir?
Tim

1
(1) Doğru. (2) Sistem çağrıları ve mesaj geçişi, Süreçler Arası İletişimi sağlamak için kullanılabilecek iki farklı tekniktir. Ancak her ikisinin de yazılım tabanlı olduğu doğrudur, bu nedenle CPU'dan dikkat çekmek için bir tuzak (yazılım kesintisi) yürütürsünüz. (3) Bir anlamda, evet. Çekirdek hizmeti isteme örneği, creatyeni bir dosya oluşturmak gibi bir kütüphane yordamı (1 veya daha fazla sistem çağrısına çevrilecek) yürütmektir . Bir kesinti örneği, baskı işleminin tamamlandığını bildirmek için yazıcının CPU'ya bir sinyal göndermesidir.
sakisk

1
Teşekkürler! (3) ile ilgili olarak, bir anlamda hayır demek istiyor musunuz? Donanım kesintisinin ve yazılım kesintisinin genel amaçları nelerdir?
Tim

1
Sistem sıfırlaması bir kesinti değildir; daha sonra devam etmek için durumu kaydetmez.
psusi

1
@faif reset ve NMI (Maskelenemeyen Kesme) CPU'daki iki farklı pintir. İkincisi, durumu kurtarmak ve işleyiciye atlamak anlamına gelen bir kesintiye neden olur. Birincisi, CPU'yu ilk açılışta olduğu gibi (kasıtlı olarak tüm durumu atmak) başlatır (sıfırlama, güç açıldığında otomatik olarak iddia edilir). Bir kesme tanımının bir kısmı durum kaydetmesi olduğundan, sıfırlama bu tanımı karşılayamaz.
psusi

9

Sistem çağrıları, mesaj geçişi (Wikipedia makalesinde açıklandığı gibi) ve kesmeler, bir bağlam anahtarına veya kullanıcıdan çekirdek moduna geçişe neden olan her şeydir . Muhtemelen bildiğiniz gibi:

  • çekirdek modu: programlar düz veya gerçek bir bellek görünümüne sahiptir ve programlar herhangi bir kısıtlama olmaksızın doğrudan tüm belleği ve tüm donanım aygıtlarını özgürce okuyabilir / yazabilir.

  • kullanıcı modu: programlar sanallaştırılmış bir bellek görünümüne sahiptir, programlar tüm belleği serbestçe okuyamaz / yazamaz ve donanım aygıtlarını doğrudan okuyamaz / yazamaz. Daha fazla bellek veya erişim donanım aygıtları almak için, kullanıcı modu programı gerekir diyoruz çekirdeği. Sistem çağrıları ve mesaj iletimi bunu yapmanın iki yöntemidir.

Sistem çağrıları, belirli bir CPU talimatı veya talimatlar dizisini yürütmeyi içerir, bu da CPU'nun atlamasını (ilk önce yığıntaki kayıt adresini kaydeder) önceden tanımlanmış bir adrese (kullanıcı moduna yazılamaz) ve CPU'yu kullanıcı modundan çekirdek moduna (zil sesi) geçirir 3 Intel mimarisinde 0'a).

Donanım kesintileri de aynı şeyi yapar, CPU'yu (ilk önce yığındaki dönüş adresini kaydeder) önceden tanımlanmış bir adrese yapar ve CPU'yu kullanıcı modundan çekirdek moduna taşır. Bu yüzden birçok CPU'da aynı mekanizma yazılım tarafından çağrılabilir ("yazılım kesintisi" olarak adlandırılır) ve CPU çağrıları için kullanılabilir.

İleti iletimi (en azından bana göre), çekirdeğin bir ileti akışı alacak bir "çalışan işlem" olduğunu ve bu tür iletileri gönderecek bir kullanıcı modu erişilebilir işlevi olduğunu gösterir. Ya da "gönderme" fonksiyonu sadece bir yığındaki değerleri iter ve çekirdeğin bir sonraki kontrolünde (bir işlem bloğu veya bir kesme meydana gelirse) yığıntan mesajları çıkarır ve buna göre dahili rutinlere gönderilir.

Gerçek "çekirdeğin" çok az olduğu ve bir çekirdeğin sağladığı işlevlerin çoğunun, hepsi birden çok CPU sisteminde aynı anda çalışan "sunucu" işlemlerine taşındığı bir mikro çekirdek mimarisinde, bunun gibi bir şey daha fazla olabilir düz eski sistem çağrısı yaklaşımından daha yararlıdır. "Mesajları" uygun çekirdek "sunucusuna" yorumlamak ve yönlendirmek, mikro çekirdeğin birkaç işinden biri olacaktır.


3
Çekirdek modu aynı sayfa tablolarını kullanır ve kullanıcı moduyla aynı sanal bellek görünümünü sunar. Aradaki fark, çekirdek modu ile sınırlı olarak işaretlenmiş sayfalara erişimi olmasıdır.
psusi

5

İleti iletme, bir işlemin diğerine ileti gönderen daha üst düzey bir kavramdır. Bir sistem (çekirdek) çağrısı tarafından uygulanır ve çekirdekten iletiyi diğer işleme geçirmesini ister. Sistem çağrıları çekirdekten işlem için çeşitli hizmetler gerçekleştirmesini ister. Bir yazılım kesme / sistem tuzağı tarafından uygulanırlar, bu da cpu'nun yığındaki bir durumu kaydetmesine neden olur, böylece daha sonra geri dönebilir, daha sonra çekirdek moduna geçebilir ve çekirdek işleyicisine atlayabilir.

Hem donanım hem de yazılım kesintileri, işlemcinin durumu kaydetmesine, çekirdek moduna geçmesine ve söz konusu kesinti için tanımlanmış bir işleyiciye atlamasına neden olur. Aradaki fark, bir tuşa basıldığını belirten bir klavye gibi bazı dikkat edilmesi gerektiğinde donanım kesintilerinin harici donanım tarafından üretilmesidir. Klavye işleyici daha sonra hangi tuşa basıldığını görmek için klavye IO bağlantı noktasını okuyabilir ve uygun eylemi gerçekleştirebilir ve ardından kesilen programa geri dönebilir.

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.