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ı toplamak | Evet | Hayır |
| Veriyi register'lar arasında taşımak | Evet | Hayır |
| Ekrana metin yazdırmak | Hayır | Evet |
| Klavye girişini okumak | Hayır | Evet |
| Bir programdan çıkmak | Hayır | Evet |
| Bir dosya açmak | Hayır | Evet |
Bir syscall nasıl çalışır:
raxiçine bir syscall numarası koyarsınız (işletim sistemine ne istediğinizi söyler)- Diğer register'lara (
rdi,rsi,rdx, vb.) argümanları koyarsınız syscallkomutunu çalıştırırsınız
- CPU, işletim sistemi çekirdeğine (OS kernel) geçer
- İşletim sistemi isteği gerçekleştirir
- İş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ım | Analoji | Assembly dilinde |
|---|---|---|
| 1 | Hangi hizmete ihtiyacınız olduğuna karar verin | Sistem çağrısı numarasını seçin (rax içine koyun) |
| 2 | Formları doldurun | Argümanları register'lara yerleştirin |
| 3 | İsteği gönderin | syscall komutunu çalıştırın |
| 4 | Devlet bunu işler | İşletim sistemi çekirdeği (OS kernel) işi yapar |
| 5 | Sonucunuzu geri alın | Program devam eder |
Bu kursta öğreneceğiniz sistem çağrıları (syscalls):
| Syscall | Numara | Ne yapar | Bölüm |
|---|---|---|---|
exit | 60 | Programı sonlandırır | Bölüm 4 |
write | 1 | Ekrana metin yazdırır | Bö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ı isteKendin dene
Bu ders bir kod alıştırması içermiyor.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.