I have been bu sorunun cevabı yoluyla ama oldukça sistem çağrıları ve kütüphane fonksiyonları arasındaki farkı anlayamıyorum. Kavramsal olarak, ikisi arasındaki fark nedir?
I have been bu sorunun cevabı yoluyla ama oldukça sistem çağrıları ve kütüphane fonksiyonları arasındaki farkı anlayamıyorum. Kavramsal olarak, ikisi arasındaki fark nedir?
Yanıtlar:
Kavramsal olarak, bir kütüphane işlevi işleminizin bir parçasıdır.
Çalışma zamanında, çalıştırılabilir kodunuz ve bağımlı olduğu herhangi bir kütüphanenin (libc.so gibi) kodu tek bir işleme bağlanır. Bu nedenle, böyle bir kütüphanedeki bir işlevi çağırdığınızda, işleminizin bir parçası olarak, aynı kaynak ve ayrıcalıklarla çalışır. Kendiniz yazdığınız bir işlevi çağırmakla aynı fikirdir (PLT ve / veya trambolin işlevleri gibi, eğer ilgilenirseniz bakabileceğiniz olası istisnalar hariç).
Kavramsal olarak, bir sistem çağrısı, kodunuzdan (genellikle ayrıcalıklı olmayan) çekirdeğe (gerektiğinde ayrıcalıkları yükseltme hakkı vardır) bir çağrı yapmak için kullanılan özel bir arabirimdir.
Örneğin, Linux man brk . Bir C programı malloc
bellek ayırmayı çağırdığında, glibc'de bir kütüphane işlevi çağırır .
İşlem içinde tahsis için zaten yeterli alan varsa, gerekli yığın yönetimini yapabilir ve belleği arayana geri döndürebilir.
Değilse, glibc'in çekirdekten daha fazla bellek istemesi gerekir: o (muhtemelen) brk
glibc işlevini çağırır , bu da brk
syscall'ı çağırır . Kontrol, çekirdeğe ancak bir kez geçtikten sonra, global sanal bellek durumu daha fazla bellek ayırmak ve işleminizin adres alanında eşleştirmek için değiştirilebilir.
Yararsız yanıtına ekleme:
Kütüphane işlevleri, sistem çağrılarından daha hızlıdır ve genellikle işlemin ayrıcalıkları ve belleğiyle çalıştıkları için izin / güvenlik hususları içermez.
Öte yandan Syscalls, çekirdekte çalıştıklarından, sistemdeki her şeye erişebildiklerinden, arama işleminin onları çağırırken neler yapabileceğini kontrol etmeleri gerekir (bir dosyayı açma izinlerine sahip olduğunu doğrulayın, çünkü örneğin), sistem çağrıları çekirdeğin içinde olduğundan, bunları çağırmak CPU'da yalnızca bir kütüphane çağrısını çağırmaya göre çok ağır bir işlem olan bir bağlam anahtarı gerektirir.
Sistem çağrıları genellikle izleme programlarında sistem CPU kullanımı olarak yansır.
kütüphane çağrısı - uygulamaya bağlı bir altyordamı çağırır (kütüphane dahil etme veya ekleme yoluyla).
sistem çağrısı - kontrolü işletim sistemine (kullanıcı-> sistem pro--> işletim sistemi) aktarır ve işlemciyi ayrıcalıklı moda geçirir