Syscall Nedir?
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 31 / 45.
mov ve lea gibi assembly talimatları yazdın. Bu talimatlar doğrudan CPU üzerinde çalışır. Peki CPU’nun kendi başına yapamayacağı bir şeyi yapman gerekirse ne olacak; örneğin ekrana yazdırmak, klavyeden okumak veya bir programdan çıkmak?
Bu görevler için işletim sistemine (bu kursta Linux) ihtiyacın var.
syscall nedir?
Bir syscall (sistem çağrısı), programınızdan işletim sistemine gönderilen bir istektir. OS'tan sizin için bir şey yapmasını isteme şeklinizdir.
Neden sistem çağrılarına ihtiyacınız var:
| Görev | CPU bunu tek başına yapabilir mi? | Sistem çağrısı gerekli mi? |
|---|---|---|
| İki sayıyı toplama | Evet | Hayır |
| Verileri kayıtlar arasında taşıma | Evet | Hayır |
| Ekrana metin yazdırma | Hayır | Evet |
| Klavye girdisini okuma | Hayır | Evet |
| Bir programdan çıkma | Hayır | Evet |
| Bir dosyayı açma | Hayır | Evet |
Bir syscall nasıl çalışır:
- syscall numarasını
raxiçine yerleştirirsin (işletim sistemine ne istediğini bildirir) - argümanları diğer register'lara (
rdi,rsi,rdxvb.) yerleştirirsin syscalltalimatını çalıştırırsın
- CPU, işletim sistemi çekirdeğine atlar
- İşletim sistemi isteği gerçekleştirir
- İşletim sistemi denetimi programınıza geri verir
Benzetme:
Bir syscall'ı devlet dairesini aramak gibi düşün:
| Adım | Benzetme | Assembly'de |
|---|---|---|
| 1 | Hangi hizmete ihtiyacın olduğuna karar ver | Syscall numarasını seç (rax içine koy) |
| 2 | Formları doldur | Argümanları yazmaçlara koy |
| 3 | Talebi gönder | syscall komutunu çalıştır |
| 4 | Devlet bunu işler | İşletim sistemi çekirdeği işi yapar |
| 5 | Sonucunu geri al | Program devam eder |
Bu kursta öğreneceğiniz sistem çağrıları:
| Sistem çağrısı | Numara | Ne yapar | Bölüm |
|---|---|---|---|
exit | 60 | Programı sonlandırır | 4. Bölüm |
write | 1 | Ekrana metin yazdırır | 5. Bölüm |
Şimdilik en önemli sistem çağrısı: <strong>exit</strong>
exit olmadan programınız sonsuza kadar çalışmaya devam eder veya çökerdi. Yazdığınız her program bir exit sistem çağrısıyla sona ermelidir.
mov rax, 60 ; syscall number for exit
mov rdi, 0 ; exit code (0 = success)
syscall ; ask the OS to exitKendin 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.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground