Sistem çağrıları ve kütüphane fonksiyonları arasındaki fark


Yanıtlar:


19

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ı mallocbellek 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) brkglibc işlevini çağırır , bu da brksyscall'ı ç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.


11

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.


0
  1. Syscall işletim sistemi desteklenirken lib fun derleyici desteklenir
  2. Libcall belirliyse syscall jeneriktir, getc gibi bir lib eğlencesi her seferinde sadece bir karakter dizeye veya kelimeye göre değil, metin dosyasını, ikili dosyayı ve daha birçok dosya türünü açmak için kullanılabilir.

0

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

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.