Linux'ta bir Kütüphane çağrısı ile Sistem çağrısı arasındaki fark nedir?


13

Linux'ta bir Kütüphane çağrısı ile Sistem çağrısı arasındaki farkın ne olduğunu bilmek istiyorum. Her ikisinin de arkasındaki kavramların iyi anlaşılması için herhangi bir işaretçi büyük takdir edilecektir.

Yanıtlar:


9

Gerçekten bir "kütüphane çağrısı" diye bir şey yoktur. Paylaşılan kitaplığa bağlı bir işlevi çağırabilirsiniz. Ve bu, çağrılacak işlevin konumunu belirlemek için çalışma zamanında kütüphane yolunun aranacağı anlamına gelir.

Sistem çağrıları, çekirdek tarafından gerçekleştirilen düşük düzeyli çekirdek çağrılarıdır.


Birisi yukarıdaki soruyu sorarsa, bunu Sistem çağrısı ile İşlev Çağrısı arasındaki fark olarak yorumlayabilirim.
Sen

"man ltrace" benim "Bir kütüphane çağrı izleyici" verir :)
ysdx

8

Eğer yazarsanız man mansizin kabuğunda, manuel bölümlerin listesini göreceksiniz

2 Sistem çağrıları (çekirdek tarafından sağlanan işlevler)

3 Kütüphane çağrıları (program kütüphanelerindeki fonksiyonlar)

Örneğin, chmodyazarken kılavuzun 2. bölümünde bulabilirsiniz man chmod. Ve fprintf3. bölümde.


3

Sistem çağrıları doğrudan çekirdek tarafından yapılır.

Kütüphane çağrıları dinamik (veya statik olarak bağlı) bir kütüphane tarafından işlenir. Kütüphane çağrısı yapan program, çağrının çalışması için önce bu kütüphaneyi içe aktarmalıdır. Kütüphane çağrılarının kendisi sistem çağrılarını kullanabilir.

Bazen çekirdek tarafından sağlanmayan ekstra işlevsellik veya kullanım kolaylığı sağlamak için kütüphaneler sistem çağrılarına "ön uç" olarak verilir.


Kütüphane çağrılarının dinamik bir kütüphane tarafından yapılması gerekmez. Kitaplıklar statik olarak bağlanabilir, böylece içe aktarma (yük) gerekmez.
jlliagre

Doğru. Bu bilgiyi ekledim.
LawrenceC

Sadece yarısı ...
jlliagre

sadece kafasında çalışmamalısınız dosya da kütüphane çağrıları bir parçası olabilir?
力 力

1

Sistem çağrıları , işletim sisteminin uygulamaların kullanmasını sağladığı işlevlerdir. Ancak math.h, string.h, vb. Gibi işlevler, işletim sistemiyle arayüz kurmakla ilgisi olmayan işlevlerdir.


1

Temel olarak linux çekirdek viz'in iki modu vardır.

  1. Kullanıcı modu,
  2. Çekirdek modu.

Herhangi bir linux çekirdeği bu iki mod arasında kendisini ileri ve geri değiştirir. Genellikle, Kütüphane çağrıları idam olsun Kullanıcı modu ve Sistem çağrıları idam olsun Çekirdek modu . İşletim sistemi terimleriyle, Çekirdek modu Atomik yapıda ve Denetleyici modundadır. Hemen hemen tüm Kütüphane çağrıları görevlerini yerine getirmek için çekirdekten yardım almalıdır. Her kütüphane çağrısı sırayla sistem çağrısının temelini oluşturur. Aşağıdaki örneği kullanarak fikri daha net hale getirelim

  1. fopen (): bir Kütüphane çağrısıdır,
  2. open (): bir Sistem çağrısıdır.

C programında her zaman, başlık dosyasından fopen () kullanın. Programlama ortamı çekirdekten sistem çağrısı open () öğesini çağırır ve dosya açma görevini gerçekleştirir. Yine yürüttükten sonra, akış kontrolünü kullanıcı moduna döndürün.

Bunu göstermek için aşağıdaki görevleri gerçekleştirin

  1. man man: burada 1-8 arası manuel bölüm bulacaksınız her birinin amacı vardır.
  2. Yapın man fopen: FOPEN(3)burada göreceksiniz , burada 3, c-kütüphane çağrıları bölümü olan man sayfalarının manuel bölümünü 3 göstermektedir.
  3. Yapın man open: OPEN(2)Burada 2'yi göreceksiniz , burada 2 sistem çağrıları bölümü olan man sayfalarının manuel bölümünü 2 göstermektedir.

    Umarım kavramı anlarsın.


Çekirdeğin yalnızca bir modu, çekirdek modu vardır. Kullanıcı süreçleri, ileri ve geri geçiş yapan iki çalışma moduna sahiptir: kullanıcı alanı ve çekirdek.
jlliagre

1

Sadece diğer cevaplarda bahsedilen farklılıklara ekleyerek.

Kütüphane çağrısı basitçe bir işlev çağrısı olduğundan, kullanıcı alanından çekirdek alanına geçiş olmaz. Diğer yandan, bir sistem çağrısı, sistem çağrısı çekirdek modunda çalıştığı için kullanıcı alanından çekirdek alanına geçiş yapar.

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.