Ana içeriğe geç

System Call

Sistem Çağrısı

Okunuşu
sistım kol
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/system-call

Kısaca

System call, bir programın işletim sistemi kernel'ından bir dosyayı okumak ya da process başlatmak gibi ayrıcalıklı bir işlem yapmasını istediği çağrıdır.

System call (sistem çağrısı) nedir?

Çoğu zaman syscall diye kısaltılan system call, bir uygulama ile kernel arasındaki resmî kapıdır. Programlar kısıtlı bir kullanıcı modunda çalışır ve donanıma ya da diğer programların belleğine doğrudan dokunamaz; bu yüzden bir dosyayı açmaları, ağ üzerinden veri göndermeleri, bir process başlatmaları veya daha fazla bellek almaları gerektiğinde bir system call yapar ve işi kernel'a bırakırlar.

Bir system call yapmak için program, bir syscall numarasını ve argümanlarını CPU yazmaçlarına koyar ve CPU'yu kernel moduna geçiren, x86-64'te syscall gibi özel bir komut çalıştırır. Kernel isteği doğrular, işlemi gerçekleştirir ve kullanıcı moduna geri dönmeden önce bir sonuç ya da hata kodu döndürür. Unix benzeri sistemlerdeki yaygın system call'lar arasında open, read, write, fork, execve ve mmap vardır.

Bir banka gişesini düşünün. Müşteriler kasaya giremez ama isteklerini gişe görevlisine verebilir; görevli onu kontrol eder ve parayı onlar adına ele alır. Çoğu geliştirici system call'ları nadiren elle yazar; C'deki printf, Python'daki open() ya da Node.js'teki fs.readFile gibi fonksiyonlar bunları sizin için arka planda yapar.

System call, normal bir fonksiyon çağrısı ya da kütüphane API'siyle aynı şey değildir. Normal bir fonksiyon çağrısı kullanıcı modunda programınızın içinde kalır; system call ise kernel'a geçer ve bu onu belirgin biçimde yavaşlatır. Kütüphanelerin çoğu zaman veriyi tamponlayıp çok sayıda küçük çağrı yerine daha az sayıda, daha büyük system call yapmasının nedeni bu maliyettir.

Önemli noktalar

  • System call, kullanıcı modundaki bir programın kernel'dan ayrıcalıklı bir hizmet istemesinin yoludur.
  • Her system call CPU'yu kullanıcı modundan kernel moduna ve geri geçirir.
  • Örnekler arasında open, read, write, fork ve mmap vardır.
  • Standart kütüphaneler system call'ları sarmalar; bu yüzden geliştiriciler onları nadiren doğrudan çağırır.
  • System call'lar normal fonksiyon çağrılarından pahalıdır; bu yüzden programlar onları toplu yapmaya çalışır.

Örnek

Python'ın os modülü üzerinden system call yapmakpython
import os

# os.open, os.write and os.close are thin wrappers
# around the open, write and close system calls
fd = os.open("hello.txt", os.O_WRONLY | os.O_CREAT, 0o644)
os.write(fd, b"Hello from a system call\n")
os.close(fd)

# Ask the kernel for this process's ID (the getpid system call)
print(os.getpid())

Sık sorulan sorular

System call ile API arasındaki fark nedir?

API, yazılımı kullanmak için tanımlanmış herhangi bir arayüzdür; system call ise kernel'ın sağladığı belirli alt düzey arayüzdür. C standart kütüphanesi gibi kütüphane API'leri system call'ları sarmalayarak onları kullanmayı daha kolay ve taşınabilir kılar.

Bir programın hangi system call'ları yaptığını nasıl görebilirim?

Linux'ta bir programı strace altında, örneğin strace ls ile çalıştırarak yaptığı her system call'ı argümanları ve sonuçlarıyla birlikte yazdırabilirsiniz. Diğer işletim sistemleri de benzer izleme araçları sunar.

System call'lar neden yavaştır?

Her system call CPU'yu kullanıcı modundan kernel moduna ve geri geçirir ve kernel isteği doğrulamak zorundadır. Bu ek yük tek bir çağrı için çok küçüktür, ancak bir program milyonlarca küçük çağrı yaptığında birikir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar