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 olur; ö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.
Sistem çağrısı (syscall) nedir?
Bir syscall (sistem çağrısı), programınızın işletim sistemine gönderdiği bir istektir. İşletim sisteminden sizin için bir şey yapmasını bu şekilde istersiniz.
Neden sistem çağrılarına (syscall) ihtiyacınız var:
| Görev | CPU bunu tek başına yapabilir mi? | Sistem çağrısı gerekir mi? |
|---|---|---|
| İki sayıyı toplama | Evet | Hayır |
| Verileri yazmaçlar arasında taşıma | Evet | Hayır |
| Ekrana metin yazdırma | Hayır | Evet |
| Klavyeden girdi okuma | Hayır | Evet |
| Bir programdan çıkma | Hayır | Evet |
| Bir dosyayı açma | Hayır | Evet |
Bir sistem çağrısı nasıl çalışır:
- sistem çağrısı numarasını
raxiçine koyarsın (işletim sistemine ne istediğini bildirir) - argümanları diğer yazmaçlara koyarsın (
rdi,rsi,rdx, vb.) syscallkomutunu çalıştırırsın
- CPU, işletim sistemi çekirdeğine atlar
- İşletim sistemi isteği yerine getirir
- İşletim sistemi denetimi programınıza geri verir
Analojisi:
Bir sistem çağrısını, bir devlet dairesini aramak gibi düşün:
| Adım | Analojisi | Assembly'de |
|---|---|---|
| 1 | Hangi hizmete ihtiyacın olduğuna karar ver | Sistem çağrısı numarasını seç (rax içine koy) |
| 2 | Formları doldur | Argümanları yazmaçlara koy |
| 3 | İsteği gönder | syscall komutunu çalıştır |
| 4 | Devlet isteği 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ı: exit
exit olmadan programınız sonsuza kadar çalışmaya devam eder veya çöker. Yazdığınız her program bir exit sistem çağrısıyla bitmelidir.
mov rax, 60 ; exit için syscall numarası
mov rdi, 0 ; çıkış kodu (0 = başarı)
syscall ; OS'den çı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.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground