Menu
Coddy logo textTech

Syscall Nedir?

Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 31 / 45.

mov ve lea gibi assembly talimatları yazdınız. Bu talimatlar doğrudan CPU üzerinde çalışır. Peki ya CPU'nun kendi başına yapamayacağı bir şeyi yapmanız gerekirse — ekrana yazdırmak, klavyeden okumak veya bir programdan çıkmak gibi?

Bu görevler için işletim sistemine (bu kursta Linux) ihtiyacınız var.

Sistem çağrısı (syscall) nedir?

Bir syscall (sistem çağrısı), programınızdan işletim sistemine yapılan bir istektir. İşletim sisteminden sizin için bir şey yapmasını bu şekilde istersiniz.

Neden syscall'lara ihtiyacınız var:

Görevİşlemci bunu tek başına yapabilir mi?Syscall gerekir mi?
İki sayıyı toplamakEvetHayır
Veriyi register'lar arasında taşımakEvetHayır
Ekrana metin yazdırmakHayırEvet
Klavye girişini okumakHayırEvet
Bir programdan çıkmakHayırEvet
Bir dosya açmakHayırEvet

Bir syscall nasıl çalışır:

  1. rax içine bir syscall numarası koyarsınız (işletim sistemine ne istediğinizi söyler)
  2. Diğer register'lara (rdi, rsi, rdx, vb.) argümanları koyarsınız
  3. syscall komutunu çalıştırırsınız
  1. CPU, işletim sistemi çekirdeğine (OS kernel) geçer
  2. İşletim sistemi isteği gerçekleştirir
  3. İşletim sistemi kontrolü programınıza geri verir

Analoji:

Bir sistem çağrısını (syscall) bir devlet dairesini aramak gibi düşünün:

AdımAnalojiAssembly dilinde
1Hangi hizmete ihtiyacınız olduğuna karar verinSistem çağrısı numarasını seçin (rax içine koyun)
2Formları doldurunArgümanları register'lara yerleştirin
3İsteği gönderinsyscall komutunu çalıştırın
4Devlet bunu işlerİşletim sistemi çekirdeği (OS kernel) işi yapar
5Sonucunuzu geri alınProgram devam eder

Bu kursta öğreneceğiniz sistem çağrıları (syscalls):

SyscallNumaraNe yaparBölüm
exit60Programı sonlandırırBölüm 4
write1Ekrana metin yazdırırBölüm 5

Şimdilik en önemli sistem çağrısı (syscall): <strong>exit</strong>

exit olmadan, programınız sonsuza kadar çalışmaya devam eder veya çöker. Yazdığınız her program bir exit sistem çağrısı (syscall) ile bitmelidir.

mov rax, 60    ; çıkış için sistem çağrısı numarası
mov rdi, 0     ; çıkış kodu (0 = başarılı)
syscall        ; işletim sisteminden çıkış yapmasını iste

Kendin dene

Bu ders bir kod alıştırması içermiyor.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler