sistem çağrısı - System call

Çeşitli bileşenleri ve kullanıcı alanı arasındaki iletişimi yöneten Linux çekirdeğinin sistem çağrı arabirimine üst düzey bir genel bakış

In hesaplama , bir sistem çağrısı (genellikle kısaltılmış syscall ) bir ettiği programlı bir şekilde bilgisayar programı bir hizmet isteğinde çekirdeğin içinde işletim sistemi bunun çalıştırıldığı. Bu, donanımla ilgili hizmetleri (örneğin, bir sabit disk sürücüsüne erişme veya aygıtın kamerasına erişme), yeni işlemlerin oluşturulması ve yürütülmesini ve işlem zamanlaması gibi entegre çekirdek hizmetleriyle iletişimi içerebilir . Sistem çağrıları, bir işlem ile işletim sistemi arasında önemli bir arabirim sağlar.

Çoğu sistemde, sistem çağrıları yalnızca kullanıcı alanı süreçlerinden yapılabilirken, bazı sistemlerde, örneğin OS/360 ve ardılları , ayrıcalıklı sistem kodu da sistem çağrıları yapar.

ayrıcalıklar

Mimari en modern işlemcilerin bazı gömülü sistemlerde hariç olmak üzere, bir içerir güvenlik modeli . Örneğin, halka modeli , yazılımın yürütülebileceği birden çok ayrıcalık seviyesini belirtir: bir program genellikle kendi adres alanıyla sınırlıdır, böylece çalışan diğer programlara veya işletim sisteminin kendisine erişemez veya bunları değiştiremez ve genellikle doğrudan manipüle etmesi engellenir. donanım aygıtları (örneğin çerçeve arabelleği veya aygıtları).

Ancak, birçok uygulamanın bu bileşenlere erişmesi gerekir, bu nedenle bu tür işlemler için iyi tanımlanmış, güvenli uygulamalar sağlamak üzere sistem çağrıları işletim sistemi tarafından sağlanır. İşletim sistemi, en yüksek ayrıcalık düzeyinde yürütülür ve uygulamaların, genellikle kesintiler yoluyla başlatılan sistem çağrıları aracılığıyla hizmet talep etmesine olanak tanır . Bir kesme, CPU'yu otomatik olarak yükseltilmiş bir ayrıcalık düzeyine sokar ve ardından kontrolü, çağıran programa istenen hizmetin verilip verilmeyeceğini belirleyen çekirdeğe iletir. Hizmet verilirse, çekirdek, çağıran programın üzerinde doğrudan denetimi olmayan belirli bir yönergeler kümesini yürütür, ayrıcalık düzeyini çağıran programın düzeyine döndürür ve ardından denetimi çağıran programa geri döndürür.

Bir aracı olarak kütüphane

Genellikle sistemler, normal programlar ve işletim sistemi arasında yer alan bir kitaplık veya API sağlar. On Unix benzeri sistemler, bu API genellikle bir uygulamanın bir parçası olduğu C kütüphanesinde gibi (libc), glibc'nin sağlar, sarıcı işlevleri sistem çağrıları için, çoğu zaman çağırmak sistem çağrıları aynı adlı. On Windows NT API parçası olduğunu Yerli API içinde, ntdll.dll kütüphanede; bu, normal Windows API'sinin uygulamaları tarafından kullanılan ve doğrudan Windows'taki bazı sistem programları tarafından kullanılan belgelenmemiş bir API'dir . Kitaplığın sarmalayıcı işlevleri , sistem çağrısını kullanmanın yanı sıra sistem çağrısını daha modüler hale getirmek için sıradan bir işlev çağırma kuralı ( birleştirme düzeyinde bir alt yordam çağrısı) ortaya çıkarır . Burada, sarmalayıcının birincil işlevi, sistem çağrısına iletilecek tüm argümanları uygun işlemci kayıtlarına (ve belki çağrı yığınına da) yerleştirmek ve ayrıca çekirdeğin çağıracağı benzersiz bir sistem çağrı numarası ayarlamaktır. . Bu sayede işletim sistemi ile uygulama arasında bulunan kütüphane taşınabilirliği artırır .

Kitaplık işlevine yapılan çağrı, çekirdek moduna geçişe neden olmaz ve genellikle normal bir alt program çağrısıdır (örneğin, bazı Komut kümesi mimarilerinde (ISA'lar) bir "ÇAĞRI" derleme komutu kullanılarak ). Gerçek sistem çağrısı, kontrolü çekirdeğe aktarır (ve onu özetleyen kitaplık çağrısından daha uygulamaya bağımlı ve platforma bağımlıdır). Örneğin, Unix benzeri sistemlerde forkve execvesırayla forkve execsistem çağrılarını çağıran talimatları yürüten C kitaplığı işlevleridir . Sistem çağrısının doğrudan uygulama kodunda yapılması daha karmaşıktır ve kullanılacak gömülü derleme kodunun ( C ve C++ 'da ) yanı sıra, sistem çağrısı işlemi için konu olabilecek düşük seviyeli ikili arabirim bilgisi gerektirebilir. zamanla değişmek ve böylece uygulama ikili arayüzünün bir parçası olmamak ; kütüphane işlevleri bunu soyutlamak içindir.

On ekzoçekirdek tabanlı sistemler, kütüphane aracı olarak özellikle önemlidir. Dış çekirdeklerde kitaplıklar, kullanıcı uygulamalarını çok düşük seviyeli çekirdek API'sinden korur ve soyutlamalar ve kaynak yönetimi sağlar.

IBM'in OS/360 ve DOS/360'ı , çağrı bağlantısına sahip birkaç hizmet olmasına rağmen, çoğu sistem çağrısını bir derleme dili makroları kitaplığı aracılığıyla uygular . Bu, montaj dilinde programlamanın üst düzey dil kullanımından daha yaygın olduğu bir zamanda kökenlerini yansıtır . Bu nedenle IBM sistem çağrıları, yüksek seviyeli dil programları tarafından doğrudan yürütülebilir değildi, ancak çağrılabilir bir montaj dili sarmalayıcı alt yordamı gerektiriyordu. O zamandan beri IBM, z/OS ve z/VSE gibi yüksek seviyeli dillerden çağrılabilen birçok hizmet ekledi .

Örnekler ve araçlar

On Unix , Unix benzeri ve diğer POSIX uyumlu işletim sistemleri, popüler sistem çağrıları vardır open, read, write, close, wait, exec, fork, exit, ve kill. Birçok modern işletim sisteminde yüzlerce sistem çağrısı vardır. Örneğin, Linux ve OpenBSD her üzerinde 300 farklı çağrı bilgisi, NetBSD yakın 500'e sahiptir FreeBSD 500 üzerinden Windows Win32k (grafik) ve ntdll (çekirdek) sistem çağrıları ise arasında bölünmüş, yakın 2000 sahiptir Planı 9 51 sahiptir.

strace , ftrace ve truss gibi araçlar , bir işlemin baştan yürütülmesine ve işlemin çağırdığı tüm sistem çağrılarını raporlamasına izin verir veya halihazırda çalışan bir sürece ekleyebilir ve işlem izinleri ihlal etmiyorsa, söz konusu işlem tarafından yapılan herhangi bir sistem çağrısını engelleyebilir. kullanıcının. Programın bu özel yeteneği genellikle ptrace gibi sistem çağrıları veya procfs'deki dosyalarda sistem çağrıları ile de uygulanmaktadır .

Tipik uygulamalar

Sistem çağrılarını uygulamak, bir tür mimariye özgü özellik içeren, kullanıcı alanından çekirdek alanına bir kontrol aktarımı gerektirir. Bunu uygulamanın tipik bir yolu, bir yazılım kesmesi veya tuzağı kullanmaktır . Kontrolü işletim sistemi çekirdeğine keser, bu nedenle yazılımın ihtiyaç duyduğu sistem çağrı numarasıyla bir kayıt oluşturması ve yazılım kesmesini yürütmesi yeterlidir.

Bu, birçok RISC işlemcisi için sağlanan tek tekniktir , ancak x86 gibi CISC mimarileri ek teknikleri destekler. Örneğin, x86 komut seti / ve / talimatlarını içerir (bu iki mekanizma sırasıyla AMD ve Intel tarafından bağımsız olarak oluşturulmuştur , ancak özünde aynı şeyi yaparlar). Bunlar, bir sistem çağrısı için bir kesme yükü olmadan kontrolü çekirdeğe hızlı bir şekilde aktarmak üzere tasarlanmış "hızlı" kontrol transfer talimatlarıdır. Linux 2.5, mümkün olduğunda x86'da bunu kullanmaya başladı ; daha önce, kesme 0x80 yürütülmeden önce sistem çağrı numarasının kayıt defterine yerleştirildiği talimatı kullanıyordu . SYSCALLSYSRETSYSENTERSYSEXITINTEAX

Daha eski bir mekanizma, çağrı kapısıdır ; orijinal olarak Multics'te ve daha sonra kullanılır , örneğin Intel x86'daki çağrı kapısına bakın . Bir programın, işletim sisteminin önceden kurduğu güvenli bir kontrol aktarım mekanizmasını kullanarak doğrudan bir çekirdek işlevini çağırmasına izin verir. Bu yaklaşım, muhtemelen x86 bellek segmentasyonunu kullanan bir uzak çağrının (geçerli kod segmentinden farklı bir segmentte bulunan bir prosedüre yapılan çağrı) gerekliliği ve bunun sonucunda ortaya çıkan taşınabilirlik eksikliği nedeniyle x86'da popüler olmamıştır . yukarıda belirtilen daha hızlı talimatların varlığı.

İçin IA-64 mimarisine, EPCtalimat kullanılır (İmtiyazlı Kod Enter). İlk sekiz sistem çağrısı argümanı kayıtlarda ve geri kalanı yığında iletilir.

In IBM System / 360 anabilgisayar ailesi ve onun halefleri, bir Amiri Çağrı talimatı ( SVC uygular, talimatında yerine kayıt numarası eski tesislerin IBM'in kendi işletim sistemlerinin çoğunda, ve için için bir sistem çağrısı ile), Linux'taki tüm sistem çağrıları. MVS'nin sonraki sürümlerinde IBM, birçok yeni tesis için Program Çağrısı (PC) talimatını kullanır. Özellikle, arayan kişi Servis İstek Bloğu (SRB) modundayken PC kullanılır .

PDP-11 mini bilgisayar kullanılır EMT ve IOT IBM System / 360 benzer bir şekilde, talimatlar, SVC ve x86 INT , talimat kodu koymak; kontrolü işletim sistemine aktararak belirli adreslere kesmeler oluştururlar. VAX PDP-11 serisine 32 bit halefi kullanılan CHMK , CHME ve CHMS çeşitli düzeylerde ayrıcalıklı koduna sistem çağrıları yapmak için talimatları; kod, talimatın bir argümanıdır.

Sistem çağrılarının kategorileri

Sistem çağrıları kabaca altı ana kategoride gruplandırılabilir:

  1. Süreç kontrolü
  2. Dosya yönetimi
    • dosya oluştur, dosyayı sil
    • aç kapa
    • okuma, yazma, yeniden konumlandırma
    • dosya özniteliklerini al/ayarla
  3. Cihaz yönetimi
    • cihazı talep et, cihazı serbest bırak
    • okuma, yazma, yeniden konumlandırma
    • cihaz özelliklerini al/ayarla
    • aygıtları mantıksal olarak takın veya ayırın
  4. Bilgi bakımı
    • Toplam sistem bilgilerini al/ayarla (saat, tarih, bilgisayar adı, kuruluş vb. dahil)
    • işlem, dosya veya cihaz meta verilerini al/ayarla (yazar, açıcı, oluşturma saati ve tarihi vb. dahil)
  5. İletişim
    • iletişim bağlantısını oluştur, sil
    • gönder, mesaj al
    • aktarım durumu bilgisi
    • uzak aygıtları bağlama veya ayırma
  6. Koruma
    • dosya izinlerini al/ayarla

İşlemci modu ve bağlam değiştirme

Çoğu Unix benzeri sistemdeki sistem çağrıları , işlemci yürütme modunun daha ayrıcalıklı bir modla değiştirilmesiyle gerçekleştirilen çekirdek modunda işlenir , ancak bir ayrıcalık bağlam anahtarı gerçekleşse de , işlem bağlamı anahtarı gerekmez . Donanım, işlemci durum kaydına göre yürütme modu açısından dünyayı görür ve işlemler, işletim sistemi tarafından sağlanan bir soyutlamadır. Bir sistem çağrısı genellikle başka bir işleme bağlam geçişi gerektirmez; bunun yerine, hangi işlemin onu çağırdığı bağlamında işlenir.

Bir olarak iş parçacıklı işlemi, sistem çağrıları birden yapılabilir parçacığı . Bu tür çağrıların ele alınması, belirli işletim sistemi çekirdeğinin tasarımına ve uygulama çalışma zamanı ortamına bağlıdır. Aşağıdaki liste, işletim sistemlerinin izlediği tipik modelleri gösterir:

  • Çoktan bire model: Bir işlemdeki herhangi bir kullanıcı iş parçacığından gelen tüm sistem çağrıları, tek bir çekirdek düzeyinde iş parçacığı tarafından işlenir. Bu modelin ciddi bir dezavantajı vardır - herhangi bir engelleme sistemi çağrısı (kullanıcıdan girdi beklemek gibi) diğer tüm iş parçacıklarını dondurabilir. Ayrıca, aynı anda yalnızca bir iş parçacığı çekirdeğe erişebildiğinden, bu model birden fazla işlemci çekirdeği kullanamaz.
  • Bire bir model: Her kullanıcı iş parçacığı, bir sistem çağrısı sırasında ayrı bir çekirdek düzeyinde iş parçacığına bağlanır. Bu model, yukarıdaki sistem çağrılarını engelleme sorununu çözer. Tüm büyük Linux dağıtımlarında , macOS , iOS , son Windows ve Solaris sürümlerinde bulunur.
  • Çoktan çoğa model: Bu modelde, bir kullanıcı iş parçacığı havuzu, bir çekirdek iş parçacığı havuzuna eşlenir. Bir kullanıcı iş parçacığı havuzundan gelen tüm sistem çağrıları, ilgili çekirdek iş parçacığı havuzundaki iş parçacıkları tarafından işlenir .
  • Hibrit model: Bu model, çekirdeğin yaptığı seçime bağlı olarak hem çoktan çoğa hem de bire bir modelleri uygular. Bu, IRIX , HP-UX ve Solaris'in eski sürümlerinde bulunur .

Ayrıca bakınız

Notlar

Referanslar

Dış bağlantılar