GNU/Linux >> Belajar Linux >  >> Linux

Mengapa nomor panggilan sistem Linux di x86 dan x86_64 berbeda?

Adapun alasan di balik penomoran spesifik, yang tidak cocok dengan arsitektur lain [kecuali "x32" yang sebenarnya hanyalah bagian dari arsitektur x86_64]:Pada masa-masa awal dukungan x86_64 di kernel linux, sebelum ada kendala kompatibilitas mundur yang serius, semua panggilan sistem dinomori ulang untuk mengoptimalkannya pada tingkat penggunaan cacheline.

Saya tidak cukup tahu tentang pengembangan kernel untuk mengetahui dasar spesifik untuk pilihan ini, tetapi ternyata ada beberapa logika di balik pilihan untuk menomori ulang semuanya dengan angka-angka khusus ini daripada sekadar menyalin daftar dari arsitektur yang ada dan menghapus yang tidak terpakai. Sepertinya urutannya mungkin didasarkan pada seberapa umum namanya - mis. baca/tulis/buka/tutup di depan. Keluar dan percabangan mungkin tampak "mendasar", tetapi masing-masing dipanggil hanya sekali per proses.

Mungkin juga ada sesuatu yang terjadi tentang menjaga panggilan sistem yang biasanya digunakan bersama dalam baris cache yang sama (nilai-nilai ini hanya bilangan bulat, tetapi ada tabel di kernel dengan pointer fungsi untuk masing-masing, sehingga setiap grup dari 8 panggilan sistem menempati baris cache 64-byte untuk tabel itu)


Lihat jawaban untuk pertanyaan "Mengapa nomor panggilan sistem berbeda di amd64 linux?" di Stack Overflow.

Singkatnya:demi kompatibilitas, daftar panggilan sistem stabil dan hanya dapat bertambah. Ketika arsitektur x86 64 muncul, ABI (argument passing, return value) berbeda, sehingga pengembang kernel mengambil kesempatan untuk membawa perubahan yang telah lama ditunggu.


Linux
  1. Linux – Apa Memori Tinggi dan Memori Rendah Di Linux?

  2. Linux – Mengapa Utils Linux Tidak Menggunakan System Call Untuk Mendapatkan Waktu Saat Ini?

  3. Linux – Metode Panggilan Sistem di Kernel Baru?

  1. x86_64 Perakitan Kebingungan Panggilan Sistem Linux

  2. Panggilan sistem Linux tercepat

  3. Mengapa ada kebutuhan untuk memodifikasi tabel system call di Linux?

  1. Apa itu memori tinggi dan memori rendah di Linux?

  2. Apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux?

  3. Mengapa mirip Linux Unix jika kernelnya monolitik?